大数据教程之《MYSQL数据库》TCL语言和DCL语言

  1. 云栖社区>
  2. 博客>
  3. 正文

大数据教程之《MYSQL数据库》TCL语言和DCL语言

好程序员 2020-05-27 10:14:17 浏览472
展开阅读全文

  好程序员大数据培训分享之《MYSQL数据库》TCL语言和DCL语言:一、TCL语言的操作语法,有时候我们的一个需求(一个任务),可能会涉及到多个DML(增删改)操作。那么这一系列操作, 我们要看成一个整体,不可切割。如在一个员工系统中,某员工A的数据可能会存在多个表中,如基本信息表,业务信息表,邮箱信息表等。当我们想删除此人的所有信息时,除了删除这个人的基本信息外,还应该删除与此人有关的其他所有信息,如邮箱,地址等等。这样的操作会涉及到多个DML语句。那么从开始执行到真正结束,就会构成一个事务(Transaction)。对于事务,我们要保证事务的完整性,不能分割。事务要么成功, 要么撤回(回到执行前),不能执行一部分就终止。
  注意,只有DML操作时,才会涉及到事务。而mysql数据库在执行完每一个DML操作时,会默认commit; 可以使用start transaction来取消自动提交
commit:用于提交,表示事务成功结束。用于确认数据的更改,持久化。
rollback:用于回滚,回退到事务开始前。取消所有的DML操作。
savepoint: 设置事务的保存点,可以回退到指定的保存点。
事务有四个基本特征,简称ACID.
(1) 原子性(Atomicity): 即事务要么成功,要么撤回,不可切割。
(2) 一致性(Consistency):事务开始前和结束后,要保证数据的一致性。如转账案例,转账前账号A和账号B的钱的总数为10000。转账后账号A和账号B的钱的总数应该还是10000;
(3) 隔离性(Isolation):当涉及到多用户操作同一张表时,数据库为会每一个用户开启一个事务。那么当其中一个事务正在进行时,其他事务应该处于等待状态。保证事务之间不会受影响。
(4) 持久性(Durability): 当一个事务被提交后,我们要保证数据库里的数据是永久改变的。即使数据库崩溃了,我们也要保证事务的完整性。
关于事务的隔离性,尤为重要。当多用户(多线程)同时操作同一张表时,如果没有隔离机制,可能会发生以下问题:
脏读:事务A读取了事务B刚刚更新的数据,但是事务B回滚了,这样就导致事务A读取的为脏数据,我们称之为脏读。
如公司某财务人员更新公司入账报表时,在DML语句中的数字后少添加了一个0,但是未提交,然后吃饭,吃饭回来,发现错误,然后更正后做了提交。而在吃饭期间,老板要求秘书查看一下报表,秘书看到的是少个0的数据。这就是脏读。

不可重复读:事务A读取同一条记录两次,但是在两次之间事务B对该条记录进行了修改并提交,导致事务A两次读取的数据不一致。
它和脏读的区别是,脏读是事务A读取了另一个事务B未提交的脏数据,而不可重复读则是事务A读取了事务B提交的数据。
多数情况下,不可重复读并不是问题,因为我们多次查询某个数据时,当然要以最后查询得到的结果为主。但在另一些情况下就有可能发生问题,比如,老板让B和C分别核对事务A操作的数据,结果可能不同,老板是怀疑B呢,还是C呢?

幻读:事务A在修改全表的数据,比如将字段age全部修改为0岁,在未提交时,事务B向表中插入或删除数据,如插入一条age为25岁的数据。这样导致事务A读取的数据与需要修改的数据不一致,就和幻觉一样。
幻读和不可重复读的相同点:都是针对于另外一个已经提交的事务而言。不同点:不可重复读是针对于同一条记录来说的(delete或update 同一条记录),而幻读是针对于一批数据来说的(insert)
事务的隔离机制有以下四种:
1、未提交读(read uncommitted):就是不做隔离控制,可以读到“脏数据”,可能发生不可重复读,也可能出现幻读。
2、提交读(read committed):提交读就是不允许读取事务没有提交的数据。显然这种级别可以避免了脏读问题。但是可能发生不可重复读,幻读。这个隔离级别是大多数数据库(除了mysql)的默认隔离级别。 
3、可重复读(repeatable read):为了避免提交读级别不可重复读的问题,在事务中对符合条件的记录上"排他锁",这样其他事务不能对该事务操作的数据进行修改,可避免不可重复读的问题产生。由于只对操作数据进行上锁的操作,所以当其他事务插入或删除数据时,会出现幻读的问题,此种隔离级别为Mysql默认的隔离级别。
4、序列化(Serializable),在事务中对表上锁,这样在事务结束前,其他事务都不能够对表数据进行操作(包括新增,删除和修改),这样避免了脏读,不可重复读和幻读,是最安全的隔离级别。但是由于该操作是堵塞的,因此会严重影响性能。
相关语法格式如下:
查看数据库的当前隔离机制: select @@tx_isolation;
修改数据库的隔离机制:set transaction isolation level 机制名称 或者是 set tx_isolation='机制名称';
如:set transaction isolation level read uncommitted 或者 set tx_isolation=‘read-uncommitted’;
二、DCL语言的操作语法
(1)创建用户:create user username@ip identified by newPassword;
(2)修改密码:alter user username@ip identified by newPassword;
(3)显示用户的权限:show grants for username@ip;
(4)授权语句:grant 权限1,权限2,...... on databaseName.* to username@ip;
DDL权限名称: create、alter、drop、truncate 、create view 等等
DML权限名称: insert、delete、update
DQL权限名称: select
(5)撤销权限:revoke 权限1,权限2,..... on databaseName.* from username@ip;
(6)删除用户:drop user username;
(7)权限生效语句:flush privileges;

网友评论

登录后评论
0/500
评论
好程序员
+ 关注