==约束==
约束包括哪些?
非空约束:not null
唯一性约束: union 约束的字段不可以重复,但是可以为null
主键约束: primary key
外键约束: foreign key
检查约束:check(MySql不支持)
两个字段联合唯一:
-- 这样就相当于把两列的数据看成了一列,只有当两列数据都相同的时候才会触发唯一性约束
create table Person(
id int,
name varchar(255),
email varchar(255),
unique(name,email)
);
not null 和unique联合(这样联合该字段自动变成主键约束)
create table Person(
id int not null unique,
name varchar(255)
);
主键约束(primary key,简称PK)
主键值是每一行记录的唯一标识,相当于每一行数据的身份证号码!!!任何一张表都应该有主键,没有主键的表是无效的。
主键约束的作用:用于区别数据之间不同。一张表的主键约束只能有一个!!!
多个字段联合建立主键约束(也叫做复合主键)
create table Person(
id int,
email varchar(255),
name varchar(255)
primary key(id,email)
);
主键的分类:
自然主键:主键值是一个自然数,和业务没有关系。
业务主键:主键值和业务紧密联系,比如拿银行卡的账号来做主键等等。
==注意:实际开发的过程中,多使用自然主键,因为主键一旦和业务挂钩,那么当业务发生变动的时候,这样就会影响到主键值,造成错误。==
在MySQL中,有一种机制可以帮助我们自动维护一个主键值:
create table Person(
id int primary key auto_increment, -- 自动维护,表示自增,从1开始自增
name nvarchar(255)
);
外键约束
业务背景:请涉及数据库表,来描述‘’班级和学生‘’的信息?
第一种方案:班级和学生存储在一张表中。
==缺点:多个学生可能来自于同一个班级,那么如果都在一个表中,就会浪费很多空间,导致数据冗余,空间浪费!==
第二种方案:学生一张表,班级一张表。
外键约束的作用:可以限制被外键约束后的字段的取值,即外键字段的取值只能来自另一个表的某一列的取值!!
注意:被引用的表为父表,引用的表为子表。这里有一个删除和创建的顺序问题,==注意表在被使用的时候不能被删除,要用表需要表存在才可以!!==
-- 例如我们需要先创建父表,再创建子表
-- 创建父表
create table Class(
Id int primary key auto_increment,
Name varchar(255) not null
);
-- 创建子表
create table Student(
Id int primary key auto_increment,
Class_id int,
-- 把Class_Id设置成外键
foreign key(Class_id) references Class(id)
);
标签:int,主键,key,约束,id,255
From: https://blog.51cto.com/u_15433911/7589612