mysql 表關係 與 修改表結構

来源:https://www.cnblogs.com/guokaifeng/archive/2019/07/15/11186606.html
-Advertisement-
Play Games

mysql 表關係 與 修改表結構 [TOC] 兩張表關係 多對一 以員工和部門舉例 多個員工對應一個部門 foreign key 永遠是在多的那張表中設置外鍵 多個員工對應一個部門 員工表關聯部門表 員工表是多 部門表是一 foreign key(欄位信息多的) references 表(欄位信息 ...


目錄

mysql 表關係 與 修改表結構

兩張表關係

  • 多對一 以員工和部門舉例 多個員工對應一個部門 foreign key 永遠是在多的那張表中設置外鍵

"""
從左邊的表思考,這張表的多條信息是否能對應上右邊表的一條信息,能對應上(成立),再從右邊的表思考,
右表的多條信息是否能對應上左表的一條信息(不成立),那麼兩張表就可以確定是多對一關係,右表是多,左表是一,右邊表就是設置外鍵的表
"""
  • 多個員工對應一個部門
  • 員工表關聯部門表
  • 員工表是多 部門表是一
  • foreign key(欄位信息多的) references 表(欄位信息少的)

  • 多對多 以書和作者舉例 多個作者合作出一本書(成立),多本書是一個作者(成立)

  • 這時就(產成第三張表) 把兩個表的id,作為第三張表的外鍵,創建關係表

  • 多個作者可以共同出版一本書
  • 多本書可以是一個作者寫的
  • 關係表設置外鍵 foreign key 分別對應作者和書的id

  • 一對一 以客戶 和 學員為例 (一個客戶報名繳費後,只能對應一個學員)

  • 先有客戶表,客戶成交後成為學員,後出現的學員表設置外鍵,並且要約束這個外鍵是唯一,關聯客戶表一對一關係成立
  • 如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,
    就是在左表foreign key右表的基礎上,將左表的外鍵欄位設置成unique即可

分析步驟

"""
#1、先站在左表的角度去找
是否左表的多條記錄可以對應右表的一條記錄,如果是,則證明左表的一個欄位foreign key 右表一個欄位(通常是id)

#2、再站在右表的角度去找
是否右表的多條記錄可以對應左表的一條記錄,如果是,則證明右表的一個欄位foreign key 左表一個欄位(通常是id)

#3、總結:
#多對一:
如果只有步驟1成立,則是左表多對一右表
如果只有步驟2成立,則是右表多對一左表

#多對多
如果步驟1和2同時成立,則證明這兩張表時一個雙向的多對一,即多對多,需要定義一個這兩張表的關係表來專門存放二者的關係

#一對一:
如果1和2都不成立,而是左表的一條記錄唯一對應右表的一條記錄,反之亦然。這種情況很簡單,
就是在左表foreign key右表的基礎上,將左表的外鍵欄位設置成unique即可
"""

修改表結構

  • 對錶結構進行修改的情況在那些時候發生?

    • 創建項目之前
    • 項目開發、運行過程中
"""
語法:
1. 修改表名
      alter table 表名 
                      rename 新表名;

2. 增加欄位
      alter table 表名
                      add 欄位名  數據類型 [完整性約束條件…],
                      add 欄位名  數據類型 [完整性約束條件…];
                            
3. 刪除欄位
      alter table 表名 
                      drop 欄位名;

4. 修改欄位
      alter table 表名 
                      modify  欄位名 數據類型 [完整性約束條件…];
      alter table 表名 
                      change 舊欄位名 新欄位名 舊數據類型 [完整性約束條件…];
      alter table 表名 
                      change 舊欄位名 新欄位名 新數據類型 [完整性約束條件…];

5.修改欄位排列順序/在增加的時候指定欄位位置
    alter table 表名
                     add 欄位名  數據類型 [完整性約束條件…]  first;
    alter table 表名
                     add 欄位名  數據類型 [完整性約束條件…]  after 欄位名;
    alter table 表名
                     change 欄位名  舊欄位名 新欄位名 新數據類型 [完整性約束條件…]  first;
    alter table 表名
                     modify 欄位名  數據類型 [完整性約束條件…]  after 欄位名;


6.去掉null約束
create table t(id int unique,name char(10) not null);
alter table t modify name char(10) null;


7.添加null約束
alter table t modify name char(10) not null;


8.去掉unique約束
alter table t drop index id;


9.添加unique約束
alter table t modify id int unique;

10.刪除表
drop table 表名;

"""
  • alter table 表名 modify 修改已經存在的欄位 的類型 寬度 約束

  • alter table 表名 change 修改已經存在的欄位 的類型 寬度 約束 和 欄位名字

  • alter table 表名 add 欄位名 數據類型(寬度) 約束 first/after name

  • alter table 表名 drop 欄位名

  • alter table 表名 modify name varchar(12) not null

  • alter table 表名 change name new_name varchar(12) not null

    • id name age
  • alter table 表名 modify age int not null after id;

  • alter table 表名 modify age int not null first;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 引子 什麼是索引 為什麼需要索引 使用索引 索引優化原理 正確使用索引 什麼是索引 在關係資料庫中,索引是一種單獨的、物理層面的對資料庫表中一列或多列的值進行排序的一種存儲結構; 也稱之為 有以下幾種: unique key primary key index key 索引的作用相當於圖書的目錄,可 ...
  • mysql用戶管理 !這是dba的活兒!,但是萬一公司沒有dba? mysql用戶指的是什麼? 我們每一次在操作前都需要指定賬號和密碼,這個賬號就是mysql的用戶; 為什麼要管理? 一個公司不可能只有一個工程師,大公司,不不僅有很多工程師 還有很多不同部門,但是資料庫伺服器只有一個,大家都要訪問, ...
  • Declare @Pk varChar(100);Declare @TBname varChar(100);declare cursor1 cursor for Select Sys2.name as TBname,Sys1.name as Pk from sysobjects Sys1 JOIN ...
  • --設置主鍵 --alter table 你的表名 add constraint pk_s primary key (id) SELECT 'alter table ' + TABLE_NAME + ' add constraint PK_'+TABLE_NAME +'_'+ COLUMN_NAME ...
  • --修改欄位為首字母大寫 -- EXEC sp_rename 'ShenBao_CaiGouFuKuan.Tid', 'Tid', @objtype = 'COLUMN'; SELECT 'EXEC sp_rename ''' + TABLE_NAME + '.' + COLUMN_NAME + ' ...
  • 我們採用開源項目 go-mysql-elasticsearch 實現數據同步,並針對馬蜂窩技術棧和實際的業務環境進行了一些定製化開發。 ...
  • 下載地址:https://dev.mysql.com/downloads/mysql/ 這裡選擇的是5.5的版本: 步驟1: 步驟2: 步驟三: 步驟四: 步驟5: 步驟6: 步驟7: 步驟8: 步驟9: 步驟10: 步驟11: 步驟12: 以上就是MySQL5.5的安裝步驟。。。 ...
  • 最近很多人問小編現在學習大數據這麼多,他們都是如何學習的呢。很多初學者在萌生向大數據方向發展的想法之後,不免產生一些疑問,應該怎樣入門? 應該學習哪些技術? 學習路線又是什麼? 今天特意為大家整理了一份大數據從入門到精通的學習路線。並且附帶學習資料和視頻。希望能夠幫助到大家。 第一階段:Linux理 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...