MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较
MYSQL 中的|| 與oracle 的concat 含義不同,它的含義是 or?
delete from table where 1=1 and code ='CW1111' and period_wid =2020||04的真正含義是 delete from table where 1=1 and code ='CW1111' and period_wid =2020加上 delete from table where 04 也就是全表掃描。和 delete from table where 1=1 and code ='CW1111' and period_wid =202004 含義不同?
mysql insert插入時實現如果數據表中主鍵重復則更新,沒有重復則插入的四種方法
?
1、replace語句:替換已有的行replace語句是insert語句的一個變種當添加新行時1)如果主鍵值重復,那么覆蓋表中已有的行2)如果沒有主鍵值重復,則插入該行 2、ignoreinsert語句可以使用ignore選項來當insert語句出現錯誤時,不顯示錯誤信息,但是insert語句不執行。insert ignore into 。。。。。 3、可以采用異常抓捕的方式來實現handler,相當于sqlserver中的try catch 4、如果在INSERT語句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后會導致在一個UNIQUE索引或PRIMARY KEY中出現重復值, 則在出現重復值的行執行UPDATE;如果不會導致唯一值列重復的問題,則插入新行。四個方法分步解析:?
操作表test表結構如下?
?
1、replace語法select * from test;現在插入(1,’xiaohong’)數據,發現出現錯誤,錯誤提示(主鍵重復輸入’1’),證明當insert插入相同主鍵時是會報錯的。?
現在我們來replace語句測試一下會不會不報錯,執行成功?
查
詢一下我們的表信息,發現之前的記錄(1,’xiaozhang’)已經被替換成(1,’xiaohong’),?
證明我們插入相同的主鍵信息,replace會替換原有信息。?
replace語法執行和數據庫中主鍵重復的數據會替換原有信息,那么執行不同的信息會有怎么樣的操作呢?(發現執行和數據庫中沒有主鍵重復的數據,則執行插入操作)
2、ignore?
這里我們應用insert ignore執行插入(1,’xiaoplan’),運行成功,但是數據沒有插入到test表中。
insert ignore 和update聯合使用(發現主鍵為’1’的’xiaohong’被更新為’xiaolan’)
運行結果圖?
3、可以采用異常抓捕的方式來實現handler,相當于sqlserver中的try catch?
handler是mysql的自定義異常處理。
這邊我們要實現插入時如果主鍵重復則更新,主鍵不重復則插入的效果,所以我們要先了解主鍵重復的異常是什么,然后抓捕異常,將異常處理類型定義為continue,然后執行我們的update操作?
先找出主鍵重復錯誤的異常編號,標號為’1062’?
直接上代碼
drop procedure if exists test;create procedure test() #創建存儲過程BEGINDECLARE done INT default 0 ; #定義變量#定義主鍵重復異常發生時將done賦值為1;同時異常的處理方式是continue,異常發生繼續執行 DECLARE CONTINUE HANDLER for 1062 SET done=1; #執行插入操作,插入過程中可能發生主鍵重復,如果主鍵重復那么done被賦值為1insert into test(id,name) values(1,'xiaowang'); #如果done的值為1的話,實現更新原有數據if done = 1 then update test set name='xiaowang' where id=1;end if;END執行存儲過程后結果截圖(各位可以嘗試建表操作),功能實現
4、如果在insert語句末尾指定了on duplicate key update
insert into test(id,name) values(1,'如來') on duplicate key update name=values(name); #on duplicate key update 后面加入如果主鍵重復更新的列和更新的值,這里面更新test表的name列,更新的值是values('如來'),但是要寫成values(name).運行截圖,實現將已有數據更新的效果
插入不同數據,如果主鍵不同,則插入
?
看一下主鍵相同情況是否可以更新多列,(可以執行)?
?
?
MySQL根據表注釋查找對應的表
?SELECT table_name ,TABLE_COMMENT,COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULTFROM INFORMATION_SCHEMA.COLUMNS //INFORMATION_SCHEMA.TABLES?WHERE table_name LIKE 'tbl_name'[AND table_schema = 'db_name']常用Select table_name ,TABLE_COMMENT from INFORMATION_SCHEMA.TABLES Where `TABLE_NAME` like 'S_XM_MAPPING'hive -mysql 日期比較
SELECT CASE WHEN '2020-01-01' >= '2020-01' AND '2020-01-31' < '2020-02' THEN 'T' ELSE 'F' ENDSELECT CASE WHEN '20200101' >= '202001' AND '20200131' < '202002' THEN 'T' ELSE 'F' ENDSELECT CASE WHEN 20200101 >= 202001 AND 20200131 < 202002 THEN 'T' ELSE 'F' END'結果分別是TTF?
總結
以上是生活随笔為你收集整理的MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CM常用语句
- 下一篇: kettle环境变量/kettle.pr