数据库约束(2)

embedded/2025/2/9 12:39:53/

数据库约束(2)

1.检查约束

检查约束时用来检查数据表中字段值有效性的一种手段,可以通过create table或者alter table语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。

CHECK 表达式

在更新表数据的时候,系统会检查更新后的数据行是否满足 CHECK 约束中的限定条件。MySQL 可以使用简单的表达式来实现 CHECK 约束,也允许使用复杂的表达式作为限定条件,例如在限定条件中加入子查询。

注意:若将 CHECK 约束子句置于所有列的定义以及主键约束和外键定义之后,则这种约束也称为基于表的 CHECK 约束。该约束可以同时对表中多个列设置限定条件。

在创建表时设置检查约束

案例:

创建tb_emp6数据表,要求salary字段值大于0且小于10000

mysql> CREATE TABLE tb_emp6(
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> CHECK(salary>0 AND salary<100),
-> FOREIGN KEY(deptId) REFERENCES tb_dept1(id));
Query OK, 0 rows affected, 2 warnings (0.03 sec)
mysql> desc tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int | YES | MUL | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

在修改表时添加检查约束

ALTER TABLE tb_emp7 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>)
案例:

修改tb_emp6数据表,要求id字段值大于0

mysql> ALTER TABLE tb_emp6 ADD CONSTRAINT check_id CHECK(id>0);
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int | YES | MUL | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

删除检查约束

ALTER TABLE 数据表名 DROP CONSTRAINT 检查约束名;
案例:

删除tb_emp6表中的check_id检查约束

mysql> ALTER TABLE tb_emp6 DROP CONSTRAINT check_id;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc tb_emp6;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int | NO | PRI | NULL | |
| name | varchar(25) | YES | | NULL | |
| deptId | int | YES | MUL | NULL | |
| salary | float | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

2.默认约束

默认值的完整名称时默认值约束,用来指定某列的默认值。在表中插入一条新纪录时,如果没有为某个字段赋值,系统就会自动为这个志短插入默认值。

例如,在员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为北京,系统就会自动为这个字段赋值为北京。

默认值约束通常用在已经设置了非空约束的列,这样能够放孩子数据表再录入数据时出现错误。

在创建表时设置默认值约束

字段名 数据类型 default 默认值;
案例:

mysql> create table tb_dept3(id int(11) primary key ,name varchar(22),location varchar(50) default 'beijing');
Query OK, 0 rows affected, 1 warning (0.05 sec)mysql> desc tb_dept3;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | beijing |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

以上语句执行成功之后,表 tb_dept3 上的字段 location 拥有了一个默认值 Beijing,新插入的记录如果

没有指定部门位置,则默认都为 Beijing。

⚠️:在创建表时为列添加默认值,可以一次为多个列添加默认值,需要注意不同列的数据类型。

在修改表时添加默认值约束

ALTER TABLE 数据表名
CHANGE COLUMN 字段名 数据类型 default 默认值;
案例:

修改数据表tb_dept3,将部门位置的默认值修改为shanghai


mysql> alter table tb_dept3 change column location location varchar(50) default 'shanghai';
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc tb_dept3;
+----------+-------------+------+-----+----------+-------+
| Field    | Type        | Null | Key | Default  | Extra |
+----------+-------------+------+-----+----------+-------+
| id       | int         | NO   | PRI | NULL     |       |
| name     | varchar(22) | YES  |     | NULL     |       |
| location | varchar(50) | YES  |     | shanghai |       |
+----------+-------------+------+-----+----------+-------+
3 rows in set (0.00 sec)

删除默认约束

ALTER TABLE 数据表名
CHANGE COLUMN 字段名 字段名 数据类型 DEFAULT NULL;
案例:

修改数据表tb_dept3,将部门位置的默认值约束删除


mysql> alter table tb_dept3 change column location location varchar(50) default null;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc tb_dept3;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | YES  |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

3.非空约束

非空约束是指字段值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过create table或者alter table语句实现。在表中某个列的定义后加上关键字not null作为限定词,来约束该列的取值不能为空。

比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这是就可以为用户名字段设置非空约束。

在创建表时设置非空约束

字段名 数据类型 not null;
案例:

创建数据表tb_dept4,部门名称不能为空


mysql> create table tb_dept4(id int(11) primary key ,name varchar(22) not null,location varchar(50));
Query OK, 0 rows affected, 1 warning (0.06 sec)mysql> desc tb_dept4;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

在修改表时添加非空约束

ALTER TABLE 数据表名
CHANGE COLUMN 字段名 字段名 数据类型 not null
案例:

修改数据表tb_dept4,指定部门位置不能为空


mysql> alter table tb_dept4 change column location location varchar(50) not null;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc tb_dept4;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | NO   |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

删除非空约束

ALTER TABLE 数据表名
CHANGE COLUMN 字段名 字段名 数据类型 null;
案例:

修改数据表tb_dept4,将部门位置的非空约束删除


mysql> alter table tb_dept4 change column location location varchar(50) null;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc tb_dept4;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id       | int         | NO   | PRI | NULL    |       |
| name     | varchar(22) | NO   |     | NULL    |       |
| location | varchar(50) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

http://www.ppmy.cn/embedded/160817.html

相关文章

Java项目: 基于SpringBoot+mybatis+maven+mysql实现的智能学习平台管理系(含源码+数据库+毕业论文)

一、项目简介 本项目是一套基于SpringBootmybatismavenmysql实现的智能学习平台管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、…

十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明

十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明 文章目录 十. Redis 事务和 “锁机制”——> 并发秒杀处理的详细说明1. Redis 的事务是什么&#xff1f;2. Redis 事务三特性3. Redis 关于事务相关指令 Multi、Exec、discard和 “watch & unwatch”3.1 快…

C++ STL迭代器完全指南:从新手到高手的奇幻之旅

一、迭代器:数据世界的万能遥控器 🎮 1.1 为什么需要迭代器? 想象你有一个装满玩具的箱子(容器),你想: 🚗 逐个查看所有玩具(遍历)🧸 找到特定的玩具熊(查找)✨ 把玩具按大小排列(排序)如果每个箱子的打开方式都不同(数组用下标、链表要指针、文件流特殊操…

UdpServer

Udp服务端&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Net.Sockets; using System.Net; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; using System.IO; using …

【生成模型之十四】Visual Autoregressive Modeling

论文&#xff1a;Visual Autoregressive Modeling: Scalable Image Generation via Next-Scale Prediction code&#xff1a;GitHub - FoundationVision/VAR: [NeurIPS 2024 Best Paper][GPT beats diffusion&#x1f525;] [scaling laws in visual generation&#x1f4c8;]…

C# 比较两个List集合内容是否相同

在 C# 中&#xff0c;要比较两个 List<T> 集合的内容是否相同&#xff0c;可以通过以下几种方法&#xff1a; 一、非自定义类的元素比较 1. 使用 SequenceEqual 方法&#xff08;顺序和内容都相等&#xff09; 顺序和内容都相等&#xff1a;使用 SequenceEqual。 usin…

go结构体和json相互转换、序列化和反序列化

json简介 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。RESTfull Api 接口中返回的数据都是 json 数据。 Json 的基本格式如下&#xff1a; { "a": "Hello", "b": "Worl…

工业 4G 路由器助力消防领域,守卫生命安全防线

在消防领域也在不断引入新技术以提升消防安全保障能力发展过程中。工业 4G 路由器为其数据传输、预警监控发挥着重要的通信作用。 工业 4G 路由器通过内置的 4G 模块&#xff0c;接入 4G 网络&#xff0c;将网络信号进行转换和分发。它能够适应复杂的工业环境&#xff0c;具备…