当前位置: 首页 > 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;

http://www.lryc.cn/news/576214.html

相关文章:

  • 华为云Flexus+DeepSeek征文|高可用部署 Dify 平台构建 Flux 绘画中台 Chatflow 的设计与实现
  • SYSCFG 时钟在 GD32F4 系列微控制器中的作用
  • 【策划所需编程知识】
  • 每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • Spring Boot整合Redis指南
  • C++ 快速回顾(三)
  • PICkit3编程器MCLR引脚全解析
  • vue-27(实践练习:将现有组件重构为使用组合式 API)
  • <script setup> 语法糖
  • Netty入门案例:简单Echo服务器(同步)
  • 预训练语言模型
  • 关于USB模式的一些内容(附USB接口颜色释义图)
  • Veo 3 视频生成大模型完整操作教程(2025)
  • Ai大模型 - ocr图像识别形成结构化数据(pp-ocr+nlp结合) 以及训练微调实现方案(初稿)
  • 82、高级特性-配置加载优先级
  • debain切换 opensuse 我都安装了什么
  • 【数据挖掘】数据采集和预处理
  • Milvus报错,reson=timestamp lag too large
  • [Python]-基础篇1- 从零开始的Python入门指南
  • C++11 <chrono> 库特性:从入门到精通
  • SpringMVC系列(四)(请求处理的十个实验(下))
  • 【请关注】制造企业机械加工数据脱敏解决方案
  • 【数据分析,相关性分析】Matlab代码#数学建模#创新算法
  • 目标跟踪存在问题以及解决方案
  • Linux信号机制:从入门到精通
  • Windows VMWare Centos环境下安装Docker并配置MySql
  • 香港 8C 站群服务器买来可以做哪些业务?
  • opi是opensuse独占的吗?