数据库完整性基本概念及MySql语法
1.什么是数据库的完整性?
数据库的完整性是指数据库数据的正确性和相容性。相容性是指数据对象在不同关系表中的数据是相同的一致的。
2.数据库的完整性概念与数据库的安全性概念有什么区别和联系?
联系是都是为了保护数据库。
区别:1.完整性是防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据安全性是保护数据库防止恶意的破坏和非法的存取。
2.防范的对象:完整性是不正确不合语义的数据,安全性防范的对象是非法用户和非法操作。
3.什么是数据库的完整性约束?
是指数据库中的数据必须满足的语义条件。
4.关系数据库管理系统的完整性控制机制应具备哪三方面的功能?
1.提供定义完整性约束的机制。
2.提供检查完整性约束的方法。如在进行了insert,update,delete后要检查数据是否仍然符合完整性约束条件。
3.提供完整性的违约处理方法。有拒绝或者级联执行。
5.关系数据库管理系统在实现参照完整性时需要考虑哪些方面?
要提供定义主码和外码的机制,还需要提供不同的策略供用户选择。
这些策略包括:
举个例子有一张选课表,还有一张学生表,选课表的学号是外码,参照了学生表的主码(学号)。
1.当选课表插入元组时,违约处理为拒绝执行。
2.当选课表要修改外码值时,违约处理为拒绝执行。
3.当学生表要删除元组时,相应违约处理为拒绝执行或者说级联删除(删除选课表中的相应元组),或者说将选课表中的外码给设置为空值。
4.当学生表要修改主码值时,同上。
级联删除就是说我要在学生表中删除一个元组这个元组的学号要在选课表中找到相应值然后将选课表的元组一起删了。
6.假设有下面两个关系模式:
职工(职工号,姓名,出生日期,职务,工资,部门号),其中职工号为主码;
部门(部门号,名称,经理姓名,电话),其中部门号为主码。
用SQL定义这两个关系模式,要求在模式中完成以下完整性约束的定义:
①定义每个模式的主码。
②定义参照完整性约束。
③定义职工年龄不超过65岁。
CREATE TABLE 职工 (
职工号 INT PRIMARY KEY, -- 主码
姓名 VARCHAR(50),
出生日期 DATE,
职务 VARCHAR(50),
工资 DECIMAL(10, 2),
部门号 INT,
CONSTRAINT fk_部门号 FOREIGN KEY (部门号) REFERENCES 部门(部门号), -- 参照完整性约束
CONSTRAINT chk_年龄 CHECK (TIMESTAMPDIFF(YEAR, 出生日期, CURDATE()) <= 65) -- 年龄不超过65岁
);
CREATE TABLE 部门 (
部门号 INT PRIMARY KEY, -- 主码
名称 VARCHAR(50),
经理姓名 VARCHAR(50),
电话 VARCHAR(20)
);
最难的:CONSTRAINT chk_年龄 CHECK (TIMESTAMPDIFF(YEAR, 出生日期, CURDATE()) <= 65)
解释如下:
-
CONSTRAINT chk_年龄:
CONSTRAINT
是一个SQL关键字,用于定义一个约束并为其命名。chk_年龄
是这个约束的名字。给约束命名是可选的,但它有助于在以后需要修改或删除约束时更容易识别。
-
CHECK (TIMESTAMPDIFF(YEAR, 出生日期, CURDATE()) <= 65):
CHECK
是一个SQL关键字,用于定义一个条件,该条件必须为真才能插入或更新数据。如果条件不为真,则操作会失败。
-
TIMESTAMPDIFF(YEAR, 出生日期, CURDATE()):
TIMESTAMPDIFF
是一个SQL函数,用于计算两个日期或时间之间的差异。它的语法是TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)
,其中unit
表示要计算的时间单位,datetime_expr1
和datetime_expr2
是要比较的两个日期或时间。- 在这个例子中,
unit
是YEAR
,表示计算年份之间的差异。 出生日期
是数据库表中的一列,表示职工的出生日期。CURDATE()
是一个SQL函数,返回当前的日期。
所以,
TIMESTAMPDIFF(YEAR, 出生日期, CURDATE())
计算的是从出生日期
到当前日期的年份差异,即职工的年龄。 -
<= 65:
- 这是一个比较操作符,用于检查计算出来的年龄是否小于或等于65。
7.在关系数据库管理系统中,当操作违反实体完整性、参照完整性和用户定义的完整性约束时,一般是
如何分别进行处理的?
违反用户定义的完整性:会拒绝执行。
违反实体完整性:会拒绝执行。
参照完整性违反后:
这些策略包括:
举个例子有一张选课表,还有一张学生表,选课表的学号是外码,参照了学生表的主码(学号)。
1.当选课表插入元组时,违约处理为拒绝执行。
2.当选课表要修改外码值时,违约处理为拒绝执行。
3.当学生表要删除元组时,相应违约处理为拒绝执行或者说级联删除(删除选课表中的相应元组),或者说将选课表中的外码给设置为空值。
4.当学生表要修改主码值时,同上。