13.4、案例
将学生学号为“1631607101”的C语言成绩加10分,如果发现加10分后的成绩大于100分,则执行事务的回滚操作,否则提交事务。
mysql> select * from t_score1; +----------+------------+-----------+-------+ | score_id | stu_id | course_id | grade | +----------+------------+-----------+-------+ | 1001 | 1631607101 | 16610001 | 92 | | 1002 | 1631607101 | 16610002 | 75 | | 1003 | 1631607101 | 16610003 | 88 | | 1004 | 1631607102 | 16610004 | 100 | | 1005 | 1631607102 | 16610005 | 99 | | 1006 | 1631611104 | 16610003 | 76 | | 1007 | 1631611104 | 16610004 | 107 | | 1008 | 1631611104 | 16610005 | 97 | | 1009 | 1631611104 | 16610006 | 90 | | 1010 | 1731613106 | 16610009 | 75 | | 1011 | 1731613107 | 16610009 | 97 | | 1012 | 1631601101 | 16610002 | 86 | | 1013 | 1631601102 | 16610003 | 85 | | 1014 | 1631601103 | 16610004 | 90 | | 1015 | 1631601104 | 16610005 | 80 | | 1016 | 1631601105 | 16610006 | 79 | | 1017 | 1631601105 | 16610007 | 98 | | 1018 | 1631607101 | 16610001 | NULL | +----------+------------+-----------+-------+ 18 rows in set (0.00 sec) mysql> begin; mysql> update t_score1 set grade=grade+10 where stu_id="1631607101"; mysql> select * from t_score1 where stu_id="1631607101" and grade < 100; +----------+------------+-----------+-------+ | score_id | stu_id | course_id | grade | +----------+------------+-----------+-------+ | 1002 | 1631607101 | 16610002 | 85 | | 1003 | 1631607101 | 16610003 | 98 | +----------+------------+-----------+-------+ --回滚后,数据就没有改变 mysql> rollback; --如果这里换成commit; 代表事务结束。 mysql> select * from t_score1 where stu_id="1631607101" and grade < 100; +----------+------------+-----------+-------+ | score_id | stu_id | course_id | grade | +----------+------------+-----------+-------+ | 1001 | 1631607101 | 16610001 | 92 | | 1002 | 1631607101 | 16610002 | 75 | | 1003 | 1631607101 | 16610003 | 88 | +----------+------------+-----------+-------+ 3 rows in set (0.00 sec)
--执行commit;后,就无法回到commit之前,代表事务结束。 mysql> commit;
十四、用户管理与权限管理
语法:CREATE USER user_name [IDENTIFIED BY [PASSWORD] “user_password”]
user_name:创建的账号名,完整的账号由用户名和主机组成,形式为
'user_name'@'localhost'
。
14.1、用户管理
14.1.1、创建用户
1、默认所以主机
create user test_1 identified by '123456';
2、 指定用户的主机为localhost
create user test1@localhost identified by '123456';
14.1.2、修改用户密码
14.1.3、删除用户
drop user user_name;
14.2、权限管理
14.2.1、授予权限
GRANT priv_type[(column_list)] ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password'] [,user IDENTIFIED BY [PASSWORD] 'password'] ... [WITH with-option['with-option']...]
priv_type:授权类型(ALL表示所有的权限)。
column_list:指定列名,表示权限作用在那些列上,不指定作用于整个表。
database.table:指定数据库和表。
user:用户名,完整的账号由用户名和主机组成,形式为
'user_name'@'localhost'
。IDENTIFIED BY:指定为账户设置密码,已经存在的用户可不指定密码。
password:表示用户新密码,已经存在的用户可以不用密码。
WITH with-option[‘with-option’]:指定授权选项。
1、使用grant语句创建用户soft,密码为123456,并授予对所有数据库所有表的select,insert,update权限和转授权限(grant option)
grant select,insert,update on *.* to soft@localhost identified by '123456' with grant option;
2、使用grant语句,并授予对所有数据库所有表的select,insert,update权限
grant select,insert,update on *.* to soft;
14.2.1.1、查看权限
语法:GRANT priv_type[(column_list)] ON [object_type]{table_name | * | *.* | db_name.*} FROM user [,user]...
select * from user;
普遍用户也可执行
show grants for ‘user'@'host';
14.2.2、撤销权限
revoke select,insert,update on *.* from soft@localhost;
十五、备份、恢复数据库
15.1、备份
语法:
E:\db_backup>mysqldump Usage: mysqldump [OPTIONS] database [tables] OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] OR mysqldump [OPTIONS] --all-databases [OPTIONS] For more options, use mysqldump --help
备份一个数据库
MYSQLDUMP -u user_name -p db_name table_name1 table_name2... > backup_name.sql
user_name:用户名
db_name:选择备份的数据库
table_name:选择备份数据库里面的表
backup_name:生成的备份文件名
备份多个数据库
MYSQLDUMP -u user_name -p --databases db_name1 db_name2... > backup_name.sql
备份所有数据库
MYSQLDUMP -u user_name -p --all-databases > backup_name.sql
15.2、恢复
MYSQL -u user_name -p [db_name] < backup_name.sql
db_name:用来指定数据库的名称,指定数据库时,还原该数据库下的表。不指定时,表示还原备份文件中的所有数据。
十六、日志
MySQL四种日志类型:错误日志、查询日志、慢查询日志、二进制日志
四种类型的日志对应的文件,保存在mysql数据目录data目录下,可以使用
show variables
命令查看错误日志默认开启,其它三种日志默认打开。
16.1、错误日志
错误日志记录着 MySQL服务启停及运行时的报错信息, 如:运行的sql语句语法错误。
错误日志功能默认开启且无法被禁止。
查看“错误日志”是否开启
--使用show variables命令后可以看到日志文件存放位置:D:\APP\Pro_Software\MYSQL\data\ show variables like "%log_erro%"; +----------------------------+----------------------------------------------------+ | Variable_name | Value | +----------------------------+----------------------------------------------------+ | binlog_error_action | ABORT_SERVER | | log_error | D:\APP\Pro_Software\MYSQL\data\DESKTOP-T92IEER.err | | log_error_services | log_filter_internal; log_sink_internal | | log_error_suppression_list | | | log_error_verbosity | 2 | +----------------------------+----------------------------------------------------+ 5 rows in set, 1 warning (0.00 sec)
16.2、查询日志
查询日志记录着MySQL服务器的启停信息、客户端连接信息、增删查改数据记录的SQL语句。
查询日志默认关闭,由于查询日志会记录用户的所有操作,故如若开启查询日志,会占用较多磁盘空间,查询日志建议定义清理,以节省磁盘空间。
查看“查询日志”是否开启
--使用show variables命令后可以看到日志文件存放位置:D:\APP\Pro_Software\MYSQL\data\ mysql> show variables like "%general%"; +------------------+----------------------------------------------------+ | Variable_name | Value | +------------------+----------------------------------------------------+ | general_log | OFF | | general_log_file | D:\APP\Pro_Software\MYSQL\data\DESKTOP-T92IEER.log | +------------------+----------------------------------------------------+ 2 rows in set, 1 warning (0.00 sec) --开启 mysql> set global general_log = ON; Query OK, 0 rows affected (0.00 sec) --关闭 mysql> set global general_log = OFF; Query OK, 0 rows affected (0.00 sec)
16.3、慢查询日志
慢日志记录执行时间超过指定时间的各种操作。
通过分析慢查询日志能有效定位MySQL各指令执行的性能瓶颈。
查看“慢查询日志”是否开启
--使用show variables命令后可以看到日志文件存放位置:D:\APP\Pro_Software\MYSQL\data\ mysql> show variables like "%slow%"; +-----------------------------+---------------------------------------------------------+ | Variable_name | Value | +-----------------------------+---------------------------------------------------------+ | log_slow_admin_statements | OFF | | log_slow_extra | OFF | | log_slow_replica_statements | OFF | | log_slow_slave_statements | OFF | | slow_launch_time | 2 | | slow_query_log | OFF | | slow_query_log_file | D:\APP\Pro_Software\MYSQL\data\DESKTOP-T92IEER-slow.log | +-----------------------------+---------------------------------------------------------+ 7 rows in set, 1 warning (0.01 sec) --开启 mysql> set global slow_query_log=on; Query OK, 0 rows affected (0.00 sec) --关闭 mysql> set global slow_query_log = off; Query OK, 0 rows affected (0.00 sec) --测试 mysql> select sleep(10); +-----------+ | sleep(10) | +-----------+ | 0 | +-----------+ 1 row in set (10.01 sec)
16.4、二进制日志
二级制日志以二进制的形式记录数据库除了查询以外的各种操作也叫变更日志。主要用于记录修改数据或有可能引起数据改变的MySQL语句,并且记录着语句发生时间、执行时长、操作的数据等。
查看“二进制日志”是否开启
--使用show variables命令后可以看到日志文件存放位置:D:\APP\Pro_Software\MYSQL\data\ mysql> show variables like "%log_bin%"; +---------------------------------+---------------------------------------------+ | Variable_name | Value | +---------------------------------+---------------------------------------------+ | log_bin | ON | | log_bin_basename | D:\APP\Pro_Software\MYSQL\data\binlog | | log_bin_index | D:\APP\Pro_Software\MYSQL\data\binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+---------------------------------------------+ 6 rows in set, 1 warning (0.00 sec) --查询binlog文件名 mysql> show master status; +---------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+-------------------+ | binlog.000119 | 57106 | | | | +---------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
总结
我是秋意临,欢迎大家一键三连、加入云社区
我们下期再见(⊙o⊙)!!!