完整性约束
Posted wyh0717
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了完整性约束相关的知识,希望对你有一定的参考价值。
完整性约束
概览
为了防止不符合规范的数据进入数据库,在用户对数据进行插入、修改、删除等操作时,DBMS自动按照一定的约束条件对数据进行监测,使不符合规范的数据不能进入数据库,以确保数据库中存储的数据正确、有效、相容。
约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:
# NOT NULL :非空约束,指定某列不能为空;
# UNIQUE : 唯一约束,指定某列或者几列组合不能重复
# PRIMARY KEY :主键,指定该列的值可以唯一地标识该列记录
# FOREIGN KEY :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
设置严格模式:
不支持对not null字段插入null值
不支持对自增长字段插入”值
不支持text字段有默认值
直接在mysql中生效(重启失效):
mysql>set sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
配置文件添加(永久失效):
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
约束某一个字段
无符号的 int unsigned
不能为空 not null
默认值 default
唯一约束 unique
联合唯一 unique(字段1,字段2)
自增 auto_increment
只能对数字有效.自带非空约束
至少是unique的约束之后才能使用auto_increment
主键 primary key
一张表只能有一个
如果不指定主键,默认是第一个非空+唯一
联合主键 primary key(字段1,字段2)
外键 Foreign key
Foreign key(自己的字段) references 外表(外表字段)
外表字段必须至少是"唯一"的
on update cascade #级联更新
on delete cascade # 级联删除 尽量不用
不能重复 unique 值不能重复,但是null可以写入多个
create table t13(
id1 int unique,
id2 int
)
联合唯一 unique
create table t14(
id int,
server_name char(12),
ip char(15),
port char(5),
unique(ip,port)
);
非空 + 唯一约束
第一个被定义为非空+唯一的那一列会成为这张表的primary key
一张表只能定义一个主键
create table t15(
id int not null unique,
username char(18) not null unique
);
create table t16(
username char(18) not null unique,
id int not null unique
);
create table t17(
username char(18) not null unique,
id int primary key
);
联合主键
create table t18(
id int,
server_name char(12),
ip char(15) default ‘‘,
port char(5) default ‘‘,
primary key(ip,port)
);
create table t19(
id int primary key,
server_name char(12),
ip char(15) not null,
port char(5) not null,
unique(ip,port)
);
自增
create table t20(
id int primary key auto_increment,
name char(12)
);
insert into t20(name) values(‘alex‘);
外键
班级表
create table class(
cid int primary key auto_increment,
cname char(12) not null,
startd date
)# 学生表
# create table stu(
# id int primary key auto_increment,
# name char(12) not null,
# gender enum(‘male‘,‘female‘) default ‘male‘,
# class_id int,
# foreign key(class_id) references class(cid)
# )
create table stu2(
id int primary key auto_increment,
name char(12) not null,
gender enum(‘male‘,‘female‘) default ‘male‘,
class_id int,
foreign key(class_id) references class(cid) #设置外键 涉及class表的cid
on update cascade #级联更新
on delete cascade # 级联删除 尽量不用
)
?
以上是关于完整性约束的主要内容,如果未能解决你的问题,请参考以下文章
VSCode自定义代码片段15——git命令操作一个完整流程
VSCode自定义代码片段15——git命令操作一个完整流程