做到哪一步才算精通SQL-Structured Query Language
ref [基础语法与操作](https://blog.csdn.net/pantouyuchiyu/article/details/135937701)
数据定义语言 DDL for Struct
- DDL(Data Definition Language)数据库定义语言,
- 用于定义或改变数据表结构、数据类型、
- 表之间的关系、库的索引、约束、视图、存储过程、触发器等。
CREATE
、ALTER
、DROP
、TRUNCATE
、RENAME
、COMMENT
等命令一旦执行,就无法被撤销,因为它们改变了数据库的结构。
CREATE:用来创建数据库、表、索引等对象
sql">CREATE DATABASE testDB; -- 创建一个名为testDB的数据库
CREATE TABLE Students (ID INT, Name TEXT); -- 创建一个名为Students的表,包含ID和Name两个字段
CREATE INDEX index_name ON Students (Name desc); -- 常见简单索引 name 逆序
CREATE UNIQUE INDEX index_id on Students (ID); -- 常见唯一索引 id
ALTER:用来修改已存在的数据库对象
sql">ALTER TABLE Students ADD Grade INT; --在Students表中添加一个名为Grade的字段
ALTER TABLE Students DROP COLUMN Grade; --在Students表中删除名为Grade的字段
DROP:用来删除整个数据库或者数据库中的表
sql">DROP DATABASE testDB; --删除名为testDB的数据库
DROP TABLE Students; --删除Students表
TRUNCATE:用来删除表中所有的行,但不删除表本身
sql">TRUNCATE TABLE Students; --删除Students表中的所有数据,但不删除表本身
RENAME:用来重命名数据库或者表
sql">ALTER TABLE Students RENAME TO Pupils; --将Students表重命名为Pupils
COMMENT:用来为数据库对象如表、列添加注释
sql">COMMENT ON COLUMN Students.Name IS 'Student Name'; --在Students表的Name列上添加注释'Student Name'
数据操作语言 DML for Data
- DML(Data Manipulation Language)是数据操作语言,用于管理和检索数据库中的数据。
适用于对数据库中的数据进行一些简单操作,比如增删改查表中的数据。 - 常用的语句关键字有:
SELECT
、INSERT
、UPDATE
、DELETE
、MERGE
、CALL
、EXPLAIN PLAN
、LOCK TABLE
。 - 作用于数据本身,如果执行了错误的操作,可以通过
回滚机制
来取消这些操作。
sql">SELECT * FROM Students; --选择Students表中的所有数据
SELECT Name, Grade FROM Students; --选择Students表中的Name和Grade数据# 在Students表中插入一条新的数据
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18); # 将Students表中ID为1的记录的Age设置为19
UPDATE Students SET Age = 19 WHERE ID = 1;# 删除Students表中ID为1的数据
DELETE FROM Students WHERE ID = 1;
MERGE:合并两张表或更改其中一张表的数据
sql"># 根据ID进行匹配,向Students中更新或插入来自Enrolled_Students中的数据
MERGE INTO Students AS Target
USING (SELECT ID, Name FROM Enrolled_Students) AS Source
ON Target.ID = Source.ID
WHEN MATCHED THEN UPDATE SET Name = Source.Name
WHEN NOT MATCHED THEN INSERT (ID, Name) VALUES (Source.ID, Source.Name); # MySQL 在 8.0 之前不支持 MERGE 语句,
# 需要使用 INSERT ... ON DUPLICATE KEY UPDATE 来实现类似的功能
CALL:调用一个存储过程
sql">CALL Update_Students_Age(18); -- 调用名为“Update_Students_Age”的存储过程
EXPLAIN PLAN:提供一条查询语句的执行计划 - 工作中未用到,待学习中
sql">EXPLAIN PLAN FOR SELECT * FROM Students; -- 显示查询所有学生数据的执行计划
LOCK TABLE:对数据库表进行锁定,以控制并发读写 - 工作中未用到,待学习中
sql">LOCK TABLE Students IN EXCLUSIVE MODE; -- 对Students表施加独占锁
数据控制语言 DCL for permission
- DCL(Data Control Language)数据控制语言:主要用于控制用户对数据库的访问权限以及对数据的执行权限。
- 使用DCL,数据库管理员可以精细化管理数据库的访问权限,保护数据的安全性。
- 常见的DCL语句包括GRANT、REVOKE等。
GRANT:该命令用于授予用户对数据库对象(例如表格)的访问权限
sql">GRANT SELECT, INSERT, UPDATE ON Students TO hugh;
# 给 "hugh" 授予了对 "Students" 表进行 SELECT、INSERT 和 UPDATE 的权限
REVOKE:该命令用于撤回已经授予用户的某些权限
sql">REVOKE UPDATE ON Students FROM hugh;
撤回了 "hugh" 对 "Students" 表的 UPDATE 权限。
数据查询语言 DQL
DQL(Data Query Language)数据查询语言:主要用来查询数据。
实际上,DQL在操作中主要体现为SQL的SELECT语句。
事务控制语言 TCL
- TCL (Transaction Control Language) 是事务控制语言,
- 主要用来管理和控制数据库中的事务(Transaction),以保证数据库操作的完整性和一致性。
- TCL命令往往和DML(数据操作语言)命令一起使用,以确保一系列的数据库操作要么全部成功,要么全部不成功(可回滚至操作前的状态)。
COMMIT:用于提交事务,将所有数据库修改保存到数据库中
sql">INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT; -- 提交事务,将插入的数据保存到数据库中
ROLLBACK:用于回滚事务,撤销所有未经提交的数据库修改
sql">INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
COMMIT; -- 提交事务,将插入的数据保存到数据库中
AVEPOINT:为事务中的一系列操作设定保存点
设立保存点后,可以选择只回滚到保存点的部分,而不需要全部回滚
sql">SAVEPOINT SP1; -- 创建保存点 SP1
INSERT INTO Students (ID, Name, Age) VALUES (1, 'Tom', 18);
ROLLBACK TO SP1; -- 回滚至保存点 SP1,不会撤销保存点后的操作