我有一張桌子需要兩個不同的當前時間。首先,我有一個用于插入 actionnumber、msgSentFrom_F_ID、msgSentTo_M_ID 和 sentDate 的插入程序。第二,更新respondDate的更新程序。我的問題是,當我更新respondDate 時,sentDate 將更新到我更新respondDate 的同一時間。我哪里做錯了?(我的目的是我希望 sendDate 是我插入的當前時間,以及我更新 responseDate 的另一個當前時間。)
CREATE TABLE IF NOT EXISTS actions (
actionnumber INT AUTO_INCREMENT PRIMARY KEY,
msgSentFrom_F_ID INT,
msgSentTo_M_ID INT,
sentDate TIMESTAMP,
respondDate TIMESTAMP NULL,
FOREIGN KEY (msgSentFrom_F_ID)
REFERENCES femaleUsers(femaleuserId)
FOREIGN KEY (msgSentTo_M_ID)
REFERENCES maleUsers(maleuserId)
);
DELIMITER //
create procedure (param_F_ID INT,param_M_ID INT,Sdate TIMESTAMP)
BEGIN
INSERT INTO actions (msgSentFrom_F_ID, msgSentTo_M_ID, sentDate)
VALUES (param_F_ID,param_M_ID,Now());
END; //
DELIMITER ;
CALL insert_actions ('5','5',NOW());
DELIMITER //
create procedure update_respondDate (param_ActionNum INT,
param_respondDate TIMESTAMP)
BEGIN
UPDATE actions set respondDate = param_respondDate
WHERE actionnumber = param_ActionNum;
END; //
DELIMITER ;
CALL update_respondDate('6',NOW());
uj5u.com熱心網友回復:
聽起來您已explicit_defaults_for_timestamp禁用系統變數。檔案解釋了這個結果:
如果
explicit_defaults_for_timestamp系統變數被禁用,則第一個 TIMESTAMP 列同時具有 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 如果兩者都沒有明確指定。要禁止第一個 TIMESTAMP 列的自動屬性,請使用以下策略之一:
啟用
explicit_defaults_for_timestamp系統變數。在這種情況下,指定自動初始化和更新的 DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 子句可用,但除非明確包含在列定義中,否則不會分配給任何 TIMESTAMP 列。或者,如果
explicit_defaults_for_timestamp禁用,請執行以下任一操作:
使用指定常量默認值的 DEFAULT 子句定義列。
指定 NULL 屬性。這也會導致列允許 NULL 值,這意味著您不能通過將列設定為 NULL 來分配當前時間戳。分配 NULL 會將列設定為 NULL,而不是當前時間戳。要分配當前時間戳,請將列設定為 CURRENT_TIMESTAMP 或同義詞,例如 NOW()。
由于sentDate是表中的第一TIMESTAMP列,因此每當您對該行進行任何更改時,它都會自動設定為當前時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/460673.html
上一篇:使用PHP從URL解碼資料
下一篇:UNIONALL定義表
