SQL-约束篇

server/2024/9/20 7:28:20/ 标签: sql, 数据库

        在数据库设计中,约束是确保数据完整性和准确性的关键元素。约束可以限制表中数据的类型、范围和关系,从而维护数据的一致性和可靠性。

1. 主键约束 (Primary Key)

        主键约束用于唯一标识表中的每一行数据。一个表只能有一个主键,主键字段的值必须唯一且不能为空。

sql">CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',name VARCHAR(50) NOT NULL UNIQUE COMMENT '姓名',age INT CHECK (age > 0 AND age < 120) COMMENT '年龄',status CHAR(1) NOT NULL DEFAULT '1' COMMENT '状态',gender CHAR(1) NOT NULL COMMENT '性别'
) COMMENT '用户表';insert into user(name,age,status,gender) values('Tomm',25,'1','男'),('Jerry',30,'0','女'),('Lily',20,'1','女');

在上述代码中,id字段被定义为主键,并且使用AUTO_INCREMENT自动生成唯一值。

效果展示:

可以看到我们并没有插入id,他是自己填充的,id旁边的黄色小钥匙代表是主键

63393947f10c44c1a40dac0ff7e3f784.png

2. 唯一约束 (Unique)

唯一约束确保某个字段的值在表中是唯一的。与主键不同,表中可以有多个唯一约束。

sql">name VARCHAR(50) NOT NULL UNIQUE COMMENT '姓名'

在用户表中,name字段被设置为唯一,这意味着不同用户的姓名不能重复。

3. 索引约束 (Index)

索引约束用于加速查询操作。通过在一个或多个列上创建索引,可以提高检索数据的速度。

sql">CREATE INDEX idx_name ON user(name);

这条语句在user表的name字段上创建了一个索引。

4. 非空约束 (Not Null)

非空约束确保某个字段在插入数据时不能为空。

sql">status CHAR(1) NOT NULL DEFAULT '1' COMMENT '状态'

在用户表中,status字段被定义为非空,并且有默认值为1

5. 默认约束 (Default)

默认约束用于为某个字段指定默认值,当插入数据时未提供该字段的值时,将使用默认值。

sql">status CHAR(1) NOT NULL DEFAULT '1' COMMENT '状态'

如果插入用户数据时没有指定status,则默认值为1

6. 检查约束 (Check)

检查约束用于限制列中的值,确保其符合特定条件。

sql">age INT CHECK (age > 0 AND age < 120) COMMENT '年龄'

在用户表中,age字段的值必须在0到120之间。

7. 外键约束 (Foreign Key)

        外键约束用于在两张表之间建立联系,确保数据的一致性。外键字段的值必须在被引用的表中存在。

sql">INSERT INTO user(name, age, status, gender) VALUES
('Tomm', 25, '1', '男'),
('Jerry', 30, '0', '女'),
('Lily', 20, '1', '女');INSERT INTO dept (id, name) VALUES
(1, '研发部'),
(2, '市场部'),
(3, '财务部'),
(4, '销售部'),
(5, '总经办');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);

        实现外键约束

        在员工表中,dept_id字段作为外键引用了部门表的id字段,确保每个员工都属于一个有效的部门。现在创建了两张表,员工表和部门表,但并没有实现外键约束,我们需要通过下面代码实现外键约束。

sql">ALTER TABLE emp ADD CONSTRAINT fk_dept_id FOREIGN KEY (dept_id) REFERENCES dept(id) ON DELETE CASCADE ON UPDATE CASCADE;

效果展示:

部门表

56ed9adc84854e268ce1102e16877ab0.png

员工表:

实现外键约束后他会多出一列,dept_id ,蓝色小钥匙就代表外键

824560f131744e77b2169dee692a6791.png 

         删除外键约束

sql">-- 删除外键
alter table emp drop foreign key fk_dept_id;

        外键约束 删除/更新 行为约束

        restrictno action 是默认的,他们两个的效果是一样的,如果不设置行为,就会默认是他们两,删除父表中的关联部分,会报错,因为有外键的约束

  • CASCADE:级联删除或更新。
  • RESTRICT:限制删除或更新。
  • NO ACTION:无操作。
  • SET NULL:设置为NULL。
  • SET DEFAULT:设置为默认值。

        设置行为的话,只需要向下面代码一样,在最后面加上 on delete cascade on update cascade;  当然 cascade 可以替换其他行为

sql">-- 指定外键约束 删除/更新 行为-- cascade: 级联删除/更新-- restrict: 限制删除/更新-- no action: 无操作-- set null: 设置为null-- set default: 设置为默认值alter table emp add constraint fk_dept_id foreign key (dept_id) references dept(id) on delete cascade on update cascade;

 6b3f20387c41470d913ed8ca5bce3bcb.png

总结

        SQL约束是数据库设计中不可或缺的一部分,通过合理使用各种约束,可以确保数据的完整性和一致性。在实际应用中,开发者应根据需求灵活运用这些约束,以提高数据管理的效率和安全性。

      上篇写的是SQL中的函数,感兴趣的可以去看看哦~

 

 

 

 


http://www.ppmy.cn/server/104871.html

相关文章

火狐浏览器应用商店不支持下载

前言 之前手机一直用的火狐浏览器&#xff0c;现在换了新的手机&#xff0c;又想下载使用&#xff0c;从官网直接下载现在直接跳载到Google Play才能下载&#xff0c;但是国内又用不了的&#xff0c;这里就记录一下怎么在手机应用商店不支持情况下载。 从FTP服务器下载Beta版…

PostgreSQL常用命令,启动连接,pg_dump导入导出

文章目录 1 PostgreSQL服务启动与停止、连接2 常用sql命令3 数据备份与恢复 1 PostgreSQL服务启动与停止、连接 在没有设置环境变量的情况下 需进入pgsql的bin目录 #Windows下启动 #打开“开始”菜单&#xff0c;找到 “PostgreSQL” 文件夹&#xff0c;找到 “pgAdmin” 应用…

Spring Boot中的过滤器与拦截器实战:实现用户认证与资源访问控制

源访问控制 概述 在构建Web应用时&#xff0c;我们经常需要实现诸如用户认证、资源访问控制等功能。Spring Boot 提供了多种工具来帮助开发者轻松实现这些需求。本文将介绍如何使用Spring Boot 3.x中的过滤器&#xff08;Filter&#xff09;和拦截器&#xff08;Interceptor&…

TCP shutdown 之后~

目录 摘要 1 API 2 shutdown(sockfd, SHUT_WR) 3 shutdown(sockfd, SHUT_WR) 4 kernel 是怎么做的&#xff1f; 附 摘要 通过 shutdown() 关闭读写操作&#xff0c;会发生什么&#xff1f;具体点呢&#xff0c;考虑两个场景&#xff1a; 场景一&#xff1a;C 发送数据完毕…

【设计模式】单例模式

单例模式是一种常见的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。 一、定义与核心概念 单例模式的主要目的是限制一个类的实例化次数&#xff0c;只允许创建一个对象。这样可以在整个应用程序中共享同一个实例&#…

快速定位Linux中内存占用最多前几个进程

ps aux --sort-%mem | head 命令 ps aux --sort-%mem | head 在 Linux 和类 Unix 系统中用于显示当前系统中占用内存最多的前几个进程。让我们分解这个命令来理解它是如何工作的&#xff1a; ps aux&#xff1a;这是 ps 命令的一个常用选项组合&#xff0c;用于显示当前系统上…

Java面试题———MySql篇②

目录 1.事务隔离级别 2.数据库三大范式 3.索引的分类 4.索引的创建原则 5.索引失效的情况 6.如何知道索引是否失效 7.MyISAM和InnoDB的区别 1.事务隔离级别 事务隔离级别是用来解决并发事务问题的方案&#xff0c;不同的隔离级别可以解决的事务问题不一样 读未提交&…

周边乡村游小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;游客&#xff0c;景点信息管理&#xff0c;景点美食管理&#xff0c;美食类型管理&#xff0c;景点攻略管理&#xff0c;特产信息管理&#xff0c;特产类型管理&#xff0c;系统管理 微信端账号功能包…

XSS游戏

目录 XSS游戏-WarmupsMa Spaghet!JefffUgandan KnucklesRicardo MilosAh Thats HawtLigmaMafiaOk, BoomerWW3 XSS游戏-Warmups Ma Spaghet! 1. 尝试注入&#xff0c;输入aaaaaaaa 2. 显示在<h2>标签内3. 输入标签&#xff0c;添加onmouseover属性值为alert(1337)&…

单例模式详细

文章目录 单例模式介绍八种方式1、饿汉式&#xff08;静态常量&#xff09;2、饿汉式&#xff08;静态代码块&#xff09;3、懒汉式&#xff08;线程不安全&#xff09;4、懒汉式&#xff08;线程安全&#xff0c;同步方法&#xff09;5、懒汉式&#xff08;线程不安全&#xf…

1089:数字反转

1089&#xff1a;数字反转 时间限制: 1000 ms 内存限制: 65536 KB 提交数:115082 通过数: 61304 【题目描述】 给定一个整数&#xff0c;请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式&#xff0c;即除非给定的原数为零&#xff0c;否则反转后…

UDP 和TCP的应用

一、网络模型 &#xff08;一&#xff09;C/S 模型 客户端 / 服务器&#xff08;Client/Server&#xff0c;C/S&#xff09;模型是一种常见的网络架构。在这种模型中&#xff0c;客户端是主动的角色&#xff0c;向服务器发起请求&#xff1b;服务器端是被动的角色&#xff0c;…

CSS的:scope伪类:精准定位表格元素的新策略

CSS&#xff08;层叠样式表&#xff09;是控制网页元素样式的强大工具。随着CSS规范的不断更新&#xff0c;新的选择器和伪类被引入&#xff0c;以增强开发者对页面元素的控制能力。:scope伪类是CSS中一个相对较新的特性&#xff0c;它允许开发者在特定的上下文中选择元素&…

Vue 和 React 各自的背景和特点

Vue 的背景和特点 背景&#xff1a; Vue.js 由尤雨溪于2014年创建&#xff0c;并于同年发布第一个版本。Vue 的设计目标是简单、灵活&#xff0c;易于上手&#xff0c;具有响应式数据绑定和组件化开发的特性。 解决的问题&#xff1a; Vue 解决了构建交互式前端界面的问题&…

美国高防服务器到底怎么选

美国高防服务器因其强大的硬件设施、高度的网络连接性、丰富的带宽资源和先进的防御技术而受到全球用户的欢迎。以下是选择美国高防服务器时需要考虑的关键因素&#xff0c;rak部落为您整理发布美国高防服务器到底怎么选。 确定服务器需求 容量和带宽&#xff1a;根据业务规模…

CSS的:in-range和:out-of-range伪类:增强输入验证的视觉反馈

在Web表单设计中&#xff0c;输入验证是确保用户提交有效数据的关键环节。HTML5引入了<input>元素的min和max属性&#xff0c;使得在前端就可以对数值输入进行范围限制。CSS3进一步扩展了这一功能&#xff0c;通过:in-range和:out-of-range伪类&#xff0c;开发者可以为处…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么&#xff1f;每一层的作用是什么&#xff1f; TCP / IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f; 应用层&#xff08;Application Layer&#xff09; 传输层&#xff08;Transport Layer&#xff09; 网络层&#xff08;Network …

Vue2中 A页面调用B页面函数

1&#xff0c;创建util.js文件在utils文件夹中 import Vue from vue export default new Vue 2&#xff0c;A&#xff0c;B页面均引入 import Utils from ../../utils/util.js 3&#xff0c;A页面&#xff08;调用方&#xff09;想在哪调用写在哪就行。 Utils.$emit(&quo…

鸿蒙OS应用开发例题

单选题 第24/60题 自动跳下一题0 在编译构建HAP时&#xff0c;会从HAP模块及依赖的模块中收集资源文件&#xff0c;如果不同模块下的资源文件出现重名冲突 时&#xff0c;会按照优先级进行覆盖&#xff0c;现在有一个HAP依赖了两个HAR,依赖配置如下所示: // oh-package. j…

心得与体会

Loop本地回环 Loop本地回环&#xff0c;通常指的是以127开头的IP地址段&#xff08;127.0.0.1 – 127.255.255.254&#xff09;&#xff0c;其中127.0.0.1是最常用的一个地址&#xff0c;被称为本地回环地址&#xff08;Loop back address&#xff09;。这个地址不属于任何一个…