做到哪一步才算精通SQL

做到哪一步才算精通SQL-Structured Query Language

数据定义语言 DDL for Struct

  • DDL(Data Definition Language)数据库定义语言,
  • 用于定义或改变数据表结构、数据类型、
  • 表之间的关系、库的索引、约束、视图、存储过程、触发器等。
  • CREATEALTERDROPTRUNCATERENAMECOMMENT等命令一旦执行,就无法被撤销,因为它们改变了数据库的结构。

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)是数据操作语言,用于管理和检索数据库中的数据。
    适用于对数据库中的数据进行一些简单操作,比如增删改查表中的数据。
  • 常用的语句关键字有:SELECTINSERTUPDATEDELETEMERGECALLEXPLAIN PLANLOCK 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,不会撤销保存点后的操作
相关推荐
8643063371 小时前
在Visual Studio 2022中实现Qt插件开发
数据库·qt·visual studio
andrew_12191 小时前
暑期第一面oωo, TME一面面经
java·后端·sql·mysql·面试
笑远1 小时前
Oracle/MySQL/PostgreSQL 到信创数据库数据同步简介
数据库·python·etl
z26373056111 小时前
Redis常用数据结构及命令详解:从基础到进阶
数据结构·数据库·redis
最好玩的游戏IDEA2 小时前
MySQL索引失效的8种情况
数据库
用户4099322502122 小时前
FastAPI 错误处理与自定义错误消息完全指南:构建健壮的 API 应用 🛠️
前端·数据库·后端
PawSQL2 小时前
PawSQL for TDSQL:腾讯云TDSQL数据库性能优化全攻略
数据库·sql·性能优化·腾讯云·pawsql
巴啦啦小魔仙变身2 小时前
Django-ORM-select_related
数据库·python·django·sqlite
字节王德发2 小时前
如何在Django中实现批量覆盖更新的示例
数据库·django·sqlite