定制开发小程序一文带你吃透数据库的约束,不做CRUD程序员

在SQL标准中,定制开发小程序一共规定了6定制开发小程序种不同的约束,定制开发小程序包括非空约束,定制开发小程序和检查约束等,而在MySQL定制开发小程序中是不支持检查约束的,定制开发小程序所以这篇文章先对其余5定制开发小程序种约束做一个详解和练习。


文章目录

1. 定制开发小程序约束的概念

定制开发小程序约束是作用于表中列上的规则,用于限制加入表的数据。例如,作为主键的列一定是非空的唯一的,否则将无法对数据进行区分。约束的存在保证了数据库中数据的正确性、有效性和完整性。所以约束在数据库设计中是非常重要的。

2. 约束的分类

前面说到SQL标准把约束分为了6大类,分别是非空约束,唯一约束,主键约束,,默认约束和外键约束,添加约束时我们只需要在SQL中添加关键词,便可以限制表中的数据。

约束类型功能
非空约束 NOT NULL保证列中所有的数据不能有null值
唯一约束 UNIQUE保证列中所有数据各不相同
主键约束 PRIMARY KEY主键是一行数据的唯一标识,要求非空且唯一
检查约束 CHECK保证列中的值满足某一条件
默认约束 DEFAULT保存数据时,未指定值则采用默认值
外键约束 FOREIGN KEY外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

3. 非空约束

目的:保证列中所有的数据不能有null值

添加约束:

CREATE TABLE 表名(	列名 数据类型 NOT NULL,);
  • 1
  • 2
  • 3
  • 4
  • 5

建完表后添加非空约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;
  • 1

删除约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型;
  • 1

4. 唯一约束

目的:保证列中所有数据各不相同

添加约束:

CREATE TABLE 表名(	列名 数据类型 UNIQUE [AUTO_INCREMENT],	-- AUTO_INCREMENT: 当不指定值时自动增长);CREATE TABLE 表名(	列名 数据类型,[CONSTRAINT] [约束名称] UNIQUE(列名));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

建完表后添加唯有约束:

ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;
  • 1

删除约束:

ALTER TABLE 表名 DROP INDEX 字段名;
  • 1

5. 主键约束

目的:主键是一行数据的唯一标识,要求非空且唯一

添加约束:

CREATE TABLE 表名(	列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],);CREATE TABLE 表名(	列名 数据类型,	[CONSTRAINT] [约束名称] PRIMARY KEY(列名));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

建完表后添加主键约束:

ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
  • 1

删除约束:

ALTER TABLE 表名 DROP PRIMARY KEY;
  • 1

6. 默认约束

目的:保存数据时,未指定值则采用默认值

添加约束:

CREATE TABLE 表名(	列名 数据类型 DEFAULT 默认值,);
  • 1
  • 2
  • 3
  • 4

建完表后添加默认约束:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
  • 1

删除约束:

ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;
  • 1

7. 外键约束

当我们添加了外键以后,就在数据库层面建立了两张表的关系。

目的:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性

添加约束:

CREATE TABLE 表名(	列名 数据类型,[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名));
  • 1
  • 2
  • 3
  • 4
  • 5

建完表后添加外键约束:

ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
  • 1

删除约束:

ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
  • 1

7. 约束的案例练习

首先,我们使用以下的案例来练习约束:

-- 删除stu表drop table if exists stu;-- 创建stu表CREATE TABLE stu (id int primary key, -- 编号 主键name varchar(10)  not null unique, -- 姓名 非空,唯一age int not null, -- 年龄 非空gender varchar(5) not null, -- 性别 非空math double(5,2) not null, -- 数学成绩  非空english double(5,2) default 0 -- 英语成绩 默认为0);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

验证主键约束,其特点是非空且唯一,先添加一条数据:

insert into stu(id,name,age,gender,math,english) values(1,'小张',23,'男',66,78);
  • 1

添加第二条数据时,尝试 id 添加为空值:

insert into stu(id,name,age,gender,math,english) values (null,'小李',20,'女',98,87);
  • 1

尝试 id 添加为重复的值:

insert into stu(id,name,age,gender,math,english) values (1,'小陈',55,'男',56,77);
  • 1

我们已经验证了主键约束,当我们添加不合法的数据时,添加失败。

验证非空约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values (2,NULL,20,'女',76,65);
  • 1


验证唯一约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math,english) values (5,'小张',20,'男',86,NULL);
  • 1
  • 2

验证默认约束:

当我们添加以下的数据时:

insert into stu(id,name,age,gender,math) values (6,'小赵',23,'男',99);
  • 1

验证外键约束:

我们使用一下的案例来验证外键约束:

-- 删除表DROP TABLE IF EXISTS emp;DROP TABLE IF EXISTS dept;-- 部门表CREATE TABLE dept(id int primary key auto_increment,dep_name varchar(20),addr varchar(20));-- 员工表CREATE TABLE emp(id int primary key auto_increment,name varchar(20),age int,dep_id int,-- 添加外键 dep_id,关联 dept 表的id主键CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

此时,我们在员工表中添加了外键,相当于在数据库层面上建立了两张表的关系,此时如果员工表中有员工 a ,他属于 1 号部门,那么我们想要删除部门表中的 1 号部门就会删除失败,因为员工 a 是属于 1 号部门的,此时两张表建立了关系。

添加数据:

-- 添加 2 个部门insert into dept(dep_name,addr) values('研发部','西安'),('销售部', '成都');-- 添加员工,dep_id 表示员工所在的部门INSERT INTO emp (NAME, age, dep_id) VALUES('张三', 20, 1),('李四', 20, 2);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

此时想要是删除销售部门时,发现删除失败。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发