当前位置: 首页 > news >正文

SQL学习笔记4

约束

1、约束

约束,是指作用在表中字段上的规则,用于限制字段输入的数据,使得表格式统一,数据内容正确。同一个字段的约束可以有多个

约束包括:

非空约束,限制表中的值不为null:not null

唯一约束:同一个字段的值不重复:unique

主键约束:一行数据的唯一标识,非空且唯一:primary key

默认约束:若字段的值为空,则使用默认值:default

检查约束:保证字段值符合某一个条件:check(条件)

约束的语法为:字段名 字段类型 约束1 约束2……[comment]

create table cusinfo(id int primary key auto_increment comment'序号',name varchar(20) not null comment '姓名',sex varchar(10) check(sex='男'||sex='女'||sex='未知') default '未知' comment '性别',age int check (age>=0&&age<=120)comment '年龄',birthday date  check ( birthday <= '2025-6-27')  comment '生日',phone varchar(20) check(length(phone)=11) unique comment '电话',address varchar(50) comment '地址'
)comment='用户信息表';insert into cusinfo values(null,'张三','男',18,'1999-01-01','13888888888','北京'),
(null,'李四','女',19,'1998-01-01','13888888889','上海'),
(null,'王五','未知',20,'1997-01-01','13888888890','广州'),
(null,'赵六','男',21,'1996-01-01','13888888891','深圳'),
(null,'孙七','女',22,'1995-01-01','13888888892','杭州'),
(null,'周八','男',23,'1994-01-01','13888888893','西安'),
(null,'吴九','女',24,'1993-01-01','13888888894','武汉'),
(null,'郑十','男',25,'1992-01-01','13888888895','南京');

2、外键约束(不常用)

两张表在数据库层面建立连接的约束,使得两张表的完整与统一,外键连接最常用的方法是在子表中创建一个子id,然后去连接父表的主键

添加外键:在创建表格时添加:create table 表名(

字段名 数据类型 ,

……

[constraint] [外键名称] foreign key (外键字段名) reference 父表 父表字段名

创建表后在表中增加一个外键: alter table 表名 [add constraint fk_子表名_父表名] foreign key (父表名_外键字段名 )references 父表名 (父表字段名)

create table serinfo(id int primary key  comment'序号',level varchar(10) comment'等级'
)comment '用户等级表';insert into serinfo values(1,'普通会员'),(2,'高级会员'),(3,'VIP会员');alter table cusinfo add column serinfo_id int comment '等级id';update cusinfo set serinfo_id=1 where id=1;
update cusinfo set serinfo_id=2 where id=2;
update cusinfo set serinfo_id=1 where id=3;
update cusinfo set serinfo_id=3 where id=4;
update cusinfo set serinfo_id=2 where id=5;
update cusinfo set serinfo_id=3 where id=6;
update cusinfo set serinfo_id=1 where id=7;
update cusinfo set serinfo_id=3 where id=8;
update cusinfo set serinfo_id=2 where id=9;alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id);

删除外键

alter table 表名 drop foreign key 外键名称;

alter table cusinfo drop foreign key fk_cusinfo_serinfo;

外键的删除更新行为约束

在创建外键时可以语句后增加一个约束更新、删除的语法:alter table 表名 [add constraint fk_子表名_父表名] foreign key (父表名_外键字段名 )references 父表名 (父表字段名)on update 行为 on delete 行为

外键的更新/删除行为有:

当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新:no action #默认存在

当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新:

restrict #默认存在,与no action一致

将父表与子表级联:当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录:cascadeas

当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null: set null

alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete cascade on update cascade;alter table cusinfo add constraint fk_cusinfo_serinfo foreign key (serinfo_id) references serinfo(id) on delete set null;

相关文章:

  • android zego拉插件到本地
  • MySQL之事务原理深度解析
  • Imbalanced-learn 5. Ensemble of samplers
  • Springboot整合Elasticsearch及常用方法大全
  • 鸿蒙图片相似性对比
  • dp进阶,树形背包(dfs+01)
  • 临床项目范围管理:确保项目聚焦与成功交付
  • go写前端打包的自动化工具
  • [特殊字符] Python 批量合并 Word 表格中重复单元格教程(收货记录案例实战)
  • 概率密度基本概念
  • 金蝶云星空客户端自定义控件插件-WPF实现自定义控件
  • 杭州西湖断桥不断:3D扫描还原‘残雪‘视觉骗局
  • 功率分析仪线路滤波与频率滤波的应用指南
  • C++11 lambda
  • 高标准+安全可控:关键领域研发选择什么软件?
  • 车载诊断架构 --- 诊断与ECU平台工作说明书
  • Java基础 Map集合框架 TreeMap
  • Windows下CMake通过鸿蒙SDK交叉编译三方库
  • 北京信创工委会获评“中小企业创新创业大赛优秀对接服务单位”,工委会副理事长单位悬镜安全获创客中国大赛决赛三等奖
  • uniapp处理后端返回的html字符串