MySQL的约束
主键约束
能够唯一确定一张表中的一条记录,通过给某个字段添加约束,就可以使得该字段不重复且不为空
create table user( id int primary key, name varchar(20));
上图中的PRI表示主键
insert into user/*表名下同*/ values(1, "张三");/*此处可以运行*/insert into user values(1, "李四");insert into user values(null, "王五");/*后面两行不能运行*/
联合主键
有时需要多个字段联合起来才能作为主键确定表中唯一一条记录
create table user2( id int, name varchar(20), password varchar(20), primary key(id, name));
添加记录
不会报错,因为是使用id和name作为联合主键,联合主键中任何一个字段不能为空(添加记录时)
自增约束
create table user3( id int primary key auto_increment, /*效果就是管控id的值,让他可以自动增长*/ name varchar(20));
自增约束可以在添加使用时该主键的值为null,如下
insert into user1 value(null,"李四");
修改表结构
创建表时忘记创建主键
add
create table user2( id int, name varchar(20));describe user2; /*可以使用缩写desc*/
alter table user2/*表名*/ add primary key(id/*需要添加的主键*/);
modify
alter table user2 modify id int primary key;
删除主键
alter table user2 drop primary key;
唯一约束
MySQL 唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。
唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。
create table user4( id int, name varchar(20));alter table user4 add unique(name);desc user4
会出现一个key = UNI
第二个就会报错,因为要求name是唯一的
在创建时定义唯一约束
create table user5( id int, name varchar(20) unique);desc user5;
下面这种就是两个键加起来不重复就是ok的,并不是强制要救如果一个重复就报错
create table user6( id int, name varchar(20), unique(id, name));desc user6;
创建后添加唯一约束
add
alter table user5/*表名字*/ add constraint unique(name/*要添加唯一约束的字段*/);
modify
alter table user5/*表名字*/ modify id int/*要添加唯一约束的字段名及其数值类型及空间*/ unique;
删除唯一约束
alter table user5/*表名*/ drop index name/**唯一约束名/;
非空约束
MySQL 非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
create table user7( id int, name varchar(20) not null /*此处添加的not null就是非空约束*/);
如果只添加了id的值,比如
insert into user7 (id) values (7);
会报错类似 \(1364 - Field 'name' doesn't have a default value\) 的错误
默认约束
create table user8( id int, name varchar(20), age int default 10 /*此处指定了默认值,插入时未指定时使用,如果有值就会被覆盖*/);
上面这种就是10就是为指定时是哟个默认值,21就是把10覆盖的那个值
外键约束
MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。(也可以是主表和附表)
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。
create table classes( id int primary key, name varchar(20));create table students( id int primary key, name varchar(20), class_id int, foreign key(class_id/*本表中作为外键的字段*/) references classes/*主表*/(id/*主表中与附表外键相关联的字段*/));
insert into classes values (1, "一班");insert into classes values (2, "二班");insert into classes values (3, "三班");insert into classes values (4, "四班");insert into students values (1001, "david", 1);insert into students values (2001, "lily", 2);insert into students values (5001, "lisa", 5); /*这一行会报错*/ /*附表要参照主表去添加,如果主表中不存在这个值,则会报错*/
报错: \(1452 - Cannot add or update a child row: a foreign key constraint fails\\ (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))\)
delete from classes where name = "一班";/*注意主表的值被附表引用时,那么主表中该条数据记录就不能被删除,除非把对应的附表记录先删除,或者就做软删除,即用户看不到,但是数据库中还是存在这条记录*/
报错: \(1451 - Cannot delete or update a parent row: a foreign key constraint fails\\ (`test`.`students`, CONSTRAINT `students_ibfk_1` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`))\)
作者:我就一水
来源链接:https://www.cnblogs.com/wojiuyishui/p/16494212.html
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。