# SQL 分类

  • DDLDDL:数据定义语言
  • DMLDML:数据操作语言
  • DCLDCL:数据控制语言
  • DQLDQL:数据查询语言

# DDL(定义)

  • show databases; :查看所有数据库
  • use 库; :切换到指定数据库
  • CREATE DATABASE (IF NOT EXISTS) 库名; :创建指定库名的数据库
  • DROP DATABASE (IF NOT EXISTS) 库名; :删除指定库名的数据库
  • ALTER DATABASE 库名 CHARACTER SET utf8 :更改文件编码

# 数据类型

# 数值类型

# 日期 / 时间类型

每个时间类型有一个有效值范围和一个 "零" 值,当指定不合法的 MySQL 不能表示的值时使用 "零" 值。

# 字符串类型

# 注意

  • char(n)varchar(n) 的括号的 nn 代表字符的个数
  • charvarchar 类型类似,但保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换

# 操作表

sql
1
2
3
4
CREATE TABLE 表名 (
列名 列类型,
......
);

  • DESC 表名; :查看表的结构
  • DROP TABLE 表名; :删除表
  • 修改表
    • ALTER TABLE 表名 ADD (新列名 数据类型); :向指定表中,添加一列
    • ALTER TABLE 表名 MODIFY 列名 新数据类型; :改变指定表的指定列的数据类型
    • ALTER TABLE 表名 change 列名 新列名 数据类型; :修改指定表中指定列的列名
    • ALTER TABLE 表名 DROP 列名; :删除指定表的指定列
    • ALTER TABLE 表名 RENAME TO 新表名; :修改指定表的名字

# DML(插入)

# 插入数据

指定列插入

sql
1
2
3
INSERT INTO
表名(列名1, 列名2, ..., 列名n)
VALUES('数据1', ..., '数据n');

按创建表的时序顺序插入
sql
1
2
3
INSERT INTO
表名
VALUES('数据1', ..., '数据n');

# 修改数据

sql
1
2
3
UPDATE 表名
SET 列名1=1, ..., 列n=值n
WHERE 条件

# 删除数据

  • DELETE FROM 表名 [WHERE 条件];
  • TRUNCATE FROM 表名;

虽然 TRUNCATEDELETE 都可以删除表的所有记录,但原理不同
DELETE 的效率没有 TRUNCATE

TRUNCATE 是属性 DDLDDL 语句,因为它是先 DROP TABLE ,再 CREATE TABLE
而且 TRUNCATE 删除的记录是无法回滚的,但 DELETE 删除的记录是可以回滚的

# DCL(控制)

  • CREATE USER '用户名'@localhost IDENTIFIED BY '密码'; :创建用户
  • GRANT 权限1, ..., 权限n ON 数据库名.* TO '用户名'@localhost; :授权
    • GRANT ALL ON 数据库名.* TO '用户名'@localhost;
  • REVOKE 权限1, ..., 权限n ON 数据库名.* FROM '用户名'@localhost; :撤销授权
  • SHOW GRANTS FRO '用户名'@localhost; :查看用户权限
  • DROP USER '用户名'@localhost; :删除用户
  • use mysql; ALTER USER '用户名'@localhost IDENTIFIED BY '新密码' :更改用户密码