日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MYSQL || 的BUG // MYSQL 不同库自增id的问题 //MySQL根据表注释查找对应的表 //hive -mysql 日期比较

發布時間:2025/7/14 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的自定義異常處理。

定義異常處理語法DECLARE handler_type HANDLER FOR condition_value sp_statement語法解析handler_type:為異常的處理方式,也就是當發生異常時怎么處理,有三個參數1)exit ,表示遇到異常馬上退出2)continue ,表示遇到異常不處理,繼續執行sql代碼3)undo ,mysql不支持,是一個回滾操作condition_value:表示錯誤類型1)SQLSTATE [VALUE] sqlstate_value 為包含5個字符的字符串錯誤值2)SQLWARNING 匹配所有以01開頭的SQLSTATE錯誤代碼3)NOT FOUND 匹配所有以02開頭的SQLSTATE錯誤代碼4)SQLEXCEPTION 匹配所有沒有被SQLWARNING或NOT FOUND捕獲的SQLSTATE錯誤代碼5)mysql_error_code 匹配數值類型錯誤代碼condition_name:標志定義錯誤的名稱

這邊我們要實現插入時如果主鍵重復則更新,主鍵不重復則插入的效果,所以我們要先了解主鍵重復的異常是什么,然后抓捕異常,將異常處理類型定義為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 日期比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。