DML,DML,DCL
为了放置关键字和参数混淆,所有的关键字均采用大写,参数采用小写。

DQL(数据查询语言)

最简单的查询语言就一句:

-- 查询所有字段的数据
SELECT * FROM table_name;

下面是与DQL的所有参数:

-- 各个参数的说明
SELECT:指定要查询的列名或表达式,可以用逗号分隔多个列,也可以使用通配符*选择所有列。
FROM:指定要从中查询数据的表名。
WHERE:指定一个条件表达式,用于筛选数据。

GROUP BY:按一个或多个列对查询结果进行分组,通常与聚合函数一起使用。
聚合函数使用时使用,可以用于指定列进行分组计算聚合函数的值。
简单举个例子:
--------
id number
1 1
1 11
2 2
3 3
3 13
4 4
4 14
---------
-- sum:求和函数
-- 筛选id字段(具体为每个id不重复,相同值的id将会作为'数字之和'的累加目标)
select id,sum(number) as 数字之和 from table_name group by id;
-- 结果如下:
id number
1 12
2 2
3 16
4 18

HAVING:对GROUP BY的结果进行筛选,通常与聚合函数一起使用。
差不多是:
-- 查表sales的字段id列数据和number列的数值和,且以id为筛选条件,过滤掉id大于3的所有参数。
SELECT id,sum(number) FROM sales GROUP BY id HAVING id>3;

ORDER BY:按一个或多个列对查询结果进行排序,可以指定升序或降序排序。
-- 排序的就是了。
ASC表示升序排列(默认)
DESC表示降序排列

LIMIT:限制查询结果的行数。
限制范围:[number_of_rows,offset]
LIMIT number_of_rows OFFSET offset

OFFSET:指定查询结果的偏移量,用于分页查询。
DISTINCT:指定查询结果中不包含重复的行。
JOIN:连接多个表以获取更复杂的查询结果。
UNION:将两个或多个SELECT语句的结果组合成一个结果集。

GROUPING SETS:按多个维度对查询结果进行分组。
CUBE:按所有可能的维度对查询结果进行分组。
ROLLUP:按层次结构对查询结果进行分组。

AS:指定列或表达式的别名。
COUNT:计算行数或非NULL值的数量。
SUM:计算列的总和。
AVG:计算列的平均值。
MIN:计算列的最小值。
MAX:计算列的最大值。
EXISTS:检查子查询是否返回任何行。
IN:指定一个条件范围,将其与子查询或列表一起使用。


-- 结构如下(具体需要时再细查)
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING condition
ORDER BY column1 ASC/DESC, column2 ASC/DESC, ...
LIMIT number_of_rows OFFSET offset_value;


DML(数据操作语言)

insert插入语句

-- 将VALUES的值(value1,value2,value3...)对应的插入到table_name表的对应字段(column1,column2,column3...)当中。
-- 注意:
-- 插入值的时候,要时刻注意字段名和值是一一对应的关系。
-- 插入的字段名,可以自己调整
-- 插入的字段名可以不存在,但值必须与表中的字段名一一对应。
INSERT INTO table_name (column1,column2,column3...) VALUES (value1,value2,value3...);
-- 下面是示范
INSERT INTO sec_table (name,age,height)VALUES(syw_sec,18,170);

UPDATE更新语句

UPDATE table_name SET column1=value1,column2=column2,... WHERE condition;
-- table_name 表名
-- column=value 将字段column对应的值更新为value
-- condition 条件控制,可以使前面的更改精确到某一行。

-- 举个例子
-- 将id为2的那一行对应的sex字段的值更新为‘man’
UPDATE sec_table SET sex='man' WHERE id = 2;

DELETE删除语句

-- 删除table_name表下对应condition条件的数据
DELETE FROM table_name WHERE condition;
-- 举例:删除sec表的id为3的那一行的数据
DELETE FROM sec WHERE id=3;

DCL(数据控制语言)

概述

GRANT:         授权,允许用户执行特定的操作;
REVOKE: 撤销权限,取消已有的权限;
CREATE USER: 创建用户,为数据库添加新的用户账户;
DROP USER: 删除用户,删除不再需要的用户账户;
ALTER USER: 修改用户属性,如密码等;
CREATE ROLE: 创建角色,为一组用户分配相同的权限;
DROP ROLE: 删除角色,删除不再需要的角色;
ALTER ROLE: 修改角色属性,如权限等;
GRANT ROLE: 将角色授予用户,赋予用户相应的权限;
REVOKE ROLE: 将角色撤销,取消用户相应的权限。

GRANT授权于REVOKE撤权

授权语句,用于授权用户或角色对某个对象(如表、视图等)进行特定操作的权限。

GRANT permission ON object TO <user or role>; 
REVOKE privilege_name [, privilege_name ...] ON object FROM {user_name | PUBLIC | role_name};

-- permission常见的参数如下:
SELECT:允许用户查询指定表中的数据。
INSERT:允许用户向指定表中插入数据。
UPDATE:允许用户更新指定表中的数据。
DELETE:允许用户删除指定表中的数据。
EXECUTE:授予对存储过程、函数等程序对象的执行权限。
REFERENCES:授予对外键列的REFERENCES权限,允许用户在表之间建立关系。
ALL PRIVILEGES:允许用户对指定对象执行所有操作。


ON:指定对象名称。
-- object:数据库对象
TO:指定被授权的用户或角色名称
-- user or role:被授权的用户或者组,这里提一嘴,可以给"角色"授予权限。
-- PUBLIC:所有用户的意思


-- 举个例子
-- 给用户Jack授予可以在sec_table表中select的权限。
GRANT SELECT ON sec_table TO Jack;

CREATE USER和DROP USER(创建与删除用户)

-- 创建用户的操作
CREATE USER user_name [IDENTIFIED BY password] [DEFAULT TABLESPACE tablespace_name];
-- user_name 创建的新的用户名
-- [IDENTIFIED BY password] 设置用户密码(可选),password为你的密码,形如'123456'.
-- [DEFAULT TABLESPACE tablespace_name] 将用户指向到默认的表空间tablespace_name

-- 删除用户的操作
-- 可以一次删除多个用户。
DROP USER username;

这里其他内容有点多,暂且不提。

ALTER USER(修改用户信息)

-- 下面所有的alter都是修改操作

-- 关于下面提到的“角色”的解释:
-- 角色在数据库当中指的是一组权限的集合,可以授予用户。
-- 角色是一种逻辑实体,可以将权限授予角色,然后将角色授予一个或多个用

-- 修改表空间
-- 参数和上面一样,只不过表空间需要改,否则为默认表空间
ALTER USER username [IDENTIFIED BY password] [DEFAULT TABLESPACE tablespace_name];

-- 修改用户密码
-- 将用户user_name提供旧密码old_password更改为新密码new_password(推荐)
ALTER USER user_name IDENTIFIED BY old_password new_password;
-- 明文修改密码,有一定的安全风险
ALTER USER username PASSWORD 'new_password';
-- 修改用户名
ALTER USER username RENAME 'new_username';

-- 禁用账户/锁定账户
ALTER USER username INACTIVE;
-- 启用账户/解除锁定
ALTER USER usernam ACTIVE;
-- 设置账户有效期(过期则进入封禁状态)
ALTER USER username VALID UNTIL '2023-10-10';

-- 设置用户默认角色为role_name(必须时用户当前拥有的)
ALTER USER username SET ROLE role_name;
-- 将用户角色重置为空,且用户每次登录都需要手动使用SET ROLE指定角色。
ALTER USER username RESET ROLE;
-- 将账户角色设置为role_name,且登录时自动获取
ALTER USER username SET DEFAULT ROLE role_name;
-- 重置账号信息为默认值
ALTER USER username RESET CONFIGURATION;
-- 将账户默认角色设置为空,不自动获取任何角色
ALTER USER username RESET DEFAULT ROLE;

-- 修改账号配置参数
ALTER USER username SET CONFIGURATION paramter_name='value';
-- 使用户账号登录会话失效,需要重新登录更新权限
ALTER USER username INVALIDATE;
-- 取消用户账号的登录会话失效(默认行为,无需设置)
ALTER USER username NOINVALIDATE;

ALTER(修改角色属性)+GRANT+REVOKE(授权)

注意: 这是修改角色的属性。

ALTER ROLE role_name [option]
-- role_name :角色名
-- [option] :对应的参数,在下面
LOGIN:允许或禁止该角色登录,默认为允许登录。
PASSWORD 'password':为该角色设置密码。
VALID UNTIL 'timestamp':设置该角色的有效期,超过该有效期后该角色将被自动禁用。
IN ROLE role_name:将该角色加入到另一个角色中,使其成为该角色的成员

-- 修改角色名
ALTER ROLE role_name RENAME new_role_name;
-- 将角色封禁
ALTER ROLE role_name LOGIN NO;
-- 设置角色密码
ALTER ROLE role_name PASSWORD 'new_password';
-- 设置角色过期时间
ALTER ROLE role_name VALID UNTIL '2023-12-31';
-- 将角色role_name加入到角色manager当中
ALTER ROLE role_name IN ROLE manager;
-- 限制连接数为number
ALTER ROLE role_name CONNECTION LIMIT numbwer;

-- 从角色当中添加用户
-- 修改角色的用户
ALTER ROLE role_name ADD USER username;
-- 授权角色给其他用户,username可以有多个
GRANT role_name TO username;
-- 授权给用户并且允许该用户给其他用户/角色授权
GRANT role_name TO username WITH ADMIN OPTION;

-- 从角色当中删除用户
-- 修改角色用户
ALTER ROLE role_name DROP USER username;
-- 撤销授权
REVOKE role_name FROM username;