权限管理
用户权限分为非常多种,包括全局权限、库权限、表权限、列权限等。
-- 赋予权限(GRANT) mysql> GRANT SELECT,INSERT ON *.* -- 赋予用户选择插入权限(所有库的所有表) -> TO 'boy'@'localhost' -- 不存在将新建用户 -> IDENTIFIED BY '123456' -> WITH GRANT OPTION; -- (可选)允许用户转授权限 -- 撤消权限(REVOKE) mysql> REVOKE INSERT ON *.* -> FROM 'boy'@'localhost'; -- 查看权限 mysql> SELECT Host,User,Select_priv,Grant_priv -> FROM mysql.user -> WHERE User='testUser';Copy to clipboardErrorCopied 复制代码
数据库管理
MySQL 内划分为多个互相独立的数据存储区域,调用数据库指令时必须提前声明要使用的数据库。
- 数据库选项信息
属性 | 含义 | 备注 |
CHARACTER SET | 编码方式 | 默认为 utf8mb4 |
COLLATE | 校对规则 | 默认为 utf8mb4_general_ci |
-- 查看所有数据库 mysql> SHOW DATABASES; -- 进入/切换数据库 mysql> USE mydb; -- 查看当前数据库 mysql> SELECT DATABASE(); -- 创建数据库 mysql> CREATE DATABASE [IF NOT EXISTS] mydb; mysql> CREATE DATABASE [IF NOT EXISTS] mydb CHARACTER SET utf8mb4; -- 删除数据库 mysql> DROP DATABASE [IF EXISTS] mydb; -- 查看数据库选项信息 mysql> SHOW CREATE DATABASE mydb; -- 修改数据库选项信息 mysql> ALTER DATABASE mydb CHARACTER SET utf8;Copy to clipboardErrorCopied 复制代码
表管理
- 表属性
属性 | 含义 | 备注 |
CHARSET | 字符集 | 默认使用数据库字符集 |
ENGINE | 存储引擎 | 默认为 InnoDB |
DATA DIRECTORY | 数据文件目录 | |
INDEX DIRECTORY | 索引文件目录 | |
COMMENT | 表注释 |
如果表标记为 TEMPORARY 则为临时表,在连接断开时表会消失。
- 列属性
属性 | 含义 | 备注 |
PRIMARY KEY | 主键 | 标识记录的字段。可以为字段组合,不能为空且不能重复。 |
INDEX | 普通索引 | 可以为字段组合,建立普通索引。 |
UNIQUE | 唯一索引 | 可以为字段组合,不能重复,建立唯一索引。 |
NOT NULL | 非空 | (推荐)不允许字段值为空。 |
DEFAULT | 默认值 | 设置当前字段的默认值。 |
AUTO_INCREMENt | 自动增长 | 字段无需赋值,从指定值(默认 1)开始自动增长。表内只能存在一个且必须为索引。 |
COMMENT | 注释 | 字段备注信息。 |
FOREIGN KEY | 外键 | 该字段关联到其他表的主键。默认建立普通索引。 |
表操作
-- 查看所有表 mysql> SHOW TABLES; -- 创建表 mysql> CREATE [TEMPORARY] TABLE [IF NOT EXISTS] student ( id INT(8) PRIMARY KEY AUTO_INCREMENT=20190001, name VARCHAR(50) NOT NULL, sex INT COMMENT 'Male 1,Female 0', access_time DATE DEFAULT GETDATE(), major_id INT FOREIGN KEY REFERENCES major(id) )ENGINE=InnoDB; mysql> CREATE TABLE grade ( student_id INT, course_id INT, grade INT, PRIMARY KEY (student_id,course_id), CONSTRAINT fk_grade_student FOREIGN KEY (student_id) REFERENCES student(id), CONSTRAINT fk_grade_course FOREIGN KEY (course_id) REFERENCES course(id) ); -- 删除表 mysql> DROP TABLE [IF EXISTS] student; -- 清空表数据(直接删除表,再重新创建) mysql> TRUNCATE [TABLE] student; -- 查看表结构 mysql> SHOW CREATE TABLE student; mysql> DESC student; -- 修改表属性 mysql> ALTER TABLE student ENGINE=MYISAM; -- 重命名表 mysql> RENAME TABLE student TO new_student; mysql> RENAME TABLE student TO mydb.new_student; -- 复制表 mysql> CREATE TABLE new_student LIKE student; -- 复制表结构 mysql> CREATE TABLE new_student [AS] SELECT * FROM student; -- 复制表结构和数据 -- 检查表是否有错误 mysql> CHECK TABLE tbl_name [, tbl_name] ... [option] ... -- 优化表 mysql> OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... -- 修复表 mysql> REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM] -- 分析表 mysql> ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...Copy to clipboardErrorCopied 复制代码
列操作
-- 添加字段 mysql> ALTER TABLE student ADD [COLUMN] age INT; -- 默认添加在最后一行 mysql> ALTER TABLE student ADD [COLUMN] age INT AFTER sex; -- 添加在指定字段后 mysql> ALTER TABLE student ADD [COLUMN] age INT FIRST; -- 添加在第一行 --修改字段 mysql> ALTER TABLE student MODIFY [COLUMN] id SMALLINT; -- 修改字段属性 mysql> ALTER TABLE student CHANGE [COLUMN] id new_id INT; -- 修改字段名 -- 删除字段 mysql> ALTER TABLE student DROP [COLUMN] age; -- 编辑主键 mysql> ALTER TABLE student ADD PRIMARY KEY(id,age); mysql> ALTER TABLE student DROP PRIMARY KEY; -- 编辑外键 mysql> ALTER TABLE student ADD CONSTRAINT fk_student_class FOREIGN KEY(cid) REFERENCES class(id); mysql> ALTER TABLE student DROP FOREIGN KEY fk_student_class;