001-常用命令汇总
1. 命令行
- 登录:
mysql -uroot -p [-hlocalhost]
- 退出:
exit/quit
2. SQL
2.1. SQL简介
- 作用:对存储在RDBMS中的数据进行增删改查
- 分类:
- DCL(Data Control language) 数据控制语言
grant
授予用户某些权限(如查询、插入、更新)revoke
撤销用户已经被授予的权限
- DDL(Data Definition language) 数据定义语言
create
创建数据库对象(如表、数据库、视图)alter
修改数据库对象结构drop
删除数据库对象结构truncate
删除表中所有数据,但是保留表结构
- DML(Data Manipulation language) 数据操作语言
insert
delete
update
select
- TCL(Transaction Control language) 事务控制语言
commit
提交事务rollback
回滚事务savepoint
设置事务保存点set transaction
设置事务特性,如隔离级别等
- DCL(Data Control language) 数据控制语言
✅ MySQL 中各种“删除”操作对比总结
操作 | 删除内容 | 是否保留表结构 | 是否可回滚 | 是否重置自增ID | 执行速度 | 使用场景 |
---|---|---|---|---|---|---|
DELETE FROM 表名 |
数据 | ✅ 是 | ✅ 可回滚(在事务中) | ❌ 不重置 | 慢(逐行) | 需要有选择性删除、希望回滚 |
TRUNCATE TABLE 表名 |
数据 | ✅ 是 | ❌ 不可回滚 | ✅ 会重置 | 快 | 清空整张表,重置状态 |
DROP TABLE 表名 |
数据 + 结构 | ❌ 否 | ❌ 不可回滚 | ✅ 会重置 | 非常快 | 不再使用此表,彻底删除 |
DROP DATABASE 库名 |
所有表及结构 | ❌ 否 | ❌ 不可回滚 | ✅ 会重置 | 非常快 | 删除整个数据库 |
2.2. DCL
2.2.1. 数据库账号创建命令create user
- 创建数据库账号:
create user hanma@'192.168.0.%' identified with 'mysql_native_password' by '123456';
hanma@'192.168.0.%'
表示用户名@访问控制列表,决定用户可以从哪些客户端访问,也就是:允许那些ip地址可以的登录该用户identified with 'mysql_native_password'
指定认证mysql的加密规则方式'123456'
表示设置的用户密码
说明:- 常见的加密方式:
mysql_native_password
老式加密方式,兼容性好,但安全性稍差caching_sha2_password
新式默认插件,更安全,MySQL8推荐sha256_password
安全性高,适合TLS环境
MySQL 用户主机部分(@host)常见写法说明
写法 | 示例 | 含义 |
---|---|---|
'localhost' |
user@'localhost' |
只允许用户从本机通过 本地连接(如 socket 文件) 访问数据库(不经 TCP/IP) |
'127.0.0.1' |
user@'127.0.0.1' |
只允许通过 TCP/IP 从本机连接(不使用 socket) |
'%' |
user@'%' |
允许从 任意主机/IP 地址 连接(不推荐用于生产环境) |
'192.168.0.%' |
user@'192.168.0.%' |
允许从 192.168.0.* 段(如局域网)连接 |
'10.0.0.10' |
user@'10.0.0.10' |
仅允许从指定 IP 地址连接 |
'0.0.0.0' |
user@'0.0.0.0' |
理论上表示“所有 IPv4 地址”,但 MySQL 实际上并不推荐也不支持这种写法进行访问控制(你可以创建它,但连接行为可能不符合预期) |
'::1' |
user@'::1' |
IPv6 本地地址,类似于 localhost |
'mydomain.com' |
user@'example.com' |
允许从某个域名连接(需要解析成 IP) |
ℹ️ 建议:生产环境中尽量避免使用
'%'
或'0.0.0.0'
,推荐使用明确的 IP 或网段来控制访问来源,提高安全性。
- 修改数据库账号
alter user username@'localhost' identified with mysql_native_password by 'password';
- 指定最大连接数
create user username@'localhost' identified with mysql_native_password by 'password' with max_user_connection 1;
2.2.2. 数据库用户授权语句 grant
grant select(user,host) on mysql.user to hanma@'localhost';
grant select on mysql.user to hanma@'localhost';
grant select,insert,delete,update on mysql.user to hanma@'localhost';
grant select(user,host) on mysql.* to hanma@'localhost';
grant all privileges on *.* to hanma@'localhost';
flush privileges;
- 补充:
flush privileges;
通常在手动更改权限表(如直接更新mysql.user表)后才需要, 使用grant
和revoke
命令时不强制需要执行flush privileges;
,但写上也没错,出于安全习惯也可以保留。
2.2.3. 回收授权语句 revoke
revoke all on *.* from hanma@'localhost';
revoke select on mysql.user from hanma@'localhost';
revoke select,insert,delete,update on mysql.* from hanma@'localhost';
flush privileges;
2.3. DDL
2.3.1. 概览
- 数据库相关:
- create/alter/drop/use database 数据库名;
- 表相关:
- create/drop/desc table
2.3.2. 数据库
- 创建数据库
create database 数据库名;
- 删除数据库:
drop database 数据库名;
2.3.3. 表
- 创建表
create table 表名(
列名1 数据类型 [约束],
列名2 数据类型 [约束],
...
);
-- 示例1:
create table user1(
id int not null,
name char,
age int
);
-- 示例2:
create table user2(
id INT not null primary key,
username varchar(255) not null,
password varchar(20) not null,
sex tinyint COMMENT '性别:1 男, 2 女'
);
- 常见的约束:
primary key
主键not null
非空unique
唯一default
默认值AUTO_INCREMENT
自动递增(用于主键字段)
- 删除表
drop table 表名;
- 查看表结构:
describe 表名;
desc 表名;
show create table;
- 清空表
truncate table 表名;
delete from 表名;
- 重命名表
alter table 旧表名 rename 新表名;
2.3.4. 表字段
- 添加表字段
-- 添加一个字段
alter table 表名 add column 列名 数据类型[约束];
-- 添加多个字段
alter table 表名 add column 列名 数据类型[约束],
add column 列名 数据类型[约束],
add column 列名 数据类型[约束];
- 修改字段
alter table 表名 change 旧字段名 新字段名 新数据类型[约束];
- 删除字段
alter table 表名称 drop 字段名;
2.3.5. 表索引
- 添加普通索引
create index 索引名称 on 表名称(字段);
alter table 表名称 add index 索引名称(字段);
- 添加唯一索引
create unique index 索引名称 on 表名称(字段);
alter table 表名称 add unique 索引名称(字段);
- 添加全文索引
create fulltext 索引名称 on 表名称(字段);
alter table 表名称 add fulltext 索引名称(字段);
- 查看索引
show index from 表名称;
- 删除索引
drop index 索引名称 on 表名称;
2.4. DML
- DML用于对数据库中的数据进行增删改查,包括:
- insert
- delete
- update
- select
2.4.1. insert
- 基本语法
insert into 表名(列1,列2,...) values(值1,值2,...);
2.4.2. delete
delete
删除行
delete from 表名 where 条件;
2.4.3. update
update
更新/修改现有数据
update 表名 set 列1 = 新值1,列2 = 新值2 where 条件;