本文目录导读:
图片来源于网络,如有侵权联系删除
《关系数据库标准语言SQL第三章整理手册》
SQL概述
关系数据库标准语言SQL(Structured Query Language)是用于管理关系数据库的标准语言,它具有功能强大、简洁易学、非过程化等诸多优点,SQL可以实现对数据库的各种操作,包括数据定义(DDL)、数据操纵(DML)、数据控制(DCL)等。
(一)数据定义语言(DDL)
1、创建表(CREATE TABLE)
- 在关系数据库中,表是存储数据的基本结构,使用CREATE TABLE语句可以创建表,创建一个名为“students”的表,包含“id”(学号,假设为整数类型)、“name”(姓名,字符类型)、“age”(年龄,整数类型)等列:
```sql
CREATE TABLE students (
id INT,
name VARCHAR(50),
age INT
);
```
- 可以为列定义约束条件,如主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、非空约束(NOT NULL)等,主键约束用于唯一标识表中的每一行数据,例如将“id”列定义为主键:
```sql
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT
);
```
2、修改表(ALTER TABLE)
- 随着业务需求的变化,可能需要对已创建的表进行修改,ALTER TABLE语句可以用于添加列、修改列的数据类型、删除列等操作。
- 添加列:假设要在“students”表中添加一个“gender”(性别)列,可以使用以下语句:
```sql
ALTER TABLE students ADD gender VARCHAR(10);
```
- 修改列的数据类型:如果要将“age”列的数据类型从INT修改为SMALLINT,可以这样做:
```sql
ALTER TABLE students MODIFY age SMALLINT;
图片来源于网络,如有侵权联系删除
```
- 删除列:如果要删除刚刚添加的“gender”列,可以使用:
```sql
ALTER TABLE students DROP COLUMN gender;
```
3、删除表(DROP TABLE)
- 当不再需要某个表时,可以使用DROP TABLE语句将其删除,删除“students”表:
```sql
DROP TABLE students;
```
- 需要注意的是,一旦执行此操作,表中的所有数据将永久丢失,所以在执行删除操作时要谨慎。
(二)数据操纵语言(DML)
1、插入数据(INSERT INTO)
- 使用INSERT INTO语句可以向表中插入数据,向“students”表中插入一条学生记录:
```sql
INSERT INTO students (id, name, age) VALUES (1, 'John', 20);
```
- 也可以不指定列名,按照表中列定义的顺序插入数据,但这种方式要求提供所有列的值:
```sql
INSERT INTO students VALUES (2, 'Alice', 22);
```
2、更新数据(UPDATE)
- 如果要修改表中的数据,可以使用UPDATE语句,将“students”表中“id”为1的学生的年龄更新为21:
```sql
UPDATE students SET age = 21 WHERE id = 1;
```
- WHERE子句用于指定更新的条件,如果省略WHERE子句,将会更新表中的所有行数据,这在大多数情况下是非常危险的操作。
3、删除数据(DELETE FROM)
- DELETE FROM语句用于从表中删除数据,删除“students”表中“id”为2的学生记录:
图片来源于网络,如有侵权联系删除
```sql
DELETE FROM students WHERE id = 2;
```
- 同样,若不使用WHERE子句,将删除表中的所有数据。
(三)数据控制语言(DCL)
1、授权(GRANT)
- 在多用户的数据库环境中,需要对用户的权限进行管理,GRANT语句用于授予用户对数据库对象(如表、视图等)的操作权限,授予用户“user1”对“students”表的SELECT权限:
```sql
GRANT SELECT ON students TO user1;
```
- 还可以授予多个权限,如同时授予SELECT、INSERT和UPDATE权限:
```sql
GRANT SELECT, INSERT, UPDATE ON students TO user1;
```
2、收回权限(REVOKE)
- 当用户不再需要某些权限时,可以使用REVOKE语句收回权限,收回用户“user1”对“students”表的INSERT权限:
```sql
REVOKE INSERT ON students FROM user1;
```
SQL的第三章通常会深入探讨这些基本操作的更多细节,如更复杂的约束条件应用、多表操作时的注意事项等,在多表操作方面,可能涉及到表的连接(JOIN)操作,包括内连接(INNER JOIN)、外连接(LEFT JOIN、RIGHT JOIN、FULL JOIN)等,内连接用于获取两个表中满足连接条件的行数据,例如查询“students”表和“courses”表中选修了课程的学生信息:
SELECT students.name, courses.course_name FROM students INNER JOIN student_courses ON students.id = student_courses.student_id INNER JOIN courses ON student_courses.course_id = courses.id;
外连接则可以获取在一个表中有数据,而在另一个表中可能没有匹配数据的行,左外连接(LEFT JOIN)会返回左表中的所有行以及右表中与左表匹配的行,如果右表中没有匹配行,则用NULL填充,例如查询所有学生及其选修的课程(即使有些学生没有选修课程):
SELECT students.name, courses.course_name FROM students LEFT JOIN student_courses ON students.id = student_courses.student_id LEFT JOIN courses ON student_courses.course_id = courses.id;
在约束条件方面,除了前面提到的主键、唯一和非空约束外,还有检查约束(CHECK),检查约束可以用于限制列的值必须满足一定的条件,在“students”表中,可以添加一个检查约束,确保“age”列的值在18到30之间:
CREATE TABLE students ( id INT PRIMARY KEY, name VARCHAR(50), age INT CHECK (age BETWEEN 18 AND 30) );
SQL中的事务处理也是一个重要的概念,事务是一组数据库操作的逻辑单元,这些操作要么全部成功执行,要么全部不执行,在SQL中,可以使用BEGIN TRANSACTION、COMMIT和ROLLBACK语句来管理事务,BEGIN TRANSACTION用于开始一个事务,COMMIT用于提交事务,即将事务中的所有操作永久保存到数据库中,ROLLBACK用于回滚事务,即撤销事务中的所有操作,使数据库恢复到事务开始之前的状态。
BEGIN TRANSACTION; -- 执行一系列的SQL操作,如插入、更新等 INSERT INTO students (id, name, age) VALUES (3, 'Bob', 25); UPDATE students SET age = 26 WHERE id = 3; -- 如果所有操作都成功,可以提交事务 COMMIT; -- 如果在操作过程中出现错误,可以回滚事务 ROLLBACK;
SQL第三章还可能涉及到视图(VIEW)的创建和使用,视图是一个虚拟的表,它是基于一个或多个基本表(或其他视图)的查询结果,视图可以简化复杂的查询操作,并且可以对用户隐藏表的结构和数据的复杂性,创建视图可以使用CREATE VIEW语句,创建一个视图,显示年龄大于20岁的学生信息:
CREATE VIEW older_students AS SELECT * FROM students WHERE age > 20;
然后可以像操作普通表一样对视图进行查询:
SELECT * FROM older_students;
在索引(INDEX)方面,索引是一种提高数据库查询性能的结构,它类似于书籍的目录,可以快速定位到需要的数据,在SQL中,可以使用CREATE INDEX语句创建索引,为“students”表的“name”列创建一个索引:
CREATE INDEX name_index ON students (name);
不过,索引也不是越多越好,过多的索引会占用额外的存储空间,并且在数据更新时会增加额外的开销,因为每次更新数据时可能需要同时更新索引。
关系数据库标准语言SQL的第三章涵盖了从基本的数据库对象操作到更复杂的多表操作、约束条件、事务处理、视图和索引等重要内容,这些知识对于有效地管理和操作关系数据库至关重要。
评论列表