一见bug误终生
程序猿不易,总是会遇到各种各样奇葩的bug,这是篇总结前段时间,我踩的坑,太痛苦了,就因为一个小bug花费几个小时,耽误项目进度,很难受,以此为鉴,可以攒经验。
,高下立判,本文适合小白入门,大神勿念。
SQL
SQL里面用的update和delete最坑,数据不可逆转,一个关键字的错误使用就完了。
对于update一般是在where条件里面,先测试一条数据再放开运行,也有坑,千万要注意使用主键约束测试,这里划重点:主键唯一性,哪怕表中有相同意义的字段也要判断是否可行。先来看一段正确的语句:
然后如果测试数据一不小心换成
CU_zgdh1 = 'P2004055'
这就是大坑了,本来是想测试一条数据看看SQL语句是否跑通,结果就是表中原有的数据全部变成了
CU_id = BillNo = CU_zgdh1= ‘P2004055’
说多了都是血泪啊,salSalesOrder是数据来源母表,上万数据的还原。题外话;我是通过之前数据库的备份恢复到之前的数据,然后再结合之前恰巧的select出的所有主键和一个唯一字段锁定当天遗失的数据
经过一整天的数据重新输入,结果还是缺了不少
误删库
有句梗叫:程序猿删库跑路。
开玩笑,笑归笑哈,实际上对于实习生来说,误删库屡见不鲜,我太难了!!!
对于简单的数据库一般是使用事务回滚和启动备份,但是对于数据庞大,数据量上百万,乃至上亿的这是灾难性的。我是暂无什么好方法了,以后碰到了再说(保佑读者和笔者不要遇到!!!)
SQL语法
一般的update
update 表名 set 字段 = 值 where +条件约束\指定
一、更新
--这里的适用于MySQL
update salSalesOrder set (填对应字段,比如CU_zgh1)(字段对应数据,比如R2004307-02)
(字段对应数据,比如R2004307-03)(字段对应数据,比如R2004307-04) where BillNo in (需要更新主键)
--基本适用所有的数据库(SQL是最先的数据库,MySQL、Orcal、NoSQL等都是来源于SQL的,也就是SQL语句本身就适用所有数据库)
--update salSalesOrder set CU_zgdh1 = '', CU_daihao = '', CU_jx = '', CU_fengl = '' ,CU_fya = '',CU_fx = '', CU_fjpzhi = '', CU_gzhjing = ''
,CU_djipp = '' ,CU_djigg = '' ,CU_mdc = '', CU_wd = '' ,CU_zyxz = '',CU_wkbt = '', CU_rkz = '', CU_pdppai = '' , CU_ylc = '' , CU_qjk = '' ,
CU_zx = '', CU_zcz = '',CU_ylzt = '' ,CU_zc = '',CU_jj = '',CU_zz = '',CU_bzq = '',CU_zcpp='',CU_gyx=''
,CU_bzch = '',CU_wgys='',CU_wh='', CU_tssming = '', CU_zzdjq = '',
CU_jhdd = '', CU_cdfs='',CU_zdyq='',CU_mffs='', CU_lzq = '',CU_xyq='', CU_gyx = '',CU_fym= '',CU_ckrj='', CU_rkrj = '',
CU_qt = '' where BillNo = 'R2004307-02'
带查询功能的update
update 表名 set 字段 = (select 字段 from 任意表名 where +条件/(条件))
update T8DYFJ.dbo.CU_bomzz set CU_bomzz.CU_BOMKeyId =
(select BomSubMatInfo.BOMKeyId from
T8DYFJ.dbo.BomSubMatInfo,salSalesOrderDetail where BomSubMatInfo.BOMKeyId=salSalesOrderDetail.CU_BOM
and salSalesOrderDetail.MaterialId like '8%' and salSalesOrderDetail.BillNo = 'R2001004-03')