表的约束
目录
表的完整性约束#
约束条件与数据类型的宽度一样,都是可选参数,主要分为以下几种:
unsigned 无符号与int等搭配
not null :非空约束,指定某列不能为空;
unique : 唯一约束,指定某列或者几列组合不能重复
primary key :主键,指定该列的值可以唯一地标识该列记录 第一个 非空加唯一
foreign key :外键,指定该行记录从属于主表中的一条记录,主要用于参照完整性
auto_increment:自增必须设置最少(unique)自带非空只能对数字有效
设置了自增必须以一一对应的格式添加数据
如果删除了某个数据 其他不变 自带记录
delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。
truncate table tl;数据量大,删除速度比上一条快,且直接从零开始,
unsigned 无符号#
与int 搭配
实列
drop database day01;
create database day01;
use day01;
create table d1(
id int unsigned);
insert into d1 values(1);
not null 非空约束#
不可为空
实列
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 唯一约束#
注意
null 在mysql中 不一样
在 mysql中每次添加的null 不一样 对于mysql 数据与数据间相等就是重复 所以 就算设置了 unique 唯一 也是可以重复的
实列
create table t3(
id int unique,
username char(18) unique,
);
unique 联合唯一#
联合唯一 ip 加端口 不可以唯一
联合唯一 不是ip不可以重复 也不是port不可以重复 而是 ip+port不可以重复
实列
create table t2(
id inta primary key,
servername char(12) not null,
ip char(15),
port int,
unique(ip, port)
);
default默认值#
create table t3(int unsigned not null default 18);
primary key 主键#
primary key 主键
一张表只能有一个
如果不指定主键,默认是第一个非空+唯二
联合主键primary, key(字段1,字段2)
primary key 主键 设置
非空+唯一 第一个设置会被设置成主键
如果一张表中没有设置primary key 主键,那么第一个设置非空+唯一的字段会被设置成主键
一张表中只能有一个主键
实列
create table t4(
id int not null unique,
username char(18) not null unique, age tinyint unsigned
);
联合主键#
姓名中 姓 和 名唯一
create table t14(
id int,
server_name char(12),
ip char(15),
port char(5),
primary key(ip,port));
foreign 外键约束#
创建时 先创被关联的 在创关联的 没有给权限 不可以更新删除(好处避免错误)
# 外键约束 : 对应外表中的字段至少是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#
自增auto_increment
必须设置最少 unique
auto increment自带非空
只能对 数字 有效
删除了某个数据 其他不变 自带记录**
delete from t1;如果有自增id,新增的数据,仍然是以删除前的最后 id 作为起始。
truncate table tl;数据量大,删除速度比上一条快,且直接从零开始,
不需要自己写、
只能对数字有效自带非空约束
并至少是unique的约束之后才能使用auto increment
实列
create table t20(id int primary key auto increment,
name char (12));
设立了自增后 只可以这么写 看起来麻烦 其实不麻烦 以为数据多了 你不知道那一条
insert into t20(name, job, age, post) values
(' alex',' cto', 84, 'Iuffy ),
作者: 一起奥利给
出处:https://www.cnblogs.com/saoqiang/p/12386745.html
版权:本文采用「署名-非商业性使用-相同方式共享 4.0 国际」知识共享许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析