MySQL插入 更新資料時,要求不重複

2022-10-04 00:30:20 字數 1894 閱讀 8505

一、插入資料時

當插入資料時,要求資料表的某一列(比如name)不重複,語法如下:

insert

into

table (field1, field2, fieldn) select

'field1',

'field2',

'fieldn

'from

dual

where

notexists

(

select

field

from

table

where

field =?

)

注意:dual就是固定的引數,不是某乙個表的名字!!!可以參考:insert not exists的問題

實戰:

insert

into

user

(id, `name`, age)

select

11, "lisi", 45

from

dual

where

notexists (select `name` from

user

where `name`="lisi");

由於user表中,之前就有 name = "lisi",所以執行上面的sql語句之後,結果為:

顯示為,並沒有執行插入操作。

二、更新操作時

更新操作時,如下:

update

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>

至於為啥要在 where中用兩層 select,是因為:

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子...