數據表操作與主鍵、外鍵、唯一鍵使用
mysql> alter database `DB` character set utf8;
2、根據查詢結果建立數據表,註意這樣復制的數據表是不能將主鍵也復制過來的,也就是說此時的新表示沒有主鍵的
mysql> create table student_bak select ID,name from student where ID=2;
mysql> create table student_bak2 select * from student;
3、修改數據表名(兩種方式都可以)
mysql> rename table student_bak to stu_bak;
mysql> alter table stu_bak rename student_bak;
4、修改列名(字段名)以及類型,註意修改類型的時候不能少於現有字段數據的大小,而且必須得兼容(把Name改為int類型是不允許的)
mysql> alter table student_bak2 change Name Stu_Name varchar(10);
5、增加主鍵(一個表中只能有一個主鍵),在初期創建表時沒有建立主鍵的話可以增加
mysql> alter table student_bak2 add constraint stu_id primary key(ID); //其中stu_id是主鍵名稱,也可以不加
6、刪除主鍵
mysql> alter table student_bak2 drop primary key;
7、復合主鍵(可以管理兩列),比如我吧student_bak2表的Age和Stu_Name兩列設置為復合主鍵
mysql> alter table student_bak2 add constraint stu_id primary key(Age,Stu_Name); //也就是說姓名或年齡可以相同,但是姓名和年齡同時相同就不可以了
8、增加字段
mysql> alter table student_bak2 add Address varchar(30) not null; //這樣增加的字段在表的最後
mysql> alter table student_bak2 add Address varchar(30) not null first; //first表示增加到第一列
mysql> alter table student_bak2 add Address varchar(30) not null after Age; //after表示添加到某列之後
9、刪除字段
mysql> alter table student_bak2 drop column Address;
10、建立唯一鍵
mysql> create table student(
ID int unsigned auto_increment,
Name varchar(10) not null unique, //unique代表唯一鍵,表示Name字段也不能出現重復,例如添加兩個"張三"是不允許的
Age tinyint unsigned, primary key(ID)
)engine=InnoDB default charset=utf8;
如果創建表時沒有建立唯一鍵,後續可以添加:
mysql> alter table student add constraint UK unique (Name); //其中UK是唯一鍵的名稱
11、刪除唯一鍵
mysql> alter table student drop index UK; //UK為唯一鍵名稱
12、創建外鍵(一般指向另一個表的主鍵或者唯一鍵),首先創建兩個表,然後創建外鍵把student表中的T_ID和teacher表中的ID進行關聯
mysql> create table student(
ID int unsigned auto_increment,
Name varchar(10) not null,
Age tinyint unsigned,T_ID int unsigned,
primary key(ID)
)engine=InnoDB default charset=utf8;
mysql> create table teacher(
ID int unsigned auto_increment primary key,
Name varchar(20) not null
) engine=InnoDB default charset=utf8;
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID); //創建外鍵,references表示關聯
13、刪除外鍵
mysql> alter table student drop foreign key WJ; //WJ是創建外鍵時指定的名稱
mysql> alter table student drop index WJ; //有時刪除鍵後索引還在,所以還要刪除索引
添加外鍵後的作用,小例子:
mysql> insert into teacher values (null,"王老師"),(null,"彭老師"); //在teacher表中添加兩個老師,現在的ID分別是1和2
mysql> insert into student (Name,Age,T_ID) values ("張三",20,3); //此時在student的T_ID字段添加3會報錯,因為teacher表中只有1和2
14、刪除某一行,註意帶有約束的行不能刪除
mysql> delete from teacher where ID=3;
mysql> delete from teacher where ID=2; //此時會報錯,因為在student中有外鍵關聯
ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`DB`.`student`, CONSTRAINT `WJ` FOREIGN KEY (`T_ID`) REFERENCES `teacher` (`ID`))
如果換一種方式,就是把T_ID換掉,再來刪除,例如:
mysql> update student set T_ID=4 where ID in(2,3); //表示把student表中ID是2和3行的T_ID字段改為4
mysql> delete from teacher where ID=2;
Query OK, 1 row affected (0.00 sec)
還有一種創建外鍵的方式後可以直接刪除被關聯的老師,刪除老師後學生表的T_ID字段自動成為null
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null; //on delete set null就是刪除後自動變為null
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete cascade; //on delete cascade是如果把某一個老師刪除,那這個老師關聯的學生也跟著刪除
mysql> alter table student add constraint WJ foreign key (T_ID) references teacher(ID) on delete set null on update cascade; //添加多個外鍵條件,意思是如果老師表的ID改變,那麽與之關聯的 student表中的T_ID也會跟著改變,刪除的時候會設置為空
數據表操作與主鍵、外鍵、唯一鍵使用