七 MySql資料庫實現更新不重覆記錄

2021-08-20 20:26:46 字數 1683 閱讀 9175

(一)主要物件導向

在mysql中更新記錄的時候,要求某個欄位的值保證唯一

(二)案例

1.系統使用者表

create

table

`sys_user` (

`id`

int(11) not

null auto_increment comment '主鍵',

`group_id`

int(11) default

null comment '使用者組id',

`username`

varchar(50) default

null comment '使用者名稱',

`password`

varchar(32) default

null comment '密碼',

`nickname`

varchar(50) default

null comment '別名',

`update_time`

timestamp

notnull

default

current_timestamp

onupdate

current_timestamp comment '更新時間',

`create_time` datetime default

null,

primary

key (`id`),

unique

key`username_unique` (`username`),

key`fk_sys_group_id` (`group_id`),

constraint

`fk_sys_group_id`

foreign

key (`group_id`) references

`sys_group` (`id`)

) engine=innodb auto_increment=7

default charset=utf8;

2.要求

更新的username欄位和nickname字段不能重複

3.實現

where id = #

test="username != null">

and not exists(select 1 from (select 1 from sys_user where username=# and id !=#)a)

if>

test="nickname != null">

and not exists(select 1 from (select 1 from sys_user where nickname=# and id !=#)a)

if>

備註:

問題:為什麼加了兩層的「select 1 from *」?

原因:

mysql的特性:若需要修改某個表,則不能再拿這個表作為子查詢的條件(同乙個sql語句中,其實可以理解,保證不會讀到髒資料)。這句話再通俗點說,修改的表和後面子查詢的表是同一張表的話,將被判定異常。

我們通過巢狀一層,讓mysql識別後面子查詢的表是「a」,而不是「sys_user」,那麼mysql就不會判定異常!

mysql程式更新 更新MySQL資料庫

當搞亂mysql的檔案系統時,你必須停止mysql伺服器.為避免在現場計算機上停機,請使用具有same version of mysql伺服器的備份 虛擬機器.當backup mysql伺服器停止時,將表 我假設.frm,myi等?複製到 var lib mysql backup db backup...

Mysql 資料庫更新錯誤

語句 update test setage 5 where name 王莽 顧名思義就是把王莽的年齡改為5,但結果很無奈 影響行數為0,怎麼回事,語法沒錯,都沒問題啊 隨便改了改了,將name 的兩個引號去掉,結果卻無意間成功了 但是使用圖形介面更改時,結果更讓人迷惑 生成的 是 update we...

資料庫系統概論 資料更新 MySQL實現

insert int table name values constant insert int table name 關聯式資料庫管理系統會在執行輸入語句時檢查所插元組是否破壞表中已定義的完整性約束,包括實體完整性 參照完整性和使用者定義完整性等 格式 update table name set ...