主键约束
能够唯一确定一张表中的一条记录,通过给某个字段添加约束,就可以使得该字段不重复且不为空
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
)))
Original: https://www.cnblogs.com/wojiuyishui/p/16494212.html
Author: 我就一水
Title: MySQL的约束
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/578672/
转载文章受原作者版权保护。转载请注明原作者出处!