一、表结构管理
1. 修改表名
ALTER TABLE 旧表名 RENAME 新表名
2.扩展表结构(增加字段)
ALTER TABLE 表名 ADD 字段名 数据类型;
3.修改字段名,添加唯一健 change
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 [数据类型] [约束];
4.删除字段drop
ALTER TABLE 表名 DROP 字段名;
5.复制表结构
1)方式一:创建新表,导入数据
create table 新表名 like 旧表名; #通过LIKE方法,复制旧表的结构生成新表
insert into 新表名 select * from 旧表名; #再将旧表数据导入新表
2)复制表(直接复制表不能保证原有的表结构)
create table 新表名 (select * from 旧表名);
6.临时表创建
CREATE TEMPORARY TABLE 表名(字段1 数据类型,字段2 数据类型[, ...] [, PRIMARY KEY (主键名)]);
创建方式与创建表完全一致,最大的区别是,临时表只在当前的数据库连接生效,当数据库连接断开或重新连接终端时,该临时表均失效,无法查看。
7.清除表的两种方式比较
方式一:delete清空
delete from 表名;
方式二:truncate清空
truncate table 表名;
两者区别:(1)delete清空属于按照行清空,一行一行进行,效率低,速度慢(对于表数据较多的情况) truncate相当于删除表数据,保留表结构,重新创建一个与原表结构相同的表
(2)当数据表中有自增型约束字段时,delete清除表数据后,在插入数据时,自增字段的数值会接着被删除表数据的最后一个自增数,计数。(eg:被删除表数据最后一行id(自增),为10,再创建时,该id从11开始)。truncate清空后,自增型字段会从1开始计数
二、登录用户管理
1.查看用户密码信息
用户信息存放在 mysql
数据库下的 user
表(MySQL 服务下存在一个系统自带的 mysql 数据库)。
use mysql ;
show tables;
经常使用的查看密码信息的命令:
能看到密码信息:是经过加密后的密码信息
select user,host,authentication_string from user;
2.登录用户增加
明文密码创建用户格式:
create user '用户名'@'主机' identified by '密码'
加密密码创建用户 :
SELECT PASSWORD('密码'); #先获取加密的密码
CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '加密的密码';
3.登录用户用户名更改
RENAME USER '旧的用户名'@'旧的主机地址' TO '新的用户名'@'新的主机地址';
4.删除登录用户
drop user '用户名'@'登录地址';
5.查看当前登录用户
select user();
6.修改用户密码
普通用户只有修改自身密码的权限
明文密码修改:
set password = password ('新密码');
root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。
set password for '用户'@'登录地址' =password ('密码');
7.root密码的忘记后的修改找回方法
该操作必须是在数据库本机且为root用户,才可进行
1)第一步:添加跳过的初始配置
vim /etc/my.cnf
skip-grant-tables
2) 第二步:重启数据库服务 ,修改数据库用户表中root密码
systemctl restart mysql.service
mysql
mysql> UPDATE mysql.user SET AUTHENTICATION_STRING = PASSWORD('123123') where user='root';
mysql> flush privileges; #刷新数据库
mysql> quit #退出
3)第三步:登录测试新密码
mysql -u root -p123123
4)第四步:撤销添加的免密码认证设置,重启数据库服务
#删除配置文件中的配置,之后重启服务。
注意:最后再把/etc/my.conf 配置文件里的skip-grant-tables 删除,并重启mysql服务。
vim /etc/my.cnf
systemctl restart mysqld.service
三、管理用户登录权限
常见的用户权限
权限 | 权限说明 | 权限级别 |
CREATE | 创建数据库、表或索引的权限 | 数据库、表或索引 |
DROP | 删除数据库或表的权限 | 数据库或表 |
GRANT OPTION | 赋予权限选项 | 数据库或表 |
REFERENCES | 引用权限 | 数据库或表 |
ALTER | 更改表的权限 | 数据表 |
DELETE | 删除表数据的权限 | 数据表 |
INDEX | 操作索引的权限 | 数据表 |
INSERT | 添加表数据的权限 | 数据表 |
SELECT | 查询表数据的权限 | 数据表 |
UPDATE | 更新表数据的权限 | 数据表 |
CREATE VIEW | 创建视图的权限 | 视图 |
SHOW VIEW | 查看视图的权限 | 视图 |
ALTER ROUTINE | 更改存储过程的权限 | 存储过程 |
CREATE ROUTINE | 创建存储过程的权限 | 存储过程 |
EXECUTE | 执行存储过程权限 | 存储过程 |
FILE | 服务器主机文件的访问权限 | 文件管理 |
CREATE TEMPORARY TABLES | 创建临时表的权限 | 服务器管理 |
LOCK TABLES | 锁表的权限 | 服务器管理 |
CREATE USER | 创建用户的权限 | 服务器管理 |
RELOAD | 执行 flush privileges, refresh, reload 等刷新命令的权限 | 服务器管理 |
PROCESS | 查看进程的权限 | 服务器管理 |
REPLICATION CLIENT | 查看主从服务器状态的权限 | 服务器管理 |
REPLICATION SLAVE | 主从复制的权限 | 服务器管理 |
SHOW DATABASES | 查看数据库的权限 | 服务器管理 |
SHOW DATABASES | 查看数据库的权限 | 服务器管理 |
SUPER | 超级权限 | 服务器管理 |
ALL [PRIVILEGES] | 所有权限 | |
USAGE | 没有任何权限 |
1.查看用户已有的权限
SHOW GRANTS; #查看当前用户(自己)的权限
SHOW GRANTS FOR 用户名@来源地址; #查看其他用户的权限
2.授权操作
1) 对存在用户进行授权
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'来源地址' [IDENTIFIED BY '密码'];
权限列表: 用于列出授权使用的各种数据库操作,以逗号进行分隔如"select, insert,update"。 使用"all"表示所有权限(实际上部分权限仍无法使用,只包括大部分权限),可授权执行任何操作。
数据库名.表名: 用于指定授权操作的数据库和表的名称,其中可以使用通配符*。 例如,使用"mysql.*" 表示授权操作的对象为mysql数据库中的所有表。 '用户名'@'来源地址': 用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。 来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址。
IDENTIFIED BY: 用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略"IDENTIFIED BY"部分,则用户的密码将为空。
2)对不存在的用户进行创建并授权
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'来源地址' IDENTIFIED BY '密码';
3.撤销用户权限
revoke 权限列表/ALL on 库名.表名 from '用户名'@'来源地址';
四、总结
1.用户管理操作
create user 'username'@'address' identified by 'password'; #创建用户
select user,host,authentication_string from mysql.user; #查看用户信息
rename user old_user to new_user; #修改用户名
drop user '用户名'@'来源地址'; #删除用户
set password = password('XXXX'); #修改当前登录用户的密码
set password for '用户名'@'来源地址' = password('XXXX'); #修改其他用户的密码
select user (); #查看当前登录用户和来源地址
###忘记root用户密码的解决方法:
修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables
service mysqld restart #重启服务
mysql #免密登陆
update mysql.user set authentication_string=password('新密码') where user='root';
#修改密码 flush privileges; #刷新数据库
2.用户授权操作
grant 权限列表/ALL ON 库名.表名 to 'username'@'address' identified by '密码'; #授予用户权限
show grants; #查看当前用户(自己)的权限
show grants for 'username'@'address'; #查看其他用户的权限
revoke 权限列表/ALL on 库名.表名 from 'username'@'address'; #撤销用户的权限
mysql -u 用户名 -p[密码] -h 目标IP/主机名 -P 端口号 #远程连接mysql