草庐IT

MySQL实战45讲 17

17|如何正确地显示随机消息?场景:从一个单词表中随机选出三个单词。表的建表语句和初始数据的命令如下,在这个表里面插入了10000行记录:CREATETABLE`words`(`id`int(11)NOTNULLAUTO_INCREMENT,`word`varchar(64)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDB;delimiter;;createprocedureidata()begindeclareiint;seti=0;whilei内存临时表用orderbyrand()来实现这个逻辑,随机排序取前3个。selectwordfromwordso

MySQL实战45讲 17

17|如何正确地显示随机消息?场景:从一个单词表中随机选出三个单词。表的建表语句和初始数据的命令如下,在这个表里面插入了10000行记录:CREATETABLE`words`(`id`int(11)NOTNULLAUTO_INCREMENT,`word`varchar(64)DEFAULTNULL,PRIMARYKEY(`id`))ENGINE=InnoDB;delimiter;;createprocedureidata()begindeclareiint;seti=0;whilei内存临时表用orderbyrand()来实现这个逻辑,随机排序取前3个。selectwordfromwordso

MySQL实战45讲 16

16|“orderby”是怎么工作的?以市民表为例,假设要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。这个表的部分定义:CREATETABLE`t`(`id`int(11)NOTNULL,`city`varchar(16)NOTNULL,`name`varchar(16)NOTNULL,`age`int(11)NOTNULL,`addr`varchar(128)DEFAULTNULL,PRIMARYKEY(`id`),KEY`city`(`city`))ENGINE=InnoDB;SQL语句可以这么写:selectcity,name,agefromtwher

MySQL实战45讲 16

16|“orderby”是怎么工作的?以市民表为例,假设要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。这个表的部分定义:CREATETABLE`t`(`id`int(11)NOTNULL,`city`varchar(16)NOTNULL,`name`varchar(16)NOTNULL,`age`int(11)NOTNULL,`addr`varchar(128)DEFAULTNULL,PRIMARYKEY(`id`),KEY`city`(`city`))ENGINE=InnoDB;SQL语句可以这么写:selectcity,name,agefromtwher

MySQL实战45讲 20

20|幻读是什么,幻读有什么问题?建表和初始化语句如下CREATETABLE`t`(`id`int(11)NOTNULL,`c`int(11)DEFAULTNULL,`d`int(11)DEFAULTNULL,PRIMARYKEY(`id`),KEY`c`(`c`))ENGINE=InnoDB;insertintotvalues(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);这个表除了主键id外,还有一个索引c,初始化语句在表中插入了6行数据。Q:下面的语句序列,是怎么加锁的,加的锁又是什么时候释放的呢?begin;sel

MySQL实战45讲 20

20|幻读是什么,幻读有什么问题?建表和初始化语句如下CREATETABLE`t`(`id`int(11)NOTNULL,`c`int(11)DEFAULTNULL,`d`int(11)DEFAULTNULL,PRIMARYKEY(`id`),KEY`c`(`c`))ENGINE=InnoDB;insertintotvalues(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);这个表除了主键id外,还有一个索引c,初始化语句在表中插入了6行数据。Q:下面的语句序列,是怎么加锁的,加的锁又是什么时候释放的呢?begin;sel

MySQL实战45讲 18

18|为什么这些SQL语句逻辑相同,性能却差异巨大?在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。三个案例案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段,先忽略其他字段。这个表的建表语句如下:CREATETABLE`tradelog`(`id`int(11)NOTNULL,`tradeid`varchar(32)DEFAULTNULL,`operator`int(11)D

MySQL实战45讲 18

18|为什么这些SQL语句逻辑相同,性能却差异巨大?在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句。对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大。三个案例案例一:条件字段函数操作假设你现在维护了一个交易系统,其中交易记录表tradelog包含交易流水号(tradeid)、交易员id(operator)、交易时间(t_modified)等字段,先忽略其他字段。这个表的建表语句如下:CREATETABLE`tradelog`(`id`int(11)NOTNULL,`tradeid`varchar(32)DEFAULTNULL,`operator`int(11)D

MySQL实战45讲 15

15|答疑文章(一):日志和索引相关问题日志相关binlog(归档日志)和redolog(重做日志)配合崩溃恢复,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?Q:这个图不是一个update语句的执行流程吗,怎么还会调用commit语句?A:两个“commit”的概念“commit语句”是指MySQL语法中,用于提交一个事务的命令。一般跟begin/starttransaction配对使用。而图中用到的这个“commit步骤”,指的是事务提交过程中的一个小步骤,也是最后一步。当这个步骤执行完成后,这个事务就提交完成了。“commit语句”执行的时候,会包含“com

MySQL实战45讲 15

15|答疑文章(一):日志和索引相关问题日志相关binlog(归档日志)和redolog(重做日志)配合崩溃恢复,在两阶段提交的不同瞬间,MySQL如果发生异常重启,是怎么保证数据完整性的?Q:这个图不是一个update语句的执行流程吗,怎么还会调用commit语句?A:两个“commit”的概念“commit语句”是指MySQL语法中,用于提交一个事务的命令。一般跟begin/starttransaction配对使用。而图中用到的这个“commit步骤”,指的是事务提交过程中的一个小步骤,也是最后一步。当这个步骤执行完成后,这个事务就提交完成了。“commit语句”执行的时候,会包含“com