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

数据库->数据库约束

目录

一、数据库约束

1.定义

2.约束类型

3.NOT NULL 非空约束

4. UNIQUE 唯一约束

5.PRIMARY KEY 主键约束

1.主键的使用

2.把表中的主键交给数据库自己维护 

2.1主键列设置为null 则使用自增

2.2插入除了主键以外的所有非空列(推荐方法)

2.3自定义的主键值

4.为一个表定义两个主键(error)

5.一个主键包含多个列

6.主键或唯⼀键冲突时的更新操作

6.1 更新

6.2替换

6.FOREIGN KEY 外键约束

1.语法

2.应用

7.DEFALUT 默认值约束

1.应用

1.1重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥

1.2列与列之间进行比较


一、数据库约束

1.定义

数据库约束是关系型数据库的一个重要功能  

主要作用是保证数据的有效性  也可以理解为数据的正确性(数据本身是否正确,关联关系是否正正确)

人工检查数据的完整性工作量非常大,在数据库中定义一些约束,那么数据在写入数据库的时候,就会帮我们做一些检验

约束一般是在指定的列上创建的

2.约束类型

类型说明
NOT NULL⾮空约束指定⾮空约束的列不能存储 NULL 值
DEFALUT 默认约束当没有给列赋值时使⽤的默认值
UNIQUE 唯⼀约束指定唯⼀约束的列每⾏数据必须有唯⼀的值
PRIMARY KEY 主键约束NOT NULL 和 UNIQUE的结合,可以指定⼀个列或多个列,有助于防⽌数据
重复和提⾼数据的查询性能
FOREIGN KEY 外键约束外键约束是⼀种关系约束,⽤于定义两个表之间的关联关系,可以确保数据
的完整性和⼀致性
CHECK 约束 ⽤于限制列或数据在数据库表中的值,确保数据的准确性和可靠性

3.NOT NULL 非空约束

学⽣名为NULL时,这条记录是不完整的

在不可以为空的列后面加 not null 

4. UNIQUE 唯一约束

指定了唯⼀约束的列,该列的值在所有记录中不能重复,⽐如⼀个⼈的⾝份证号,学⽣的学号等

在需要加唯一约束的列后面加 unique 关键字

只加了唯一约束的列可以写入null  而且可以写入很多条null

5.PRIMARY KEY 主键约束

非空语约束 + 唯一约束 + 提高效率

主键约束唯⼀标识数据库表中的每条记录。
主键必须包含唯⼀的值,且不能包含 NULL 值。
每个表只能有⼀个主键,可以由单个列或多个列组成。
通常为每张表都指定⼀个主键,主键列建议使⽤BIGINT类型

1.主键的使用

在数据校验上   即非空 又 唯一

2.把表中的主键交给数据库自己维护 

2.1主键列设置为null 则使用自增

2.2插入除了主键以外的所有非空列(推荐方法)

2.3自定义的主键值

只要符合非空和唯一即可

自增操作一旦完成  不论是否写入成功 都不会回退

4.为一个表定义两个主键(error)

5.一个主键包含多个列

两列全部重复才报错

6.主键或唯⼀键冲突时的更新操作

6.1 更新

删除原数据  新增新数据

6.2替换

如果没有冲突则直接插入新数据 和 insert 的功能一样

6.FOREIGN KEY 外键约束

外键⽤于定义主表和从表之间的关系
外键约束主定义在从表的列上,主表关联的列必须是主键或唯⼀约束
当定义外键后,要求从表中的外键列数据必须在主表的主键或唯⼀列存在或为null。

外键约束也是对数据的一个校验过程 从表中使用主表中的某个值 这个值必须在主表中存在

1.语法

foreign key (id) references class(id) -- 加入外界关联

2.应用

删除主表时 如果从表有对主表的引用 则不允许删除主表的记录

 删除主表时 应该先解除主外键关系 或者先删除从表

7.DEFALUT 默认值约束

指定值的列用具体的值填充  没有指定值的列 用默认值填充如果明确指定列的值为null   则用null填充改列 

默认约束只是数据库层面的一个兜底行为 

8.CHECK 约束

对单行数据进行检验 一般在应用程序级别进行校验

1.应用

1.1重构学⽣表,有以下要求,年龄不能⼩于16岁,性别只能是男或⼥

1.2列与列之间进行比较


http://www.kler.cn/a/375300.html

相关文章:

  • 【扩展卡尔曼滤波理论推导与实践】【理论】【1/3 前言】
  • python中使用selenium执行组合快捷键ctrl+v不生效问题
  • 12.25周三F34-Day36打卡
  • Docker--宿主机执行docker容器的命令
  • 探索多模态大语言模型(MLLMs)的推理能力
  • Unity3D仿星露谷物语开发5之角色单例模式
  • nacos快速启动
  • markdown/Latex分子,分母,除号,怎么编辑
  • NET Core的AOP实施方法1 DispatchProxy
  • SAP(PP生产制造)拆解工单业务处理
  • YOLO11改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】
  • 基于NVIDIA NIM平台实现盲人过马路的demo(一)
  • LeetCode516:最长回文子序列
  • 从0到1,用Rust轻松制作电子书
  • OpenWrt下安装Mosquitto
  • 在Java中 try catch 会影响性能吗?
  • 轻松部署自己的AI聊天助手LocalGPT并实现无公网IP远程交互
  • 包子凑数(完全背包)
  • 详解进制转换
  • windows@命令行中获取环境变量取值不展开取值(原值)
  • 大数据新视界 -- 大数据大厂都在用的数据目录管理秘籍大揭秘,附海量代码和案例
  • 青少年编程与数学 02-003 Go语言网络编程 03课题、网络编程协议
  • 代码随想录训练营Day09 | 150. 逆波兰表达式求值 - 239. 滑动窗口最大值 - 347.前 K 个高频元素
  • 从服务运营的阶段,进入到了精细化管理和智慧化运营的阶段的明厨亮早年开源了
  • ubuntu知识点滴积累
  • AI-基本概念-向量、矩阵、张量