概述
数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:
-
GRANT:授权。
-
ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。
回滚—ROLLBACK
回滚命令使数据库状态回到上次最后提交的状态。其格式为:SQL>ROLLBACK;
-
COMMIT [WORK]:提交。
在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成后才可以看到。
提交数据的方式
提交数据有三种类型:显式提交、隐式提交及自动提交。下面分别说明这三种类型。
显式提交
用COMMIT命令直接完成的提交为显式提交。其格式为:SQL>COMMIT;
隐式提交
用SQL命令间接完成的提交为隐式提交。这些命令是:
ALTER
,AUDIT
,COMMENT
,CONNECT
,CREATE
,DISCONNECT
,DROP
,
EXIT
,GRANT
,NOAUDIT
,QUIT
,REVOKE
,RENAME
。
自动提交
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;
管理用户
1. 添加用户
- 语法:
通配符: % 表示可以在任意主机使用用户登录数据库
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
例如:
CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123';
CREATE USER 'zhangsan'@'%' IDENTIFIED BY '123';
2. 删除用户
- 语法:
DROP USER '用户名'@'主机名';
例如:
DROP USER 'zhangsan'@'localhost';
3. 修改用户密码
- 第一种:
UPDATE USER SET authentication_string = ('新密码') WHERE USER = '用户名';
UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE USER='用户名';
- 第二种:(推荐)
ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
例如:
UPDATE USER SET authentication_string = PASSWORD('abc') WHERE USER = 'zhangsan' AND HOST = '%';
ALTER USER 'zhangsan'@'localhost' IDENTIFIED BY '123123';
ALTER USER zhangsan IDENTIFIED BY '123456';
4. mysql中忘记了root用户的密码
1. cmd -- > net stop mysql 停止mysql服务
* 需要管理员运行该cmd
2. 使用无验证方式启动mysql服务: mysqld --skip-grant-tables
3. 打开新的cmd窗口,直接输入mysql命令,敲回车。就可以登录成功(无验证登录)
4. use mysql;
5. update user set password = password('你的新密码') where user = 'root';
6. 关闭两个窗口
7. 打开任务管理器,手动结束mysqld.exe 的进程
8. 启动mysql服务:net start mysql
9. 使用新密码登录。
权限管理
1. 查询权限
- 语法:
SHOW GRANTS FOR '用户名'@'主机名';
例子:
SHOW GRANTS FOR 'lisi'@'%';
2. 授予权限
- 语法:
all
:授予所有权限。
*.*
:在任意数据库任意表上
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
例子:
-- 给张三用户授予所有权限,在任意数据库任意表上
GRANT ALL ON *.* TO 'zhangsan'@'localhost';
3. 撤销权限
- 语法:
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
例子:
REVOKE UPDATE ON db3.account FROM 'lisi'@'%';