私はmysqlを使用しています。テーブルには2つの列がdate_added
あり、もう1つは ですdate_updated
。データが入力されdate_added
た日付が記録され、更新された日付が列date_updated
を変更せずに記録されるようにすることは可能ですかdate_added
2 に答える
2
5.6 より前では、MySQL はTIMESTAMP
自動初期化する 1 つのフィールドのみをサポートしていました。これは「作成済み」列または「更新済み」列のいずれかですが、両方を同時に指定することはできません。
自動初期化「作成済み」列の場合は、次を使用します。
CREATE TABLE ...
date_added TIMESTAMP DEFAULT CURRENT_TIMESTAMP
自動初期化の「更新された」列の場合は、次を使用します
CREATE TABLE ...
date_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
残念ながら、両方を持つことはできません。両方を自動初期化したい場合は、トリガーを使用する必要があります。
CREATE TABLE ...
date_added TIMESTAMP, -- doesn't auto-initialize
date_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
次に、フィールドTRIGGER
を更新するように設定します。date_added
DROP TRIGGER IF EXISTS tablename_before_insert;
DELIMITER //
CREATE
DEFINER = CURRENT_USER
TRIGGER tablename_before_insert
BEFORE INSERT ON
tablename -- insert your table name here
FOR EACH ROW
BEGIN
IF IFNULL(NEW.date_added, 0) <= 0
THEN
SET NEW.date_added = NOW();
END IF;
END;
//
の
IF IFNULL(NEW.date_added, 0) <= 0
date_added
句は、必要に応じて値を上書きできるようにするためにあります。
于 2012-08-03T15:48:11.080 に答える
0
もちろん。クエリで正しい列名を使用するだけです。INSERT を実行するときは、date_added
フィールドに入力します。UPDATEを行うときは、date_updated
フィールドを更新するだけです。クエリまたはトリガーで明示的に指定しない限り、もう一方は影響を受けません。しかし、それは明らかにあなたの管理下にあります。
于 2012-08-03T15:43:01.237 に答える