没有合适的资源?快使用搜索试试~ 我知道了~
关系型数据库(如MySQL, PostgreSQL):数据完整性与约束.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 127 浏览量
2024-08-28
07:47:43
上传
评论
收藏 30KB DOCX 举报
温馨提示
关系型数据库(如MySQL, PostgreSQL):数据完整性与约束.docx
资源推荐
资源详情
资源评论
1
关系型数据库(如 MySQL, PostgreSQL):数据完整性与约
束
1 关系型数据库基础
1.1 数据库与表的结构
在关系型数据库中,数据被组织成一系列的表,每个表由行和列组成。行
代表数据记录,列则定义了数据的字段。这种结构允许数据以一种逻辑和有序
的方式存储,便于查询和管理。
1.1.1 创建数据库
在 MySQL 中,创建数据库使用 CREATE DATABASE 语句:
CREATE DATABASE IF NOT EXISTS my_database;
1.1.2 创建表
创建表时,需要定义表的结构,包括字段名、数据类型和约束。例如,创
建一个名为 users 的表:
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
� id 字段是主键,使用 INT AUTO_INCREMENT 类型自动递增。
� username 和 password 字段不允许为空,使用 NOT NULL 约束。
� email 字段要求唯一,使用 UNIQUE 约束。
� created_at 字段默认值为当前时间戳。
1.2 数据类型与字段属性
数据类型决定了字段可以存储的数据种类,而字段属性则进一步限制了数
据的使用方式。
1.2.1 常见数据类型
� 整型:TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT
� 字符串:CHAR, VARCHAR, TEXT, BLOB
� 日期和时间:DATE, TIME, DATETIME, TIMESTAMP
2
� 浮点和定点:FLOAT, DOUBLE, DECIMAL
1.2.2 字段属性
� NOT NULL:字段不允许为空。
� DEFAULT:为字段提供默认值。
� UNIQUE:字段值必须是唯一的。
� PRIMARY KEY:字段或字段组合作为表的主键,唯一标识每条记
录。
� AUTO_INCREMENT:字段自动递增,常用于主键。
1.2.3 示例:修改表结构
假设我们需要在 users 表中添加一个 age 字段,并设置默认值为 18:
ALTER TABLE users
ADD COLUMN age INT DEFAULT 18;
1.3 示例:数据操作
1.3.1 插入数据
向 users 表中插入一条新记录:
INSERT INTO users (username, password, email)
VALUES ('user1', 'password1', 'user1@example.com');
1.3.2 查询数据
从 users 表中查询所有记录:
SELECT * FROM users;
1.3.3 更新数据
更新 users 表中 username 为 user1 的记录的 email 字段:
UPDATE users
SET email = 'newemail@example.com'
WHERE username = 'user1';
1.3.4 删除数据
从 users 表中删除 username 为 user1 的记录:
DELETE FROM users
WHERE username = 'user1';
3
1.4 数据完整性与约束
数据完整性确保数据库中的数据准确、一致且可靠。关系型数据库通过以
下约束来维护数据完整性:
� 主键约束:确保每条记录的唯一性。
� 外键约束:确保引用的完整性,即一个表中的数据引用另一个表
中的数据时,被引用的数据必须存在。
� 唯一约束:确保字段或字段组合的值在表中是唯一的。
� 非空约束:确保字段值不能为空。
� 检查约束:确保字段值满足特定条件。
1.4.1 示例:外键约束
假设我们有两个表,users 和 orders,orders 表中的 user_id 字段引用 users
表的 id 字段:
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id)
);
1.4.2 示例:检查约束
在 PostgreSQL 中,可以使用 CHECK 约束来限制字段值。例如,确保 age 字
段的值大于 0:
ALTER TABLE users
ADD CONSTRAINT age_check CHECK (age > 0);
1.5 总结
关系型数据库通过定义表结构、数据类型和字段属性,以及使用各种约束
来维护数据的完整性和一致性。掌握这些基础知识对于设计和管理数据库至关
重要。
2 数据完整性概念
2.1 实体完整性
实体完整性(Entity Integrity)是关系型数据库中的一项基本原则,它确保
了表中的每一行数据都是唯一的,可以通过主键(Primary Key)来识别。主键
的值必须是唯一的,且不能为 NULL。
4
2.1.1 示例:在 MySQL 中创建一个具有实体完整性的表
--
创建一个名为
students
的表,其中
id
为主键,确保实体完整性
CREATE TABLE students (
id INT AUTO_INCREMENT,
name VARCHAR(50),
age INT,
PRIMARY KEY (id)
);
在这个例子中,students 表的 id 字段被定义为主键,这意味着: - 每个学
生将有一个唯一的 id。 - id 字段不能包含 NULL 值。 - id 字段的值将自动递增,
确保每次插入新记录时,id 都是唯一的。
2.2 参照完整性
参照完整性(Referential Integrity)是关系型数据库中用于维护表间关系的
一致性的规则。它确保了外键(Foreign Key)引用的主键在相关表中是存在的。
如果一个表的外键引用了另一个表的主键,那么在删除或更新主键表中的记录
时,必须考虑对引用表的影响。
2.2.1 示例:在 MySQL 中创建两个表并设置参照完整性
--
创建一个名为
courses
的表
CREATE TABLE courses (
id INT AUTO_INCREMENT,
name VARCHAR(50),
PRIMARY KEY (id)
);
--
创建一个名为
enrollments
的表,其中
course_id
是外键,引用
courses
表的
id
CREATE TABLE enrollments (
student_id INT,
course_id INT,
grade INT,
PRIMARY KEY (student_id, course_id),
FOREIGN KEY (student_id) REFERENCES students(id),
FOREIGN KEY (course_id) REFERENCES courses(id)
);
在这个例子中,enrollments 表的 student_id 和 course_id 字段被定义为外键,
分别引用 students 表和 courses 表的主键。这意味着: - 在 enrollments 表中,
student_id 和 course_id 的值必须在 students 和 courses 表中存在。 - 如果尝试删
除 students 或 courses 表中的记录,而该记录在 enrollments 表中被引用,那么
删除操作将失败,除非先删除或更新 enrollments 表中的相关记录。
5
2.3 域完整性
域完整性(Domain Integrity)确保了表中的每一列数据都符合其定义的类
型和约束。这包括数据类型、大小、格式、取值范围等。域完整性通过列级约
束来实现,如 NOT NULL、UNIQUE、CHECK 等。
2.3.1 示例:在 MySQL 中创建一个具有域完整性的表
--
创建一个名为
employees
的表,其中
email
必须唯一,
age
必须在
18
到
60
之间
CREATE TABLE employees (
id INT AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
age INT CHECK (age BETWEEN 18 AND 60),
PRIMARY KEY (id)
);
在这个例子中,employees 表的列定义了域完整性约束: - name 列不能包
含 NULL 值。 - email 列的值必须是唯一的。 - age 列的值必须在 18 到 60 之间。
2.3.2 插入数据并验证域完整性
--
插入一条符合域完整性的记录
INSERT INTO employees (name, email, age) VALUES ('张三', 'zhangsan@example.com', 25);
--
尝试插入一条违反域完整性的记录
INSERT INTO employees (name, email, age) VALUES ('李四', 'zhangsan@example.com', 17);
在尝试插入第二条记录时,由于 email 列的值违反了 UNIQUE 约束,age 列
的值违反了 CHECK 约束,因此这两条插入语句都将失败,数据库将返回错误信
息,提示违反了域完整性约束。
通过这些示例,我们可以看到实体完整性、参照完整性和域完整性在关系
型数据库设计中的重要性,它们共同确保了数据的准确性和一致性。
3 关系型数据库:约束类型详解
在关系型数据库中,数据完整性是确保数据准确性和一致性的重要原则。
通过使用不同的约束类型,数据库管理员可以定义和控制数据的结构和行为,
防止数据被错误地插入、更新或删除。本教程将深入探讨关系型数据库中常见
的约束类型,包括主键约束、外键约束、唯一约束、非空约束和检查约束,以
MySQL 和 PostgreSQL 为例进行说明。
3.1 主键约束(Primary Key Constraint)
主键约束用于唯一标识表中的每一行记录。一个表只能有一个主键,且主
剩余20页未读,继续阅读
资源评论
kkchenjj
- 粉丝: 2w+
- 资源: 5490
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功