用户管理 创建用户 主机名没指定默认是 % ,不指定密码用户可以直接登录,但是不安全,不推荐使用。
1 2 3 4 # mysql5.7 create user 用户名@主机名 identified by '密码' ;# mysql8 create user 用户名@主机名 identified with mysql_native_password by '密码' ;
案例:在本地localhost创建一个用户名为 test,密码为 123456 的用户
1 create user test@localhost identified by '123456' ;
查看用户 1 show grants for 用户名@主机名;
修改用户 修改用户名 1 2 3 4 # 方式一 rename user 旧用户名@主机名 to 新用户名@主机名; # 方式二 update mysql.user set user = '新用户名' where user = '旧用户名' and host = '旧主机名' ;
修改主机名 1 update mysql.user set host = '新主机名' where user = '旧用户名' and host = '旧主机名' ;
修改密码 1 2 3 4 5 6 # 使用ALTER 语句来修改密码 alter user 用户名@主机名 identified by '新密码' ;# 使用SET 命令来修改密码 set password for 用户名@主机名 = password('新密码' ); # 使用UPDATE 语句修改密码(不推荐) update MySQL.user set authentication_string= password("123456") where User = "用户名" and Host = "主机名";
案例:修改当前用户的密码
1 2 # CURRENT_USER () 是 MySQL 内置的一个函数,用于获取当前登录用户的用户名和主机名,并作为结果返回 alter user CURRENT_USER () identified by '新密码' ;
禁用用户 在 MySQL 中,可以通过修改用户的访问权限来禁止用户登录
1 alter user 用户名@主机名 account lock;
启用用户 1 alter user 用户名@主机名 account unlock;
删除用户 1 2 3 4 # drop user 方式:会删除用户以及对应的权限,执行命令后mysql.user表和mysql.db表的相应记录都会消失(推荐) drop user 用户名@主机名;# delete 方式:删除后系统会有残留信息保留,只会删除 mysql.user 表中的对应记录,不会影响授权表等其他表中的数据 delete from mysql.user where Host = '主机名' and User = '用户名' ;
角色管理 创建角色 删除角色 为用户分配角色 撤销用户角色 1 revoke 角色名称 from 用户名@主机名;
权限管理 权限列表 查看MySQL有哪些权限
权限名 作用范围 描述 Alter 表格 修改表格 Alter routine 函数、存储过程 修改或删除存储的函数/存储过程 Create 数据库、表格、索引 创建新的数据库和表格 Create routine 数据库 使用CREATE FUNCTION/PROCEDURE创建存储过程/存储函数 Create role 服务器管理员 创建新角色 Create temporary tables 数据库 使用CREATE TEMPORARY TABLE Create view 表格 创建新视图 Create user 服务器管理员 创建新用户 Delete 表格 删除现有行 Drop 数据库、表格 删除数据库、表格和视图 Drop role 服务器管理员 删除角色 Event 服务器管理员 创建、修改、删除和执行事件 Execute 函数、存储过程 执行存储的例程 File 在服务器上访问文件 在服务器上读写文件 Grant option 数据库、表格、函数、存储过程 将您拥有的权限授予其他用户 Index 表格 创建或删除索引 Insert 表格 向表格中插入数据 Lock tables 数据库 使用LOCK TABLES(与SELECT权限一起使用) Process 服务器管理员 查看当前执行的查询的纯文本 Proxy 服务器管理员 实现代理用户 References 数据库、表格 在表格上具有引用权 Reload 服务器管理员 重新加载或刷新表格、日志和权限 Replication client 服务器管理员 询问从服务器或主服务器的位置 Replication slave 服务器管理员 从主服务器读取二进制日志事件 Select 表格 检索表格中的行 Show databases 服务器管理员 通过SHOW DATABASES查看所有数据库 Show view 表格 使用SHOW CREATE VIEW查看视图 Shutdown 服务器管理员 关闭服务器 Super 服务器管理员 使用KILL线程、SET GLOBAL、CHANGE MASTER等 Trigger 表格 使用触发器 Create tablespace 服务器管理员 创建/更改/删除表空间 Update 表格 更新现有行 Usage 服务器管理员 没有特权-仅允许连接 AUTHENTICATION_POLICY_ADMIN 服务器管理员 GROUP_REPLICATION_STREAM 服务器管理员 XA_RECOVER_ADMIN 服务器管理员 SHOW_ROUTINE 服务器管理员 RESOURCE_GROUP_USER 服务器管理员 REPLICATION_APPLIER 服务器管理员 PASSWORDLESS_USER_ADMIN 服务器管理员 INNODB_REDO_LOG_ENABLE 服务器管理员 GROUP_REPLICATION_ADMIN 服务器管理员 FLUSH_USER_RESOURCES 服务器管理员 PERSIST_RO_VARIABLES_ADMIN 服务器管理员 ROLE_ADMIN 服务器管理员 BACKUP_ADMIN 服务器管理员 CONNECTION_ADMIN 服务器管理员 SET_USER_ID 服务器管理员 SESSION_VARIABLES_ADMIN 服务器管理员 RESOURCE_GROUP_ADMIN 服务器管理员 INNODB_REDO_LOG_ARCHIVE 服务器管理员 BINLOG_ENCRYPTION_ADMIN 服务器管理员 REPLICATION_SLAVE_ADMIN 服务器管理员 SYSTEM_VARIABLES_ADMIN 服务器管理员 SYSTEM_USER 服务器管理员 APPLICATION_PASSWORD_ADMIN 服务器管理员 TABLE_ENCRYPTION_ADMIN 服务器管理员 SERVICE_CONNECTION_ADMIN 服务器管理员 AUDIT_ADMIN 服务器管理员 BINLOG_ADMIN 服务器管理员 ENCRYPTION_KEY_ADMIN 服务器管理员 CLONE_ADMIN 服务器管理员 FLUSH_OPTIMIZER_COSTS 服务器管理员 FLUSH_STATUS 服务器管理员 FLUSH_TABLES 服务器管理员
授予权限 给用户授权的方式有 2 种,分别是通过把 角色赋予用户给用户授权 和 直接给用户授权。
1 grant 权限列表 on 数据库名称.表名称 to 用户名@主机名 identified by '密码' ;
查看权限 查看当前用户权限
1 2 3 4 # 查看特定用户账户及其对应主机名的权限 show grants for 用户名@主机名;# 查看当前会话的用户账户的权限 show grants for CURRENT_USER ();
收回权限 收回权限后,须用户重新登录后才能生效
1 revoke 权限列表 on 数据库名称.表名称 from 用户名@主机名;
约束 (constraint) 约束是作用于表上的规则,用于限制加入表的数据,约束的存在保证了数据库中数据的正确性、有效性和完整性
约束关键字 关键字 约束名称 描述 not null 非空约束 限定某个字段/某列的值不允许为空 unique 唯一约束 用来限制某个字段/某列的值不能重复。 primary key 主键约束 主键是一行数据的唯一标识,要求非空且唯一 check 检查约束 检查某个字段的值是否符号xx要求,一般指的是值的范围,保证列中的值满足某一条件 default 默认约束 保存数据时,未指定值则采用默认值 foreign key 外键约束 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性,即其他表中的主键,当做该表的外键。 auto_increment 自增约束 某个字段的值自增,当列是数字类型并且唯一约束时才可以使用
约束语法 创建表时添加约束 1 2 3 4 5 6 7 create table [if not exists ]表名 ( 字段1 , 数据类型 [约束条件] [默认值], 字段2 , 数据类型 [约束条件] [默认值], 字段3 , 数据类型 [约束条件] [默认值], …… [表约束条件] );
建完表后添加约束 1 create table 表名 modify 字段名 数据类型 约束条件;
查看某个表已有的约束 1 select * from information_schema.table_constraints where table_name = '表名称' ;
删除约束 1 alter table 表名 modify 字段名 数据类型;
非空约束(not null) 建表时添加非空约束 1 2 3 4 5 create table 表名( 字段名 类型 primary key, 字段名 类型 not null , …… );
建表后添加非空约束 1 alter table 表名称 modify 字段名 数据类型 not null ;
删除非空约束 1 alter table 表名称 modify 字段名 数据类型 [null ];
唯一约束(unique) 建表时添加唯一约束 1 2 3 4 5 6 7 8 9 10 11 12 13 14 # 方式一 create table 表名( 字段名 类型 primary key, 字段名 类型 unique , 字段名 类型 unique key, …… ); # 方式二 create table 表名( 字段名 类型 primary key, 字段名 类型, …… [constraint 约束名] unique key(字段名) );
建表时添加复合唯一约束 1 2 3 4 5 6 create table 表名( 字段名 类型 primary key, 字段名 类型, …… [constraint 约束名] unique key(字段名,字段名…) );
建表后添加唯一约束 1 2 3 4 # 方式一 alter table 表名称 modify 字段名 字段类型 unique ;# 方式二: alter table 表名称 add [constraint 约束名] unique key(字段列表);
删除唯一约束 1 alter table 表名 drop index 索引名;
主键约束(primary key) 建表时添加主键约束 1 2 3 4 5 create table 表名( 字段名 类型 primary key, 字段名 类型, …… );
建表时添加复合主键 1 2 3 4 5 6 create table 表名( 字段名 类型, 字段名 类型, …… primary key(字段,字段));
建表后添加主键约束 1 alter table 表名 add primary key(字段,字段…)
删除主键约束 1 alter table 表名称 drop primary key;
自增约束(auto_increment) 建表时添加自增约束 1 2 3 4 5 create table 表名( 字段名 类型 primary key auto_increment, 字段名 类型 unique key auto_increment, …… );
建表后添加自增约束 1 alter table 表名称 modify 字段名 字段类型 auto_increment;
删除自增约束 1 alter table 表名称 modify 字段名 字段类型;
外键约束(foreign key) 建表时添加外键约束 1 2 3 4 5 6 7 8 9 10 11 12 # 最好是采用: on update Cascade on delete Restrict 的方式(级联更新,级联删除) # 表示主表改变从表同步,主表不能删除数据与从表关联的数据,除非先删从表中的再删主表中的 create table 主表名称( 字段名 类型 primary key, 字段名 类型 ); create table 从表名称( 字段名 类型 primary key, 字段名 类型, [constraint 外键名称] foreign key(从表字段) references 主表名(主表列名称)[on update xx][on delete xx] );
建表后添加外键约束 1 alter table 从表名 add [constraint 外键名称] foreign key(从表字段) references 主表名(主表列名称)[on update xx][on delete xx];
删除外键约束 1 2 3 4 5 6 7 8 # 1 、先查看约束名 select * from information_schema.table_constraints where table_name = '表名称' ; # 2 、删除外键约束 alter table 从表名 drop foreign key 外键名称;# 3 、查看索引名 show index from 表名称; # 4 、删除索引(注意,只能手动删除) alter table 从表名 drop index 索引名;
检查约束(check) 建表时添加检查约束 1 2 3 4 5 6 7 # MySQL5.7 可以使用check 约束,添加数据时,没有任何错误或警告,但check 约束对数据验证没有任何作用。 # MySQL 8.0 使用check 约束有效 create table 表名( 字段名 类型 primary key auto_increment, 字段名 类型 check (条件), …… );
默认约束(default) 建表时添加默认约束 1 2 3 4 5 create table 表名( 字段名 类型 primary key, 字段名 类型 default 默认值, …… );
建表后添加默认约束 1 2 3 4 5 # 添加默认值约束,不保留非空约束 alter table 表名称 modify 字段名 数据类型 default 默认值;# 添加默认值约束,保留非空约束 alter table 表名称 modify 字段名 数据类型 default 默认值 not null ;
删除默认约束 1 2 3 4 5 # 删除默认值约束,不保留非空约束 alter table 表名称 modify 字段名 数据类型;# 删除默认值约束,保留非空约束 alter table 表名称 modify 字段名 数据类型 not null ;