1. 程式人生 > 其它 >MySQL之外來鍵以及操作表的SQL語句補充

MySQL之外來鍵以及操作表的SQL語句補充

外來鍵

  其實就是用來標識表與表之間的資料關係,簡單的理解為該欄位可以讓你去到其他表中查詢資料

表與表之間建關係

  1、表關係分類

    一對一

    多對多

    一對多

    沒有關係

    判斷表關係的方式:換位思考

  2、一對多

    針對一對多的表關係 外來鍵欄位建在多的一方

    foreign key(dep_id) references dep(id)

create table emp(
    id int primary key auto_increment,
    name varchar(32),
    age int,
    dep_id 
int, foreign key(dep_id) references dep(id) ); create table dep( id int primary key auto_increment, dep_name varchar(32), dep_desc varchar(254) );

  小技巧:使用SQL語句建立真正意義上的表關係 可以先建立不含外來鍵欄位的基本表,之後再新增外來鍵欄位

  3、多對多

    多對多表關係 需要單獨開設第三張表儲存(並且第三張表可以不繫結)

    關鍵字

foreign key(author_id) references
author(id) on update cascade # 級聯更新 on delete cascade, # 級聯刪除

    例子

create table book(
    id int primary key auto_increment,
    title varchar(32),
    price float(6,2)
);

create table author(
    id int primary key auto_increment,
    name varchar(32),
    age int
);

create table book2author(
    id 
int primary key auto_increment, author_id int, book_id int, foreign key(author_id) references author(id) on update cascade # 級聯更新 on delete cascade, # 級聯刪除 foreign key(book_id) references book(id) on update cascade # 級聯更新 on delete cascade # 級聯刪除 );

  4、一對一

    外來鍵欄位建在任何一方都可以 但是推薦建在查詢頻率較高的表中

create table author(
    id int primary key auto_increment,
    name varchar(32),
    age int,
    author_id int unique,
    foreign key(author_id) references author_detail(id)
    on update cascade  # 級聯更新
    on delete cascade  # 級聯刪除
);
create table author_detail( id int primary key auto_increment, phone varchar(32), address varchar(32) );

外來鍵約束

  1、在建立表的時候 需要先建立被關聯表(沒有外來鍵欄位的表)

  2、在插入新資料的時候 應該先確保被關聯表中有資料

  3、在插入新資料的時候 外來鍵欄位只能填寫被關聯表中已經存在的資料

  4、在修改和刪除被關聯表中的資料的時候 無法直接操作

    如果想要資料之間自動修改和刪除需要新增額外的配置

    create table emp1(
        id int primary key auto_increment,
        name varchar(32),
        age int,
        dep_id int,
        foreign key(dep_id) references dep1(id) 
         on update cascade  # 級聯更新
         on delete cascade  # 級聯刪除
    );
    create table dep1(
        id int primary key auto_increment,
        dep_name varchar(32),
        dep_desc varchar(254)
    );

操作表的SQL語句補充

  1、修改表名

ALTER TABLE 表名 
                          RENAME 新表名;

  2、增加欄位

ALTER TABLE 表名
                          ADD 欄位名  資料型別 [完整性約束條件…],
ALTER TABLE 表名
                          ADD 欄位名  資料型別 [完整性約束條件…]  FIRST;
ALTER TABLE 表名
                          ADD 欄位名  資料型別 [完整性約束條件…]  AFTER 欄位名; 

  3、刪除欄位

ALTER TABLE 表名 
                    DROP 欄位名;

  4、修改欄位 # modify只能改欄位資料型別完整約束,不能改欄位名,但是change可以!

      ALTER TABLE 表名 
                          MODIFY  欄位名 資料型別 [完整性約束條件…];
      ALTER TABLE 表名 
                          CHANGE 舊欄位名 新欄位名 舊資料型別 [完整性約束條件…];