本文目录导读:
图片来源于网络,如有侵权联系删除
《关系数据库标准语言SQL第三章整理》
SQL数据定义功能
1、创建表(CREATE TABLE)
- 在关系数据库中,创建表是构建数据库结构的基础操作,通过CREATE TABLE语句,可以定义表的名称、列名、数据类型以及可能的约束条件,创建一个名为“students”的表,包含“student_id”(学号,假设为整数类型)、“student_name”(学生姓名,字符型)和“age”(年龄,整数类型)等列:
```sql
CREATE TABLE students (
student_id INT,
student_name VARCHAR(50),
age INT
);
```
- 除了基本的数据类型定义,还可以为列添加约束,常见的约束有主键约束(PRIMARY KEY),它用于唯一标识表中的每一行记录,假设“student_id”为主键,修改后的创建表语句如下:
```sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50),
age INT
);
```
- 还有非空约束(NOT NULL),确保列中的值不能为空值,如果要求“student_name”不能为空,语句可以进一步修改为:
```sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
age INT
);
```
2、修改表(ALTER TABLE)
- 随着数据库应用需求的变化,可能需要对已创建的表结构进行修改,ALTER TABLE语句用于实现这一目的,如果要在“students”表中添加一个新的列“gender”(性别,字符型),可以使用以下语句:
```sql
ALTER TABLE students ADD COLUMN gender VARCHAR(10);
```
- 如果要修改列的数据类型,比如将“age”列的数据类型从INT修改为SMALLINT,可以这样做:
```sql
ALTER TABLE students MODIFY COLUMN age SMALLINT;
```
- 当需要删除列时,例如删除刚刚添加的“gender”列,可以使用:
图片来源于网络,如有侵权联系删除
```sql
ALTER TABLE students DROP COLUMN gender;
```
3、删除表(DROP TABLE)
- 当某个表不再需要时,可以使用DROP TABLE语句将其从数据库中彻底删除,要删除“students”表,可以执行:
```sql
DROP TABLE students;
```
- 需要注意的是,执行删除表操作时要谨慎,因为一旦表被删除,表中的所有数据和相关的结构定义都将丢失。
索引的创建与管理
1、索引的概念与作用
- 索引是一种特殊的数据结构,它可以提高数据库查询的效率,就像书的目录一样,索引能够快速定位到需要的数据,而不需要对整个表进行全表扫描,在一个包含大量学生记录的“students”表中,如果经常根据“student_id”进行查询,为“student_id”创建索引可以大大提高查询速度。
2、创建索引(CREATE INDEX)
- 创建索引的语法相对简单,对于前面提到的“students”表,为“student_id”创建索引的语句如下:
```sql
CREATE INDEX idx_student_id ON students (student_id);
```
- 除了普通索引,还有唯一索引(UNIQUE INDEX),它可以确保索引列中的值是唯一的,如果为“student_name”创建唯一索引(假设学生姓名不允许重复),可以使用:
```sql
CREATE UNIQUE INDEX idx_student_name ON students (student_name);
```
3、删除索引(DROP INDEX)
- 当索引不再需要或者需要重新创建时,可以使用DROP INDEX语句删除索引,要删除刚刚创建的“idx_student_id”索引,可以执行:
```sql
DROP INDEX idx_student_id ON students;
```
视图的创建与使用
1、视图的定义与意义
- 视图是从一个或多个表(或视图)导出的虚拟表,它本身不包含实际的数据,而是根据定义视图的查询语句动态地获取数据,视图的主要作用包括简化复杂查询、提供数据安全性(通过限制用户只能访问视图而不是基础表)等。
2、创建视图(CREATE VIEW)
- 创建一个视图,显示年龄大于20岁的学生信息,假设数据库中有一个“students”表,创建视图的语句如下:
```sql
CREATE VIEW older_students AS
SELECT student_id, student_name, age
FROM students
WHERE age > 20;
```
- 这样,当需要查询年龄大于20岁的学生信息时,就可以直接查询“older_students”视图,而不需要每次都编写复杂的查询条件。
图片来源于网络,如有侵权联系删除
3、更新视图(UPDATE VIEW)
- 在某些情况下,可以通过视图来更新基础表的数据,这需要满足一定的条件,例如视图中的列必须直接对应到基础表中的列,并且视图的定义不能包含聚合函数、GROUP BY子句等复杂的查询逻辑,如果视图满足这些条件,可以像更新表一样更新视图中的数据,
```sql
UPDATE older_students SET age = age + 1;
```
- 这个操作实际上会更新“students”表中年龄大于20岁的学生的年龄。
4、删除视图(DROP VIEW)
- 当视图不再需要时,可以使用DROP VIEW语句将其删除,要删除“older_students”视图,可以执行:
```sql
DROP VIEW older_students;
```
数据完整性约束
1、实体完整性
- 实体完整性主要通过主键约束来实现,主键的值必须是唯一的且不能为空,这确保了表中的每一行都能够被唯一地标识,在“students”表中,“student_id”作为主键,就保证了每个学生都有一个唯一的学号,不会出现两个学生具有相同学号的情况。
2、参照完整性
- 参照完整性是指在关系数据库中,外键约束保证了表与表之间的关联关系的正确性,假设存在一个“courses”(课程)表,其中有“course_id”(课程号)为主键,还有一个“student_courses”表,用于存储学生选课信息,它包含“student_id”和“course_id”两个列。“student_courses”表中的“student_id”引用“students”表中的“student_id”,“course_id”引用“courses”表中的“course_id”,创建“student_courses”表时可以使用外键约束来实现参照完整性,如下:
```sql
CREATE TABLE student_courses (
student_id INT,
course_id INT,
FOREIGN KEY (student_id) REFERENCES students (student_id),
FOREIGN KEY (course_id) REFERENCES courses (course_id)
);
```
- 这样,在“student_courses”表中插入数据时,如果插入的“student_id”或“course_id”在对应的“students”表或“courses”表中不存在,数据库将会拒绝插入操作,从而保证了数据的参照完整性。
3、用户定义完整性
- 用户定义完整性是根据用户的特定需求定义的约束条件,除了前面提到的非空约束外,还可以定义其他自定义约束,定义一个检查约束(CHECK约束),在“students”表中确保年龄在18到30岁之间,可以这样修改创建表的语句:
```sql
CREATE TABLE students (
student_id INT PRIMARY KEY,
student_name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 18 AND age <= 30)
);
```
- 这样,当插入或更新“students”表中的数据时,如果年龄不在18到30岁之间,数据库将会报错,从而满足了用户定义的完整性要求。
通过对SQL数据定义功能、索引、视图以及数据完整性约束的学习和掌握,可以更好地构建和管理关系数据库,提高数据库的性能、安全性和数据质量,在实际的数据库应用开发中,这些知识是构建高效、可靠数据库系统的重要基础。
评论列表