mysql

mysql连接执行语句流程
1.1连接管理和安全性
连接服务器时,服务端会对其认证。
客服端连接,服务器会缓存线程。

1.2优化和执行
解析查询,缓存

事务 原子性,一致性,隔离性,持久性
START TRANSACTION
COMMIT
ROLLBACK

隔离级别 READ COMMITTED|REPEATABLE READ|SERIALIZABLE|uncommit]
设置mysql的隔离级别:set session transaction isolation level 设置事务隔离级别
查看当前事物级别:SELECT @@tx_isolation;
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
设置mysql的隔离级别:set session transaction isolation level 设置事务隔离级别
查看设置结果:SELECT @@tx_isolation;

死锁
死锁检测和死锁超时机制,
InnoDB 将最少行级排他锁进行事务回滚,重新执行死锁事务

事务日志(自动提交)

常用数据库都支持事务,那么事务是如何实现的呢?为什么即便在事务执行过程中发生宕机,数据库依然能够保证事务的正常呢?

Mysql实现事务是通过事务日志来实现的。关于事务日志,有以下几个点需要记住。
1,事务日志是Innodb特有的日志。
2,使用事务日志,可以提高事务的执行效率。怎么提高呢?存储引擎在修改数据时,只修改数据在内存中的拷贝,再把修改行为记录到事务日志中。事务日志是保存在磁盘的,所以一旦修改数据的行为写入到事务日志,就不用担心丢失了。这样,每次修改数据,就不用每次都把修改的数据写回到磁盘。所以,使用事务日志,能够提高事务的执行效率。
3,修改事务的行为写入到磁盘上的事务日志时,效率会低吗?不会。事务日志采用的是追加的方式,是在一小块磁盘区域的连续写入,不存在频繁移动磁头的问题,所以,写入事务日志的效率也不低。
4,内存中被修改的数据,什么时间写回到磁盘呢?内存中被修改的数据,会在后台慢慢写回到磁盘,尽量不影响正常的业务。


mysql> show variables like "AUTOCOMMIT";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.01 sec)


在事务中混合使用存储引擎:
事务由存储引擎实现,InnoDB和MYISAM表,联合使用,无法回滚。大多数事务的实现不是简单的

mysql也支持 LOCK UNLOCK,这是在服务层实现。

多版本并发控制:通过保存数据在某个时间的快照实现、加二列,创建的时间,删除的时间

查询表的相关信息 show tables status like "user"

间隙锁 mvcc实现 repeatable read


select语句

case语句
mysql> select count(*),case when mac_address >=1 then "123" when mac_address<5 then "222" else "ok" end as aaa from device group by aaa ;
+----------+-----+
| count(*) | aaa |
+----------+-----+
|   462838 | 123 |
|   615767 | 222 |
+----------+-----+
2 rows in set (0.66 sec)


concat函数
mysql> select concat(ddns_name,mac_address)  from device where mac_address=3;
+-------------------------------+
| concat(ddns_name,mac_address) |
+-------------------------------+
| kzbbEsdfsdfas      |
+-------------------------------+
1 row in set (0.00 sec)

rand函数
mysql> select ddns_name,mac_address from device order by rand() limit 5;
+-----------+-------------------+
| ddns_name | mac_address       |
+-----------+-------------------+
| dlcd  |3 |
| skae  |4 |                       
| du59  |4 |
| z6f   |4 |
| jf95  |1 |
+-----------+---------------    +
5 rows in set (1.89 sec)

coalesceh函数
mysql> select coalesce(used,111) as a,count(*) from device where mac_address > "asf" group by a;
+------+----------+
| a    | count(*) |
+------+----------+
|    1 |    35717 |
|  111 |    99441 |
+------+----------+
2 rows in set (0.50 sec)

order by语句
select used,ddns_name from device order by used,ddns_name desc;
空值排序
select enna,sal,comm from (select enna,case when comm is null when o else 1 end as is_null from emp)x order by is_null,comm

 

substr函数
mysql> select used,ddns_name from device order by substr(ddns_name,length(ddns_name)-4) desc limit 3;
+------+-----------+
| used | ddns_name |
+------+-----------+
|    1 | fffff   |
|    1 | ffffe   |
|    1 | ffffd   |
+------+-----------+


使用视图
mysql> create view V as select mac_address,ddns_name from device limit 3
    -> ;
Query OK, 0 rows affected (0.02 sec)

mysql> select * from V;
+-------------------+-----------+
| mac_address       | ddns_name |
+-------------------+-----------+
| sadfadsf          | sdf58     |
|sdfasdf            | asdfe     |
| sdfasdf           | aasdf     |
+-------------------+-----------+
3 rows in set (0.00 sec)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值