• Destroy、
    2019-07-24
    结果是:
    +------+
    | name |
    +------+
    | 关羽 |
    | 张飞 |
    +------+

    因为插入关羽这个是第一个事务,虽然没有commit,但是第二个begin数据库会隐式地 COMMIT 第一个事务,第二事务,插入张飞两次,第一次插入成功,第二次插入失败。强制commit,第一次插入的张飞会进行提交。所以结果是关羽和张飞。
    展开

    作者回复: 对的 这个解释也正确

    
     15
  • 许童童
    2019-07-24
    老师你好,能否说一下varchar和nvarchar有什么区别,分别用在什么场景?

    作者回复: 相同点:可变长度,字符类型数据
    不同点:varchar(n)是n个字节,非Unicode字符。(英文字母占1个字节,中文占2个字节)
    而nvarchar(n)是n个字符,Unicode字符。(英文字母或者中文都是占用2个字节)

    举个例子,varchar(10)代表10个字节,所以可以是10个英文字母,也可以是5个汉字。
    而nvarchar(10)代表10个字符,这10个字符可以是10个字母,也可以是10个汉字(英文字母或者中文 都是占用2个字节)

     3
     8
  • 挠头侠
    2019-09-29
    老师 你上述这个例子,第二个begin中,这里不加 commit 得到的结果仍然是 关羽和张飞啊。第二个事务如果要回滚的话不应该没有 “张飞“ 这个名字吗?commit是默认的吗?这点老师还是补充一下吧。

    作者回复: COMMIT这里会进行强制提交,也就是程序员来控制当存在错误的时候,是否进行强制提交。所以第一个张飞会提交成功,数据表的结果是:关羽、张飞。你也可以看下看下第一个留言的同学的解答

    
     2
  • ack
    2019-07-24
    思考题:
    自己想出来是只有关羽一条,因为name是主键,插入两条导致第二个事务回滚。但实际运行后结果是关羽、张飞。不知道是为什么,望老师解答。(mysql的autocommit=1,隔离级别是可重复读)

    作者回复: 如果出现异常,这时强制提交的话, 会将操作成功的进行提交

     2
     2
  • Geek_7777
    2019-08-07
    OLAP可以详细讲一下么?

    作者回复: OLAP更偏数据分析,业务端,比如 Apache Kylin

    
     1
  • 另至
    2019-07-25
    答案是:“关羽”
    根据第十四篇-事务中原子性的描述:要不全部成功要不全部失败。

    第一个事务成功插入“关羽”
    第二个事务,第一条插入“张飞”成功,第二条插入“张飞”失败。
    所以第二个事务整体回滚,一条“张飞”都没插入。
    所以结果只有“关羽”
    展开

    作者回复: 对事务ACID的理解是这样的,不过在程序中是需要自己来控制的,如果遇到了错误,还继续执行COMMIT的话,也会让事务中正确的部分进行提交。所以你可以跑一遍代码,运行结果应该是 关羽,张飞。

    
     1
  • 另至
    2019-07-25
    根据第十四篇-事务,原子性:要不全部成功,要不全部失败。

    作者回复: 原子是这个特点,不过在代码操作的时候,如果在一个事务中遇到的错误,还是可以强制进行COMMIT的,这时会把这个事务中成功执行的部分进行提交。你可以运行下 文章中给到的代码

    
     1
  • 一叶知秋
    2019-07-25
    老师 我也想问个问题。。。
    之前提到过SQL执行的顺序是:FROM > WHERE > GROUP BY > HAVING > SELECT 的字段 > DISTINCT > ORDER BY > LIMIT
    1)既然limit是最后执行的那么为何limit可以避免全表扫描。
    2) 假如select的字段不包含order by字段那么是否在distinct产生的虚拟表上还要添加列?
     1
     1
  • Cue
    2019-07-24
    很详细的答疑,赞

    作者回复: 感谢

    
     1
  • 不似旧日
    2019-11-22
    如果你可以确定结果集只有一条,那么加上LIMIT 1的时候,当找到一条结果的时候就不会继续扫描了,这样会加快查询速度。 多一条少一条效率真真真可以忽略不计
    
    
  • 不似旧日
    2019-11-22
    好复杂哦

    作者回复: 慢慢来

    
    
  • 右耳朵猫咪
    2019-10-23
    请问如何防止很多left join?
    
    
  • 神码也不懂
    2019-08-07
    老师 我问个问题,SQL的执行顺序 1、from 2、join 3、on 4、where 5、group by 6、having 7、select;其中第一步是首先对from子句前连个表执行一个笛卡儿积,生成虚拟表vt1,第二部对vt1应用on筛选器;我的问题是:如果这样的话那是不是笛卡儿积是不是无论怎么优化,只要表连接一定会有笛卡儿积? 麻烦老师有时间的时候帮我解答一下,谢谢老师

    作者回复: 对 但是多张表连接顺序不同,导致的计算量也是不同的,所以即使都会有笛卡尔积,也还是存在个优化问题

    
    
  • 国家一级保护咸鱼
    2019-07-29
    MySQL 5.7 测试是只有一条关羽的数据插入成功,第二个begin隐式提交了第一条,然而第二个事务中途失败回滚了,相当于张飞的数据没有插入成功。
    
    
  • Geek_c76f38
    2019-07-25
    请教一个sql如何在一个表里间隔固定刚修改数据,如每间隔3行将一个字段设置成0?
    
    
  • 苏籍
    2019-07-25
    对于COUNT 这个有些困惑
    1、老师你说,聚簇索引比二级索引信息多?是指的什么信息多,它是怎么导致使用主键索引慢了呢
     1
    
  • 庞鑫华
    2019-07-25
    老师,请问join查询,on后面的条件、连接条件,where后面的条件,数据过滤顺序是怎样的呢?

    作者回复: SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
    FROM player JOIN team ON player.team_id = team.team_id #顺序1
    WHERE height > 1.80 #顺序2
    GROUP BY player.team_id #顺序3
    HAVING num > 2 #顺序4
    ORDER BY num DESC #顺序6
    LIMIT 2 #顺序7

    
    
  • 庞鑫华
    2019-07-25
    老师,能否举例说明一条复杂sql的查询解析过程,包括join操作的
    
    
  • 悟空
    2019-07-25
    太乙真人太太,真开心,哈哈哈。

    作者回复: 哈哈 这时专栏里的一个同学举的例子,我觉得不错,挺好的说明了通配符的使用

    
    
  • Ronnyz
    2019-07-24
    作业:关羽 张飞

    作者回复: 对的 答案正确,是关羽,张飞

    
    
我们在线,来聊聊吧