一對多關系建立
以部門表與員工表為例
create table dep( id int primary key auto_increment, #創建主鍵非空且唯一 dep_name varchar(128), dep_desc varchar(128) ); create table emp( id int primary key auto_increment, emp_name varchar(128), emp_gender enum('mail', 'femail', 'others') default 'mail' #使用枚舉選擇性別,默認為mail dep_id int, #創建關聯字段 foreign key (dep_id) references dep(id) #創建與dep表關聯的外鍵dep_id on update cascade #級聯更新 on delete cascade #級聯刪除 #創建與dep表關聯的外鍵,級聯更新,級聯刪除
);
插入部門數據
insert into dep(dep_name, dep_desc) values('銷售部', '買賣'),('技術部','搞技術'),('財務部','管錢')
插入員工數據
insert into emp(emp_name, emp_gender, dep_id) values('張三', 18, 1),('李四',19,2),('王五', 20, 3),('馬六', 21, 1)
注意:需要在創建關聯表之前創建被關聯表, 在多的一方去建立外鍵
多對多關系建立
在創建多對多關系的時候, 先把兩個普通的表創建出來, 然后創建一個專門存放多對多關系的一個表(第三張表), 使用這張表去做關系綁定
以圖書表和作者表為例
create table book( id int primary key auto_increment, title varchar(64), price int ); create table authors( id int primary key auto_increment, name varchar(64), age int ); create table book_authors( id int primary key auto_increment, book_id int, foreign key(book_id) references book(id) on update cascade on delete cascade, author_id int, foreign key(author_id) references authors(id) on update cascade on delete cascade );
插入書籍數據
insert into book(title, price) values('圍城', 199),('鳥', 187),('柒個我', 299)
插入作者數據
insert into authors(name, age) values('張三', 18),('李四', 19)
插入第三張表數據
insert into book_authors(book_id, author_id) values(1,1),(1,2),(2,1),(3,1),(3,2)
一對一關系建立
在創建一對一的關系時, 外鍵可以建立在任何一張表, 但是推薦建立在查詢頻率比較高的那一張表
以用戶表為例
create table authordetail( id int primary key auto_increment, ipoh int, addr varchar(128) ); create table author( id int primary key auto_increment, name varchar(16), age int, authordetail_id int unique, # 一對一關系id不能重復 foreign key(authordetail) references authordetail(id) on update cascade on delete cascade );
修改表的語句
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…],
ADD 字段名 數據類型 [完整性約束條件…];
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…] FIRST; # 直接移到最前面
ALTER TABLE 表名
ADD 字段名 數據類型 [完整性約束條件…] AFTER 字段名; # 尋找插哪個字段的后面
3. 刪除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段 # modify只能改字段數據類型完整約束,不能改字段名,但是change可以!
ALTER TABLE 表名
MODIFY 字段名 數據類型 [完整性約束條件…];
ALTER TABLE 表名
CHANGE 舊字段名 新字段名 新數據類型 [完整性約束條件…];
復制表
create table 新表名 select * from 表名(要復制的表) # 只會復制表結構,key不會復制: 主鍵、外鍵和索引