一、插入資料時
當插入資料時,要求資料表的某一列(比如name)不重複,語法如下:
insert注意:dual就是固定的引數,不是某乙個表的名字!!!可以參考:insert not exists的問題into
table (field1, field2, fieldn) select
'field1',
'field2',
'fieldn
'from
dual
where
notexists
(
select
field
from
table
where
field =?
)
實戰:
insert由於user表中,之前就有 name = "lisi",所以執行上面的sql語句之後,結果為:into
user
(id, `name`, age)
select
11, "lisi", 45
from
dual
where
notexists (select `name` from
user
where `name`="lisi");
顯示為,並沒有執行插入操作。
二、更新操作時
更新操作時,如下:
update至於為啥要在 where中用兩層 select,是因為:user
<
set>
<
if test="name !=
null">
`name`
= #,
if>
<
if test="age !=
null">
age
= #
if>
set>
where id = #
<
if test="name !=
null">
andnot
exists (select
1from (select
1from
user
where `name`=#) a)
if>
mysql的特性:若需要修改某個表,則不能再拿這個表作為子查詢的條件(同乙個sql語句中,其實可以理解,保證不會讀到髒資料)。這句話再通俗點說,修改的表和後面子查詢的表是同一張表的話,將被判定異常。
我們通過巢狀一層,讓mysql識別後面子查詢的表是「a」,而不是「user」表,那麼mysql就不會判定異常!
注:select 1 from 中的1是一常量(可以為任意數值),查到的所有行的值都是它,但從效率上來說,1>***>*,因為不用查字典表。
從作用上來說:
select三者是沒有差別的,都是檢視是否有記錄,一般是作條件查詢用的,結果:1from
table
;select ***(表集合中的任意一行) from
table
;select
*from
table
插入資料時更新時間
通常表中會有乙個create date 建立日期的字段,其它資料庫均有預設值的選項。mysql也有預設值timestamp,但在mysql中,不僅是插入就算是修改也會更新timestamp的值!這樣一來,就不是建立日期了,當作更新日期來使用比較好!因此在mysql中要記錄建立日期還得使用dateti...
Mysql 併發插入 存在不插入,存在更新操作
我們遇到挺多這樣的問題,當使用者併發提交資料,重複提交資料。導致資料重複,或者 mysql sql 報錯。幾種解決辦法,對應到幾種業務場景。這個應該是最常見的處理方式,是醉不安全的,因為一旦有併發其實完全防止不了,來看看偽 entity entity service findbyid 10 if n...
c 更新mysql資料 MySQL插入更新刪除資料
資料插入 插入完整的行 insert into customers values null,pep e.lapew 100 main street los angeles ca 90046 usa null null 此例子插入乙個新客戶到customers表。儲存到每個表列中的資料在values子...