当前位置:网站首页>数据库完整性——六大约束学习
数据库完整性——六大约束学习
2022-07-25 10:35:00 【努力的clz】
一、一些概念的小问题
- (1)、什么是数据库的完整性?
- 1、*数据的正确性和相容性
- 2、*防止不合语义的数据进入数据库
- 3、*完整性:真实地反映现实世界
- (2)、数据的完整性:
- 1、防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
- 2、防范对象:不合语义的、不正确的数据
- (3)、数据库的安全性:
- 1、保护数据库防止恶意的破坏和非法的存取
- 2、防范对象:非法用户和非法操作
- (4)、为维护数据库的完整性,DBMS必须:
- 1、提供定义完整性约束条件的机制
- 2、提供完整性检查的方法
- 3、违约处理
二、六大约束
1、什么是约束?
含义:一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
2、约束分类(六种)
- 实体完整性——主键约束
PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,并且非空
比如学号、员工编号等信息
- 参照完整性——外键约束
PRIMARY KEY:主键约束,用于保证该字段的值具有唯一性,并且非空
比如学号、身份证等信息在从表添加外键约束,用于引用主键中某列的值
比如现在有两个表, 表1里存储两个字段:学生学号、专业编号 表2里也存储两个字段:专业编号、专业名
表2里专业编号只有1到10,现在表1里的专业编号就也只能是1-10; 用表2来约束表1 在表1添加(表2约束)
- 用户定义的完整性——非空、唯一、检查约束
1、NOT NULL:非空约束,用于保证该字段的值不能为空
比如姓名、学号等信息。
2、UNIQUE:唯一约束,用于保证该字段的值具有唯一性,可以为空
比如:座位号可以空,但不能重复
3、CHECK:检查约束
比如性别(char类型),检查只有男、女才能添加进去
- 默认约束
DEFAULT:默认约束,用于保证该字段有默认值
比如性别
3、什么时候添加约束:
- 两种情况:
- 1、创建表时
- 2、修改表时
其实不管啥时候,都必须再数据添加进表之前添加约束,不然添加完了约束啥啊!
4、数据的添加分类:
1、列级约束
CREATE TABLE 表名(字段名 字段类型 列级约束,字段名 字段类型);2、表记约束
CREATE TABLE 表名(字段名 字段类型,字段名 字段类型,表级约束);
三、约束的使用例子
- 列级约束写法
CREATE TABLE major(
id INT PRIMARY KEY,#主键
majorName VARCHAR(20)#非空
);
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键(主键必须非空,无法修改)
stuName VARCHAR(20) NOT NULL UNIQUE,#非空+唯一
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查
seat INT UNIQUE,#唯一
age INT DEFAULT 18,#默认约束
majorId INT REFERENCES major(id)#外键
);
- 表级约束写法
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),#主键,名字固定,改为pk也没用,其他可以
CONSTRAINT uq UNIQUE(seat),#唯一键
CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),#检查约束
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)#外键
);
四、约束学习中的难点
1、外键
- 1、要求在从表设置外键关系
- 2、从表的外键列的类型和主表的关联列的类型要求一致或兼容,名称无所谓
- 3、主表的关联列必须是一个key(一般是主键或唯一)
- 4、插入数据时,先插入主表,在插入从表 删除数据时,先删除从表,在再删除主表
CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,
seat2 INT,
PRIMARY KEY(id,stuname),#主键
UNIQUE(seat,seat2),#唯一键
CHECK(gender = '男' OR gender = '女'),#检查
FOREIGN KEY(majorid) REFERENCES major(id)#外键
);
2、修改表时添加约束
1、添加列级约束
alter table 表名 modify column 字段名 字段类型 新约束;2、添加标记约束
alter table 表名 add 【constraint 约束名】约束类型(字段名)【外键的引用】;
#1、添加非空约束
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NOT NULL;
ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20);
#2、添加默认约束
ALTER TABLE stunifo MODIFY COLUMN age INT DEFAULT 18;
#3、添加主键
#列级约束
ALTER TABLE stunifo MODIFY COLUMN id INT PRIMARY KEY;
#表记约束
ALTER TABLE stunifo ADD PRIMARY KEY(id);
#4、唯一键
ALTER TABLE stunifo MODIFY COLUMN seat INT UNIQUE;
ALTER TABLE stunifo ADD UNICODE(seat);
#5、外键
ALTER TABLE stunifo ADD FOREIGN KEY(mojorid) REFERENCES major(id);
#或
ALTER TABLE stunifo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majored) REFERENCES major(id);
3、修改表时删除约束
#1、删除非空约束
ALTER TABLE stunifo MODIFY COLUMN stuname VARCHAR(20) NULL;
#2、删除默认约束
ALTER TABLE stunifo MODIFY COLUMN age INT;
#3、删除主键
ALTER TABLE stunifo DROP PRIMARY KEY;
#4、删除唯一键
ALTER TABLE stunifo DROP INDEX seat;
#5、删除外键约束
ALTER TABLE stunifo DROP FOREIGN KEY fk_stuinfo_major;
边栏推荐
- Hcip experiment (03)
- [tree] 100. Same tree
- [递归] 938. 二叉搜索树的范围和
- Learn NLP with Transformer (Chapter 6)
- Mlx90640 infrared thermal imager temperature measurement module development notes (V)
- Detailed explanation of lvs-nat and lvs-dr modes of LVS load balancing
- 为什么重写equals()方法必须要重写hashCode()方法
- JS 将伪数组转换成数组
- 学习路之PHP--Phpstudy 提示 Mysqld.Exe: Error While Setting Value ‘NO_ENGINE_SUBSTITUTION 错误的解决办法
- DNS分离解析的实现方法详解
猜你喜欢

只知道预制体是用来生成物体的?看我如何使用Unity生成UI预制体

ArcMap无法启动解决方法

Learn Luzhi PHP -- tp5.0 uses Chinese as an alias and reports "unsupported data expression"

机智云物联网平台 STM32 ESP8266-01S 简单无线控灯

Nowcodertop7-11 - continuous updating

Hcip experiment (01)

Game backpack system, "inventory Pro plug-in", research and learning ----- mom doesn't have to worry that I won't make a backpack anymore (unity3d)

如何判断静态代码质量分析工具的性能?这五大因素必须考虑

HCIP(13)

leetcode 剑指 Offer 27. 二叉树的镜像
随机推荐
Nowcodertop12-16 - continuous updating
Detailed explanation of the implementation method of DNS separation and resolution
Learn NLP with Transformer (Chapter 6)
Fillet big killer, use filter to build fillet and wave effect!
SQL语言(五)
用Unity不会几个插件怎么能行?Unity各类插件及教程推荐
SQL注入 Less17(报错注入+子查询)
Multiply Floyd "suggestions collection"
SQL语言(二)
NowCoderTOP1-6——持续更新ing
Review recitation finishing version
LVS负载均衡之LVS-NAT搭建Web群集
Stm32cubemx learning record -- installation, configuration and use
HCIP(11)
LVS load balancing lvs-dr builds Web Clusters and LVS combines with kept to build highly available Web Clusters
Convert string to number
The B2B2C multi merchant system has rich functions and is very easy to open!!!
SQL语言(一)
数据库设计-简化字典表[通俗易懂]
Learn NLP with Transformer (Chapter 5)