1. 程式人生 > >數據表操作與主鍵、外鍵、唯一鍵使用

數據表操作與主鍵、外鍵、唯一鍵使用

MySQL表操作 MySQL主鍵使用 MySQL外鍵操作 MySQL唯一鍵使用

1、修改數據庫(比如修改字符集)

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也會跟著改變,刪除的時候會設置為空





數據表操作與主鍵、外鍵、唯一鍵使用