DDL

创建数据库

1
2
3
4
5
6
7
8
-- 直接创建数据库
CREATE DATABASE 数据库名;

-- 判断数据库是否已经存在,不存在则创建数据库
CREATE DATABASE IF NOT EXISTS 数据库名;

-- 创建数据库并指定字符集
CREATE DATABASE 数据库名 CHARACTER SET 字符集;

查看数据库

1
2
3
4
5
-- 查看所有的数据库
SHOW DATABASES;

-- 查看某个数据库的定义信息
SHOW CREATE DATABASE 数据库名;

修改数据库

1
2
-- 修改数据库默认的字符集
ALTER DATABASE 数据库名 DEFAULT CHARACTER SET 字符集;

删除数据库

1
2
-- 删除某个数据库
DROP DATABASE 数据库名;

使用数据库

1
2
3
4
5
-- 查看正在使用的数据库
SELECT DATABASE();

-- 改变要使用的数据库
USE 数据库名;

创建表

1
2
3
4
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2
);

查看表

1
2
-- 查看某张表的结构
DESC 表名

快速创建一个表结构相同的表

1
2
-- 创建 A1 表,A1 表结构和 A2 表结构相同
CREATE TABLE A1 LIKE A2;

删除表

1
2
3
4
5
-- 直接删除表
DROP TABLE 表名;

-- 判断表是否存在,如果存在则删除表
DROP TABLE IF EXISTS 表名;

修改表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 添加表列 ADD
ALTER TABLE 表名 ADD 列名 类型;

-- 修改列类型 MODIFY
ALTER TABLE 表名 MODIFY 列名 新的类型;

-- 修改列名 CHANGE
ALTER TABLE 表名 CHANGE 旧列名 新列名 类型;

-- 删除列 DROP
ALTER TABLE 表名 DROP 列名;

-- 修改表名
RENAME TABLE 表名 TO 新表名;

-- 修改字符集 character set
ALTER TABLE 表名 character set 字符集;

DML

插入记录

1
2
3
4
5
6
7
8
-- 所有的字段名都写出来
INSERT INTO 表名 (字段名1, 字段名2, 字段名3…) VALUES (值1, 值2, 值3);

-- 不写字段名
INSERT INTO 表名 VALUES (值1, 值2, 值3…);

-- 插入部分数据
INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...);

蠕虫赋值(将一张表中的数据复制到另一张表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
-- 将 表名2 中的所有的列复制到 表名1 中
INSERT INTO 表名1 SELECT * FROM 表名2;

-- 只复制部分列
INSERT INTO 表名1(列1, 列2) SELECT 列1, 列2 FROM 表名2;

-- 创建 表名1,表名1 结构和 表名2 表结构一样
CREATE TABLE 表名1 LIKE 表名2;

-- 将 表名2 中的数据添加到 表名1 表中
INSERT INTO 表名1 SELECT * FROM 表名2;

-- 如果只想复制 表名1 中 字段名1,字段名2 字段数据到 表名2 表中,两张表都写出相应的列名
INSERT INTO 表名1(字段名1, 字段名2) SELECT 字段名1, 字段名2 FROM 表名2;

更新表记录

1
2
3
4
5
-- 不带条件修改数据(修改所有的行)
UPDATE 表名 SET 字段名1=值1, 字段名2=值2;

-- 带条件修改数据
UPDATE 表名 SET 字段名1=值1, 字段名2=值2 WHERE 字段名=值;

删除表记录

1
2
3
4
5
6
7
8
-- 不带条件删除数据
DELETE FROM 表名;

-- 带条件删除数据
DELETE FROM 表名 WHERE 字段名=值;

-- 使用 TRUNCATE 删除表中所有记录
TRUNCATE TABLE 表名;

TRUNCATE 和 DELETE 的区别:

TRUNCATE DELETE
条件删除 不支持 支持
事务回滚 不支持 支持
清理速度
高水位重置

(高水位重置:随着不断地进行表记录的DML操作,会不断提高表的高水位线(HWM),DELETE操作之后虽然表的数据删除了,但是并没有降低表的高水位,随着DML操作数据库容量也只会上升,不会下降。所以如果使用DELETE,就算将表中的数据减少了很多,在查询时还是很和DELETE操作前速度一样。而TRUNCATE操作会重置高水位线,数据库容量也会被重置,之后再进行DML操作速度也会有提升。)


DCL

创建用户

1
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
关键字 说明
用户名 将创建的用户名
主机名 指定该用户在哪个主机上可以登录
如果是本地用户可以用localhost
如果想让该用户可以从任意远程主机登录,可以使用通配符%
密码 该用户的登录密码
密码可以为空,如果为空则该用户可以不需要密码登录服务器

给用户授权

1
2
--  用户创建之后,没什么权限!需要给用户授权
GRANT 权限1, 权限2… ON 数据库名.表名 TO '用户名'@'主机名';
关键字 说明
GRANT…ON…TO 授权关键字
权限 授予用户的权限,如CREATE ALTER SELECT INSERT UPDATE
如果要授予所有的权限则只用ALL
数据库名.表名 该用户可以操作哪个数据库的哪些表
如果要授予该用户对所有数据库和表的相应操作权限则可以用*表示
*.*
‘用户名‘@’主机名’ 给哪个用户授权,注:有2对单引号

撤销授权

1
REVOKE 权限1, 权限2… ON 数据库.表名 FROM '用户名'@'主机名';
关键字 说明
REVOKE…ON…FROM 撤销授权的关键字
权限 用户的权限,如CREATE ALTER SELECT INSERT UPDATE
如果要授予所有的权限则只用ALL
‘用户名‘@’主机名’ 给哪个用户撤销

查看权限

1
SHOW GRANTS FOR '用户名'@'主机名';

删除用户

1
DROP USER '用户名'@'主机名';

修改管理员密码

1
mysqladmin -uroot -p password 新密码

修改普通用户密码

1
set password for '用户名'@'主机名' = password('新密码');