ToB企服应用市场:ToB评测及商务社交产业平台

标题: 一文带你理清数据库的安全与保护 [打印本页]

作者: 飞不高    时间: 2024-12-8 01:35
标题: 一文带你理清数据库的安全与保护
第一节 数据完备性

概述

  1.         数据库的完整性是指数据库中数据的正确性和相容性。
  2.         例如,人的性别只能是“男”或“女”,每个人的身份证号必须唯一等。
复制代码
一、完备性约束条件的作用对象

完备性约束条件的作用对象可以是列、元组和表
1.列级约束

  1. 列级约束主要对列的类型、取值范围、精度等的约束,具体包括如下内容:
复制代码
(1)对数据类型的约束,其包罗数据类型、长度、精度
  1. -- 比如 这里 cust_address 字段规定数据类型为定长字符型,且长度为50。
  2.         CREATE TABLE mysql_test.customers (
  3.         cust_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '客户号',
  4.         cust_name char(50) NOT NULL,
  5.         cust_sex char(1) not null default 0,
  6.         cust_address char(50) null,   
  7.         cust_contact char(50) null
  8.         );
复制代码
(2)对数据格式的约束
比方,如果有一张tb_student门生表,可规定studentNO学号字段的前四位为门生的入学年份,第5位规定为院系的编号等,就和我们身份证号中一样有出生年份和日期格式的规定一样。
(3)对取值范围或取值集合的约束。
比方,在门生结果表中规定结果字段的取值范围为0到100.
(4)对空值的约束。
比方,在界说列时规定该列是否允许取空值
如上面在创建customers表时界说cust_name 字段不能为空
代码片段如下:
  1. cust_name char(50) NOT NULL,
复制代码
2.元组的约束

在二维关系表中表中的一行数据即为元组
元组约束指若干元组之间、关系之间的接洽的约束。
以 “门生(学号,姓名,年龄)” 关系为例,假设学校规定门生的年龄范围在 10 岁到 30 岁之间。那么在这个关系中的每一个元组,其年龄属性的值都必须满足这个范围要求。如果出现一个门生元组的年龄是 5 岁或者 35 岁,就违背了这个范围约束。这种约束是根据现实业务规则来界说的,可以或许包管数据符合业务逻辑,防止不公道的数据进入系统。
3.表级约束

  1. 表级约束指若干元组之间、关系之间的相互约束。
  2. 背景:
  3.         以学生信息管理系统为例,假设有一个 “学生(学号,姓名,性别,年龄)” 关系。学号是这个关系的主键。
  4. 解释:
  5.         主键唯一地标识关系中的每一个元组。对于 “学生” 关系中的每一个元组,学号的值不能为 NULL(空值),并且不能有两个元组的学号是相同的。
  6. 这就保证了每个学生实体(元组)在关系中是唯一可识别的。
  7. 例如,不能有两个元组都表示学号为 “2024001” 的学生,因为这样就无法准确区分这两个所谓的 “同一学号” 的学生个体。
复制代码
二、界说与实现完备性约束

三类完备性约束,分别是实体完备性、参照完备性和用户界说的完备性
1.实体完备性

在mysql中,实体完备性是通过主键约束和候选健约束来实现的
(1)主键约束
主键可以是表中的某一列,也可以是表中多个列所构成的一个组合。
其中多个列组合而成的主键也称为复合主键
在mysql中,主键列必须遵守如下一些规则:
* 每一个表只能界说一个主键
* 主键的值,也称为键值,必须可以或许唯一标志表中的每一行记录,且不能为NULL。表中两个差别的行在主键上不能具有相同的值。这是唯一性原则。
* 复合主键不能包罗不须要的多余列。也就是说,当从一个复合主键中删除一列后,如果剩下的列构成主键仍能满足唯一性原则,那么这个复合主键是不正确的。这是最小化规则。
* 一个列名在复合主键的列表中只能出现一次
主键约束界说方法:
主键约束可以在CREATE TABLE或ALTER TABLE语句中使用关键字“PRIMARY KEY”来实现,其方式有两种。
(1)一种是作为列的完备性约束
如下:直接在列属性student_id字段后添加一条PRIMARY KEY即可
示例1:
  1. CREATE TABLE students (
  2.     student_id INT PRIMARY KEY,
  3.     student_name VARCHAR(50),
  4.     age INT
  5. );
复制代码
这里PRIMARY KEY关键字紧跟在student_id列的界说后面,表示student_id是该表的主键。这种方式实用于主键由单个列构成的简朴环境。
在已存在的表中添加主键约束(ALTER TABLE语句):
示例2:
  1. ALTER TABLE employees
  2. ADD CONSTRAINT pk_employees PRIMARY KEY (employee_id);
复制代码
(2)一种作为表的完备性约束
示例:
  1. CREATE TABLE course_registrations (
  2.     student_id INT,
  3.     course_id INT,
  4.     registration_date DATE,
  5.     CONSTRAINT pk_course_registrations PRIMARY KEY (student_id, course_id)
  6. );
复制代码
在这个例子中,CONSTRAINT关键字用于界说一个名为pk_course_registrations的约束,后面的PRIMARY KEY (student_id, course_id)表示student_id和course_id这两个列组合起来构成了该表的主键。
这种方式使得在多个列作为主键时,可以或许清晰地界说主键约束。
(2)候选健约束
与主键一样候选键可以是表中的某一列,也可以是表中多个列构成的一个组合。
任何时候候选键必须是唯一的,且不能为NULL。
候选键可以在CREATE TABLE或ALTER TABLE语句中使用关键字“UNIQUE”来实现,其实现方法与主键约束类似,同样可作为列或者表的完备性约束两种方式。

  1. CREATE TABLE employees (
  2.     employee_id INT PRIMARY KEY,
  3.     employee_email VARCHAR(100) UNIQUE NOT NULL,
  4.     employee_name VARCHAR(50),
  5.     department VARCHAR(50)
  6. );
复制代码
在这里,employee_email列使用了UNIQUE关键字包管其值的唯一性,并且使用NOT NULL关键字包管其值不能为空。这样employee_email就满足了候选键的条件,可以用来唯一地标识元组,仅次于主键(employee_id)作为另一种识别方式。

  1. CREATE TABLE project_members (
  2.     project_id INT,
  3.     member_id INT,
  4.     member_role VARCHAR(30),
  5.     CONSTRAINT uk_project_members UNIQUE (project_id, member_id)
  6. );
复制代码
在这个例子中,通过CONSTRAINT关键字界说了一个名为uk_project_members(可以根据本身的喜好命名约束名称)的约束,UNIQUE (project_id, member_id)表示project_id和member_id这两个属性组合起来具有唯一性,这就构成了一个组合候选键。当主键不能完全满足数据识别需求时,这种组合候选键可以提供额外的、唯一的识别方式。
mysql中主键与候选键的异同:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4