表的约束

表的完整性约束#

Copy
约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种: unsigned 无符号与int等搭配 not null :非空约束,指定某列不能为空; unique : 唯一约束,指定某列或者几列组合不能重复 primary key :主键,指定该列的值可以唯一地标识该列记录 第一个 非空加唯一 foreign key :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性 auto_increment:自增必须设置最少(unique)自带非空只能对数字有效 设置了自增必须以一一对应的格式添加数据 如果删除了某个数据 其他不变 自带记录 delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。 truncate table tl;数据量大,删除速度比上一条快,且直接从零开始,

unsigned 无符号#

与int 搭配

实列

Copy
drop database day01; create database day01; use day01; create table d1( id int unsigned); insert into d1 values(1);

not null 非空约束#

不可为空

实列

Copy
drop database day01; create database day01; use day01; create table d1( id int not null, name char(12), hobby set('抽烟','喝酒','烫头','搓脚') ); insert into d1(id,name,hobby) values( 1,'小强','抽烟,喝酒');

unique 唯一约束#

Copy
注意 null 在mysql中 不一样 在 mysql中每次添加的null 不一样 对于mysql 数据与数据间相等就是重复 所以 就算设置了 unique 唯一 也是可以重复的

实列

Copy
create table t3( id int unique, username char(18) unique, );

unique 联合唯一#

Copy
联合唯一 ip 加端口 不可以唯一 联合唯一 不是ip不可以重复 也不是port不可以重复 而是 ip+port不可以重复

实列

Copy
create table t2( id inta primary key, servername char(12) not null, ip char(15), port int, unique(ip, port) );

default默认值#

Copy
create table t3(int unsigned not null default 18);

primary key 主键#

Copy
primary key 主键 一张表只能有一个 如果不指定主键,默认是第一个非空+唯二 联合主键primary, key(字段1,字段2) primary key 主键 设置 非空+唯一 第一个设置会被设置成主键 如果一张表中没有设置primary key 主键,那么第一个设置非空+唯一的字段会被设置成主键 一张表中只能有一个主键

实列

Copy
create table t4( id int not null unique, username char(18) not null unique, age tinyint unsigned );

联合主键#

姓名中 姓 和 名唯一

Copy
create table t14( id int, server_name char(12), ip char(15), port char(5), primary key(ip,port));

foreign 外键约束#

Copy
创建时 先创被关联的 在创关联的 没有给权限 不可以更新删除(好处避免错误) # 外键约束 : 对应外表中的字段至少是unique的,推荐使用主键作为关联字段 一变全变 基本格式 foreign key(自己的字段) references 其他表(字段) 给权限 on delete cascade 级联删除一般不设置 on update cascade 级联更新 # create table class3( # id int primary , # cname char(12) not null unique, # start_date date, # period char(12), # course char(12), # teacher char(12) # ); # create table student3( # id int primary key auto_increment, # name char(12) not null, # gender enum('male','female'), # cid int, # foreign key(cid) references class3(id) on delete cascade on update cascade # );

自增auto_increment#

Copy
自增auto_increment 必须设置最少 unique auto increment自带非空 只能对 数字 有效 删除了某个数据 其他不变 自带记录** delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。 truncate table tl;数据量大,删除速度比上一条快,且直接从零开始, 不需要自己写、 只能对数字有效自带非空约束 并至少是unique的约束之后才能使用auto increment

实列

Copy
create table t20(id int primary key auto increment, name char (12)); 设立了自增后 只可以这么写 看起来麻烦 其实不麻烦 以为数据多了 你不知道那一条 insert into t20(name, job, age, post) values (' alex',' cto', 84, 'Iuffy ),
posted @   一起奥利给  阅读(258)  评论(0编辑  收藏  举报
编辑推荐:
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
阅读排行:
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析
点击右上角即可分享
微信分享提示
CONTENTS