insert语句让我学会的两个MySQL函数
我們要保存數據到數據庫,插入數據是必須的,但是在業務中可能會出于某種業務要求,要在數據庫中設計唯一索引;這時如果不小心插入一條業務上已經存在同樣key的數據時,就會出現異常。
大部分的需求要求我們出現唯一鍵沖突時就更新這條數據,這時我們就可以用下面這條MySQL語句了:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE][INTO] tbl_name[PARTITION (partition_name [, partition_name] ...)][(col_name [, col_name] ...)]{VALUES | VALUE} (value_list) [, (value_list)] ...[ON DUPLICATE KEY UPDATE assignment_list]
這個就是MySQL官方的INSERT ... ON DUPLICATE KEY UPDATE語句語法
對于上面的?assignment_list?我們常常這樣寫:(假設a所在列是數據庫中的唯一主鍵)
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)ON DUPLICATE KEY UPDATEb=b,c=c;
但是在業務上,對于b和c列的值并不是所有的數值都是需要更新到數據庫里的,比如說:b列不能為null,為空就不更,c列不能小于0,小于0時就不更新,那么上面的語句我們就必須改改了:
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)ON DUPLICATE KEY UPDATEb= IF(VALUES(b), VALUES(b), b),c= IF(VALUES(c) > 0, VALUES(c), c);
我這次要說的就是這兩個函數if和values
下面就看官網怎么說了:
In an?
INSERT ... ON DUPLICATE KEY UPDATE?statement, you can use the?VALUES(?function in the?col_name)UPDATEclause to refer to column values from the?INSERT?portion of the statement. In other words,?VALUES(?in the?col_name)UPDATE?clause refers to the value of?col_name?that would be inserted, had no duplicate-key conflict occurred. This function is especially useful in multiple-row inserts. The?VALUES()?function is meaningful only in the?ON DUPLICATE KEY UPDATE?clause of?INSERT?statements and returns?NULL
和
If?
expr1?is?TRUE?(?and?expr1?<> 0),?expr1?<> NULLIF()?returns?expr2. Otherwise, it returns?expr3.
對于if函數來說,就是根據條件二選一了,沒啥可說的,
對于values函數來說,只有在on duplicate key update語句里才有意義,而且返回值,是你要插入的數值,而不是已經在數據庫里的數值。
隨便發現了南洋理工的sql教程,很贊:https://www.ntu.edu.sg/home/ehchua/programming/sql/MySQL_Beginner.html
參考
insert語法
if函數
values函數
轉載于:https://www.cnblogs.com/halu126/p/8024379.html
總結
以上是生活随笔為你收集整理的insert语句让我学会的两个MySQL函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python20-Day02
- 下一篇: 熊出没变形记贝丝还会再出现吗?