,代码如下 复制代码 root@host # mysql - u root - p密码;
输入密码:* * * * * * *
mysql>使用教程;
数据库修改
mysql>创建表tcount_tbl
,,→(
,,→tutorial_author varchar (40) NOT NULL,
,,→tutorial_count INT
,,→)类型=InnoDB;
查询好,0行影响(0.05秒)
可以使用其他双子座或BDB表类型,但它取决于您的安装,如果它支持这两种类型。
由于项目设计里面,牵扯到了金钱的转移,于是就要用到MYSQL的事务处理,来保证一组处理结果的正确性。用了事务,就不可避免的要牺牲一部分速度,来保证数据的正确性。
只有InnoDB支持事务
事务酸原子性(原子性)、一致性(稳定性),隔离(隔离性),耐用性(可靠性)
1、事务的原子性
一组事务,要么成功,要么撤回。
2、稳定性
有非法数据(外键约束之类),事务撤回。
3、隔离性
事务独立运行。
一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。
事务的100%隔离,需要牺牲速度。
4、可靠性
软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。
可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项决定什么时候吧事务保存到日志里。
开启事务
开始事务或开始
提交事务(关闭事务)
提交
放弃事务(关闭事务)
回滚
折返点
保存点adqoo_1
保存点回滚adqoo_1
发生在折返点adqoo_1之前的事务被提交,之后的被忽略
事务的终止
设置“自动提交“模式
设置自动提交=0
每条SQL都是同一个事务的不同命,令之间由提交或回滚隔开
掉线后,没有承诺的事务都被放弃
事务锁定模式
系统默认:不需要等待某事务结束,可直接查询到结果,但不能再进行修改,删除。
缺点:查询到的结果,可能是已经过期的。
优点:不需要等待某事务结束,可直接查询到结果。
需要用以下模式来设定锁定模式
1,选择……锁定共享模式(共享锁)
查询到的数据,就是数据库在这一时刻的数据(其他已承诺事务的结果,已经反应到这里了)
选择必须等,待某个事务结束后才能执行
更新2,选择……(排它锁)
从表名,例如SELECT * id<200
那么id<200的数据,被查询到的数据,都将不能再进行修改,删除,选择……锁定共享模式操作
一直到此事务结束
共享锁和排它锁的区别:在于是否阻断其他客户发出的选择……锁定共享模式命令
3、插入/更新/删除
所有关联数据都会被锁定,加上排它锁
4、防插入锁
从表名,例如SELECT * id> 200
那么id> 200的记录无法被插入
5、死锁
自动识别死锁
先进来的进程被执行,后来的进程收到出错消息,并按回滚方式回滚
innodb_lock_wait_timeout=n来设置最长等待时间,默认是50秒
事务隔离模式
(会话|全球)设置事务隔离级别
读未提交|读承诺|可重复读| SERIALIZABLE
1、不带会话,全球的命令
只对下一个事务有效
2、设置会话
为当前会话设置隔离模式
3,集全球
为以后新建的所有MYSQL连接设置隔离模式(当前连接不包括在内)
隔离模式
,,读未提交
不隔离选择
其他事务未完成的修改(未提交),其结果也考虑在内
,,读取提交
把其他事务的提交修改考虑在内
同一个事务中,同一选择可能返回不同结果
,,可重复读(默认)
不把其他事务的修改考虑在内,无论其他事务是否用提交命令提交过