MySQL之外來鍵以及操作表的SQL語句補充
阿新 • • 發佈:2022-03-02
外來鍵
其實就是用來標識表與表之間的資料關係,簡單的理解為該欄位可以讓你去到其他表中查詢資料
表與表之間建關係
1、表關係分類
一對一
多對多
一對多
沒有關係
判斷表關係的方式:換位思考
2、一對多
針對一對多的表關係 外來鍵欄位建在多的一方
foreign key(dep_id) references dep(id)
create table emp( id int primary key auto_increment, name varchar(32), age int, dep_idint, 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) referencesauthor(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( idint 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 舊欄位名 新欄位名 舊資料型別 [完整性約束條件…];