数据库表约束

目录

一、约束的种类

二、非空约束(not null)

三、唯一性约束(unique)

3.1 字段级约束

四、主键约束(primary key,PK)

4.1 主键的概念(一张表例必须有外键的存在)

4.2 主键约束与“not null unique”的区别

4.3 主键的分类

4.4 自增

五、外键约束(foreign key,FK)

六、添加约束

6.1 添加非空约束

6.2 添加唯一约束

6.3 添加主键约束

6.4 添加外键约束

七、约束的删除

7.1 删除非空约束

7.2 删除唯一约束

7.3 删除主键约束

7.4 删除外键约束


一、约束的种类

1.非空约束(not null)
2.唯一性约束(unique)
3.主键约束(primary key,PK)
4.外键约束(foreign key,FK)
5.检查约束(目前MYSQL不支持,Oracle支持)

二、非空约束(not null)

用NOT NULL约束的字段不能为空值,必须给定具体的数据
  • 默认所有类型的值都可以是NULL,包括INT、FLOAT等数据类型;

  • 非空约束只能在某个列上单独约束,不能组合使用;

  • 一个表可以多列都约束非空;

  • 空字符串不等于NULL,0也不等于NULL

create table test(
id int not null,
email  varchar(20) unique
);

三、唯一性约束(unique)

3.1 字段级约束

unique约束的字段具有唯一性,不可重复,但可以为NULL
  • 同一个表可以有多个唯一约束

  • 唯一约束可以是某一个列的值唯一(字段级唯一约束),也可以是多个组合的值唯一(表级唯一约束)

  • 唯一约束允许列值为空

  • 在创建唯一约束的时候,可以给约束命名,如果不命名默认和列名相同

  • MySql会给唯一约束的列上创建一个唯一索引

create table test(
id int not null,
email  varchar(20) unique
);
在字段上加上唯一约束时,如果插入两个相同的邮箱就会报错

3.2 表级多字段联合约束

表级约束可以给约束起名字(方便后期通过这个名字来删除这个约束)

create table test(
id int not null,
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email)
);

constraint是约束关键字,y_user_email是自己给约束起的名字

四、主键约束(primary key,PK)

4.1 主键的概念(一张表例必须有外键的存在)

主键(primary key)是表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录;表中的某个字段添加主键约束后,该字段为主键字段,主键字段中出现的每一个数据都称为主键值

4.2 主键约束与“not null unique”的区别

1、作为Primary Key的域/域组不能为null,而Unique Key可以。
2、在一个表中只能有一个Primary Key,而多个Unique Key可以同时存在。unique not null 可以
将表的一列或多列定义为唯一性属性,而primary key设为多列时,仅能保证多列之和是唯一的,具体到某一列可能会重复。
3、更大的区别在逻辑设计上。Primary Key一般在逻辑设计中用作记录标识,这也是设置Primary Key的本来用意,而Unique Key只是为了保证域/域组的唯一性。

4.3 主键的分类

单一主键:给一个字段加上主键约束
复合主键:给表中的多个字段联合添加一个主键约束(只能用表级定义)
单一主键定义和复合主键定义在一张表中只能出现一次

例:

create table test(
id int primary key,-- 单一主键定义
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email)
primary key(id) -- 表级单一主键定义
primary key(id,name) -- 复合主键定义
);

4.4 自增

在MySQL数据库提供了一个自增的数字,专门用来自动生成主键值,主键值不用用户维护,自动生成,自增数从1开始,以1递增(auto_increment);
(1)一个表中只能设置一个自增主键
(2)当需要产生唯一标识符或者顺序值时,可设置自增增长
(3)自增长列约束得咧必须是键列(主键列或者单一键列)
(4)自增约束的列的数量类型必须是整数类型
(5)如果自增列指定了0或null,会在当前最大值的基础上自增长,如果自增长列手动指定了具体值,直接赋值具体值

例:

create table test(
id int auto_increment, -- 给id设置自增主键
name varchar(30),
email  varchar(20),
constraint y_user_email unique (name,email),
primary key(id) -- 表级单一主键定义
);

五、外键约束(foreign key,FK)

外键:用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。若有两个表A、B,id是A的主键,而B中也有id字段,则id就是表B的外键;
A为基本表或父标,主表,B为信息表,子表,副表;
只能是表级定义;
foreign key(表的字段名) references 父表表名(父表的字段名);
某个字段添加外键约束之后,该字段称为外键字段,外键字段中每个数据都是外键值;

外键的分类

按外键约束的字段数量分类:
    单一外键:给一个字段添加外键约束;
    复合外键:给多个字段联合添加一个外键约束;
注意:
    一张表可以有多个外键字段(与主键不同);
    外键值可以为null;
    外键字段去引用一张表的某个字段的时候,被引用的字段必须具有unique约束有了外键引用之后,表分为父表和子表;

例:

学生表:
create table student(
id int auto_increment,
sname varchar(10) not null,
brithday datatime,
ssex char(4),
primary key(id)
)
班级表
create table class(
sid int ,
cid int primary key,
cname char(10),
foregin key(sid) reference classtab(id)-- 创建外键
)
​

六、添加约束

6.1 添加非空约束

alter table  表名modify test_studentchar(10) not  null; 

6.2 添加唯一约束

alter table 表名add unique(表字段名,字段,字段,字段);

6.3 添加主键约束

alter table 表名add primary key(表的字段名,字段,字段);

6.4 添加外键约束

alter table 表名add constraint N1 foreign key (表字段名) references 父表(父表字段名);

七、约束的删除

7.1 删除非空约束

alter table 表名modify 列名类型;

7.2 删除唯一约束

alter table 表名drop index 唯一约束名

7.3 删除主键约束

alter table 表名drop primary key;

7.4 删除外键约束

alter table 表名drop foreign key 外键名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值