表欄位:id(主鍵), ip, user, password, create_time, update_time
索引名1, acc , 欄位:name,user 型別Unique,方法BTREE
索引名2,name, 欄位 name, 型別 Normal,方法BTREE
INSERT INTO account (
account.`ip`,
account.`user`,
account.`password`,
account.create_time,
account.update_time
)
VALUES
(
192.168.1.103',
'test1',
'm3443',
NOW(),
NOW()
)
ON DUPLICATE KEY UPDATE
account.`ip`=VALUES(account.`ip`),
account.`user`=VALUES(account.`user`),
account.`password`=VALUES(account.`password`),
account.update_time=NOW()
我想要根據ip和user這兩個Unique欄位, 有相同的IP和user時,就進行更新,沒有就插入新的資料.
ON DUPLICATE KEY UPDATE,我的理解是,ON DUPLICATE KEY UPDATE前面的命令遇到UNIQUE欄位而出錯時,執行后面的命令,也就是把ip,user,password,update_time更新到資料庫中,
但結果是,create_time這個欄位也更新成最近的時間了,不知道怎么回事,向各位高手請教下
uj5u.com熱心網友回復:
表結構的問題吧?show create table account 看看腳本,應該是設定了 on update 的默認值
uj5u.com熱心網友回復:
按照你的方法操作了一遍
`time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
是不是可以翻譯成, timestamp型別, 默認NULL, 值為空的時候自動更新為當前時間??
我以為在navcat里面 設計表選項里可以看到表結構了 ,沒想到還要輸入命令才能看這樣的表結構

那,是不是修改成`time` timestamp DEFAULT NULL就好了?
navcat是不是不能做這樣的表結構修改?只能新建一個表了?
uj5u.com熱心網友回復:
default null 是指 insert 的時候如果不為欄位指定值,則設定為NULLON UPDATE CURRENT_TIMESTAMP 是批更新的時候,如果沒有為欄位指定值,則更新為 CURRENT_TIMESTAMP
可以直接改表結構, 界面操作沒試過,一般都直接用 sql sql 的
uj5u.com熱心網友回復:
create_time不要加update屬性轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/106491.html
標籤:MySQL
