本文记录了日常使用 MySQL 时的高频命令,涵盖连接方式、库表管理、用户权限以及索引操作,适合作为随手查阅的速查表。

连接数据库

连接本地数据库:

mysql -u root -p

连接远程数据库:

mysql -h HOSTNAME -u root -p

数据库操作

显示所有数据库:

SHOW DATABASES;

创建新数据库并设置默认字符集:

CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

选择数据库:

USE dbname;

删除数据库:

DROP DATABASE dbname;

用户和权限操作

新建用户

CREATE USER '[USERNAME]'@'[HOST]' IDENTIFIED BY '[PASSWORD]';

分配权限

GRANT ALL ON [DB.TABLES] TO '[USERNAME]'@'[HOST]';

新建用户并分配权限

GRANT [PRIVILEGE_LIST] ON [DB.TABLES] TO '[USERNAME]'@'[HOST]' IDENTIFIED BY '[PASSWORD]';
FLUSH PRIVILEGES;
  • [PRIVILEGE_LIST]:权限列表可参考 官方文档,授予全部权限可使用 ALL
  • [DB.TABLES]:可以指定具体表,如 dbname.table,也可使用 dbname.**.*
  • [HOST]:可以指定具体地址、localhost(仅本机)或 %(任意来源)。

示例:创建用户 aaa,允许从任意主机登录,并授予对 dbname 所有表的 CRUD 权限:

GRANT INSERT, DELETE, UPDATE, SELECT ON dbname.* TO 'aaa'@'%' IDENTIFIED BY 'sccc@123';
FLUSH PRIVILEGES;

管理用户密码

修改密码:

ALTER USER '[USERNAME]'@'[HOST]' IDENTIFIED BY '[PASSWORD]';

设置密码过期策略:

ALTER USER 'username'@'localhost' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'username'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'username'@'localhost' PASSWORD EXPIRE DEFAULT;

删除用户

DROP USER 'username'@'localhost';

表操作

创建表:

CREATE TABLE topic (
    token VARCHAR(10) NOT NULL,
    name VARCHAR(100) NOT NULL,
    followers INT(11) NOT NULL,
    description VARCHAR(1000) NOT NULL
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

重命名表:

ALTER TABLE t1 RENAME TO t2;

修改字段属性或字段名:

ALTER TABLE t2
    MODIFY a TINYINT NOT NULL,
    CHANGE b c CHAR(20);

添加字段:

ALTER TABLE t2 ADD COLUMN d TIMESTAMP;

删除字段:

ALTER TABLE t2 DROP COLUMN c;

删除表:

DROP TABLE t2;

数据(记录)操作

-- 插入记录
INSERT INTO t1 (a, b) VALUES (33, 'foo');

-- 查询记录
SELECT * FROM t1 WHERE a = 3 AND b LIKE '%foo%';

-- 更新记录
UPDATE t1 SET a = 3 WHERE a = 4 AND b LIKE '%foo%';

-- 删除记录
DELETE FROM t1 WHERE a = 3 AND b IN (1, 2, 3);

索引操作

使用 ALTER 语句

添加普通索引:

ALTER TABLE table_name ADD INDEX index_name (column_list);

添加唯一索引:

ALTER TABLE table_name ADD UNIQUE index_name (column_list);

添加主键索引:

ALTER TABLE table_name ADD PRIMARY KEY index_name (column_list);

使用 CREATE 语句

-- 添加普通索引
CREATE INDEX index_name ON table_name (column_list);

-- 添加唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_list);