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

MySql约束练习

        restraint

-- 约束
-- 约束是作用在表中字段上的规则,用于限制存储在表中的数据
-- 目的:为了保证数据库中的数据的正确、有效、完整
-- 约束是作用于表中字段上的,可以在创建/修改表的时候添加约束-- 分类
-- 非空约束 限制该字段中的数据不能为null       关键字:not null
-- 唯一约束 保证该字段中的数据都是唯一的       关键字:unique
-- 主键约束 主键是一行数据的唯一标识,要求其非空且唯一    关键字:primary key
-- 默认约束 在字段中保存数据时,若未指定字段中的值,则采用默认值     关键字:default
-- 检查约束 保证字段值满足某一个条件     关键字:check
-- 外键约束 用于让两张表的数据之间建立连接,保证数据的一致性和完整性     关键字:foreign keyuse exercise;-- 根据合理的约束条件,创建一张约束的用户表
create table user(id int primary key auto_increment comment '主键',name varchar(10) not null unique comment '姓名',age int check (age > 0 and age <= 120) comment '年龄',status char(1) default '1' comment '状态',gender char(1) check (gender = '男' or gender = '女')
) comment '用户表';
-- auto_increment 自动增长insert into user(name, age, gender) values ('tom', 19, '男'),('jack', 25, '男');
-- 违反这些约束,则会报错
-- 插入数据失败,但是主键会自增一次
insert into user(name) value('tom1');
insert into user(name) value('张三');-- 外键约束
-- 两张表之间建立数据连接,具有外键的表是子表,被外键所关联的表是父表-- 用部门表当作主表
create table dept(id int auto_increment primary key comment 'ID',name varchar(15) not null comment '部门名称'
) comment '部门表';
insert into dept(id, name) values(1, '研发部'), (2, '市场部'),(3, '财务部'), (4, '销售部'), (5, '总经办');-- 用员工表中的部门id当作主表的外键
create table emp(id  int auto_increment comment 'ID' primary key,name varchar(50) not null comment '姓名',age  int comment '年龄',job varchar(20) comment '职位',salary int comment '薪资',entrydate date comment '入职时间',managerid int comment '直属领导ID',dept_id int comment '部门ID'
)comment '员工表';INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id) VALUES(1, '金庸', 66, '总裁',20000, '2000-01-01', null,5),(2, '张无忌', 20, '项目经理',12500, '2005-12-05', 1,1),(3, '杨逍', 33, '开发', 8400,'2000-11-03', 2,1),(4, '韦一笑', 48, '开发',11000, '2002-02-05', 2,1),(5, '常遇春', 43, '开发',10500, '2004-09-07', 3,1),(6, '小昭', 19, '程序员鼓励师',6600, '2004-10-12', 2,1);-- 添加外键的语法:
-- 1. create table 表名{ [constraint] [外键名称] foreign key(外键字段名) references 主表(主表字段名)
-- 2. alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表字段名)
alter table emp add constraint fk_dep_id foreign key(dept_id) references dept(id);
-- 有了外键约束之后,为了保证数据的一致性,无法对外键约束的条目进行操作,因为默认是no action,想要操作主表中的条目时,先要删除相关的子表数据
-- delete from dept id; -- 报错,因为违反了外键约束
-- 先删除相关的子表数据,然后再操作主表中的条目-- 删除外键
-- alter table 表名 drop foreign key 外键名
-- 删除外键后也可以对主表中的条目进行操作
alter table emp drop foreign key fk_dep_id_;
alter table emp drop foreign key fk_dep_id;drop table emp;
drop table dept;
-- 外键的行为
-- alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表字段名) on update 行为 on delete 行为;-- no action 作用是在尝试删除或更新主表中的记录时,如果这些记录在子表中有引用关系,则不允许进行删除或更新操作
-- 在创建外键时,若不指定行为选项,则默认的行为是no action-- cascade(一连串的) 外键随着主表的更新而更新
alter table emp add constraint fk_dep_id_ foreign key(dept_id) references dept(id) on update cascade on delete cascade;-- set null 它的作用是在删除或更新主表中的记录时,将子表中引用该记录的外键字段设置为null
alter table emp add constraint fk_dep_id_ foreign key(dept_id) references dept(id) on update set null on delete set null;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 5.3.数据结构-c/c++二叉树代码
  • C语言-第八章:指针进阶
  • 保研 比赛 利器: 用AI比赛助手降维打击数学建模
  • 内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度
  • 数据传输安全——混合加解密
  • 压缩PDF,介绍这五种压缩方案
  • 什么是Web服务器集群?
  • springboot服务器文件读取工具类
  • 一文梳理RAG(检索增强生成)的现状与挑战
  • Go语言结构体和元组全面解析
  • 【IPV6从入门到起飞】4-RTMP推流,ffmpeg拉流,纯HTML网页HLS实时直播
  • PyTorch 卷积层详解
  • 什么是银行挤兑
  • throw 和 throws及Throwable区别和联系各自的使用场景
  • 4.4 版本管理器——VM实现
  • 【Leetcode】104. 二叉树的最大深度
  • avalon2.2的VM生成过程
  • C++11: atomic 头文件
  • ComponentOne 2017 V2版本正式发布
  • CSS相对定位
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • HTTP中的ETag在移动客户端的应用
  • in typeof instanceof ===这些运算符有什么作用
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • Java 23种设计模式 之单例模式 7种实现方式
  • leetcode388. Longest Absolute File Path
  • PhantomJS 安装
  • spring boot 整合mybatis 无法输出sql的问题
  • vue-cli在webpack的配置文件探究
  • vuex 笔记整理
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 力扣(LeetCode)357
  • 力扣(LeetCode)965
  • 驱动程序原理
  • 深度学习中的信息论知识详解
  • 数据科学 第 3 章 11 字符串处理
  • 异步
  • 带你开发类似Pokemon Go的AR游戏
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 整理一些计算机基础知识!
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 安徽锐锋科技IDMS系统简介
  • #我与Java虚拟机的故事#连载03:面试过的百度,滴滴,快手都问了这些问题
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (0)Nginx 功能特性
  • (1)(1.13) SiK无线电高级配置(六)
  • (10)STL算法之搜索(二) 二分查找
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (31)对象的克隆
  • (39)STM32——FLASH闪存
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot建达集团公司平台 毕业设计 141538