人物
姜承尧
zabbix 监控工具
1. mysql 数据类型
锁 与 事务有关系吗
事务
原子性:事务中的操作要么全部成功,要么全部失败
一致性:数据库从一个一致状态转移到另一个一致状态
隔离性:在事务提交前,一个事务的通常另外一个事务不可见。READ UNCOMMITTED ,READ COMMITTED ,REPEATABLEREAD ,SERIALIZABLE
持久性:事务提交后,数据持久保存。
事务测试
1.打开四个客户端 连接
mysql -h localhost -u root -p
2.查看设置事务的隔离级别
查询当前会话的隔离级别
select @@tx_isolation;
设置客户端1的隔离级别为 读取未提交
set session transaction isolation level read uncommitted;
设置客户端3的隔离级别为 读取提交
set session transaction isolation level read committed;
设置客户端4的隔离级别为 可重复读
set session transaction isolation level repeatable read;
3.所有客户端 开启事务执行查询操作
start transaction ; // 或者 begin 开启事务
select * from blog where id =1 ;
4.客户端2 执行更新操作(还未提交)
update blog set title =‘未提交’ where id =1;
客户端1 ,3 ,4 再次进行查询操作
其中客户端1能够看到修改的数据,客户端3,4不能查询修改的数据。
5.客户端2提交事务 , 客户端1,3,4 再次查询
commit;
客户端1,3 都能看到修改的数据,客户端4查询的数据 看不到修改。
http://blog.csdn.net/fg2006/article/details/6937413
myisam 适合插入选择
6 查询增加锁
select ... lock in share mode;
select ... lock for update;
锁等待时间设置
set global innodb_lock_wait_timeout =2 ;
表的数据 更新 和 删除 会在数据上加锁,锁 增加在索引上,当更新条件不含有索引,则锁加在表上。
7.mysql 自动处理死锁,回滚一个事务,
事务 1
update blog set content ='2' where id ='1';
事务2
update blog set content = '1' where id ='2';
update blog set content ='2' where id ='2';
update blog set content = '1' where id ='1';
select sleep(1);
4.数据类型
4.1使用可满足范围的最小的数据类型,减少磁盘的读写
4.2 varchar 使用额外的字节记录数据的长度
4.3 只分配最小的可用空间
4.4使用无符号整数代理ip地址,inet_aton(),inet_NTOA()
4.5计数器表,update hit_count set cnt = cnt +1 where slot = RAND() *100; 避免更新同一列时串行。