数据表操作与主键外键唯一键使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据表操作与主键外键唯一键使用相关的知识,希望对你有一定的参考价值。

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也会跟着改变,删除的时候会设置为空





以上是关于数据表操作与主键外键唯一键使用的主要内容,如果未能解决你的问题,请参考以下文章

数据库—超键候选键主键外键

数据库之主键外键

数据库中主键超键候选键外键是什么?

主键约束,外键约束,空值约束,默认值约束,唯一约束,检查约束的各个作用是啥?

Mysql主键外键和索引的区别

SQL语句建表设置主键外键checkdefaultunique约束