99% 的人都不知道的 SQL Update 奥秘
不好意思,标题党了。但真是事实!
刚开始玩 SQL 的时候,CRUD 语法背得贼溜。自以为这是 SQL 的全部,天天热心的在网上泡论坛,回答这类问题。似乎会个 Join 都是万人敬仰的事情了。放到今天,让你笑掉大牙。那时,2003 年...
第一份工作,正式的操作 CRUD 了,在 2000 多用户的 MES 中,自信的加入了各种 SQL DML 语句。看着稳稳当当的 MES 系统,自信满满。直到有一天,返聘的退休老工程师(写 VFP + SQL)老王把我叫到办公室。
“这是你写的 Update ?”
"有什么问题吗,王师傅?”
“程序挂起 10 来分钟了...”
"不就是简单的 update 嘛,平时都运行好好的”
“把 Job Kill 掉重跑...”
一晃很多年过去了,提起这个事儿,特别有感受。
或许你以为直接写个 Update 很简单,就是更新数据那么干脆,然而数据库却不愿意这么想。最近我文章中经常会提出一些写 SQL 的注意事项,很多有心的读者会写信问我,为什么不能直接写 Update/Delete/Insert.. From. 大概你们也是这么想的吧。如果没经历过,大概过了 10 年也是这么做了,我在很多老系统代码里经常看到这种写法:
update OrderHeader
set OrderTotal = OrderItemCount * SinglePrice ;
或者
Delete OrderHeader
Where OrderDate< GetUtcDate() - 1000 ;
又或者:
Insert into OrderHeader
SELECT * FROM OrderHeaderStg ;
我先不说原理吧,大家果真认为这 SQL 能用到生产环境去?欢迎留言区讨论。
猜你喜欢:
我们的知识星球,20 个席位,满人就开车,现剩 8 张座位,等你来。