装驱动、进解释器、连上库
最后一页讲事务:要么全成,要么一件不留。
重 点
connector 一连上就在事务里,所以不 commit 谁也看不见。
知道更多
第 9 章那个 autocommit,在 Python 这边默认是关着的。
最后一页讲事务:要么全成,要么一件不留。
connector 一连上就在事务里,所以不 commit 谁也看不见。
第 9 章那个 autocommit,在 Python 这边默认是关着的。
rollback 撤的是这一整笔,不是最后一句。
第一条本来是好的,被第二条连累,一起撤了回去。
1452 是外码查无此人,第 5 章撞过一次,这里换成 Python 又撞一次。
把两条 INSERT 分成两个 try,结果会怎样?
commit 是分界线,rollback 只往回撤到那儿。
60 留下了,90 撤掉了,分界线就是中间那句 commit。
commit 像存档,rollback 是读档,只能读回最近那一次。
如果中间那句 commit 不写,最后查出来是多少?
跟第三份上机那一题是同一件事,换个角度再看一遍。
rowcount 报了 1,重新连上来一查还是 60,那一笔在关闭时被撤了。
真机上进程被杀掉、网线被拔掉,结果都一样,没提交的一律不算。
为什么数据库要这么设计?
一次连接做三件事,前两件要 commit,第三件不用。
改数据的两句包在一个 try 里,查数据的那句放在外面。
把 SELECT 也塞进 try 不报错,只是没必要,它本来就不会改坏数据。
为什么第一句 DELETE 要单独 commit?
finally 里关连接,不管成没成都关得掉。
finally 里的两句一定跑得到,连接不会因为出错就漏在那儿。
课件里 close 写在 except 里,跑通的那一路反而不关,这是个坑。
不关连接,短时间内看得出问题吗?
自己开一条连接,两句 INSERT 包成一笔,跑完自己关。
自己开连接自己关,前面几题关成什么样都不影响,能连着跑两遍。
两句 INSERT 的顺序不能反,先有课才选得上,反了就撞 1452。
把两句 INSERT 调个个儿,报的是哪个错误号?