mysql 表關係 與 修改表結構

mysql 表關係 與 修改表結構

兩張表關係

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

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

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

  • 這時就(產成第三張表) 把兩個表的id,做爲第三張表的外鍵,建立關係表sql

  • 多個做者能夠共同出版一本書
  • 多本書能夠是一個做者寫的
  • 關係表設置外鍵 foreign key 分別對應做者和書的idcode

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

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

分析步驟

"""
#一、先站在左表的角度去找
是否左表的多條記錄能夠對應右表的一條記錄,若是是,則證實左表的一個字段foreign key 右表一個字段(一般是id)

#二、再站在右表的角度去找
是否右表的多條記錄能夠對應左表的一條記錄,若是是,則證實右表的一個字段foreign key 左表一個字段(一般是id)

#三、總結:
#多對一:
若是隻有步驟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;

相關文章
相關標籤/搜索