1

私はmysqlを使用しています。テーブルには2つの列がdate_addedあり、もう1つは ですdate_updated。データが入力されdate_addedた日付が記録され、更新された日付が列date_updatedを変更せずに記録されるようにすることは可能ですかdate_added

4

2 に答える 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 に答える