2

システムから取得する必要があり、それ以外の場合は挿入クエリまたは更新クエリで提供できないタイムスタンプ制約をmysqlに設定することは可能ですか?

制約でテーブルが更新されないようにすることは可能ですか? mysql ユーザーが GRANT を使用してテーブルを更新しないようにする方法は理解していますが、ルートを含むユーザーに関係なくレコードのタイムスタンプを保証することが私の目標であるため、私の場合は制約が優先される場合があります。

4

2 に答える 2

0

できることは、トリガーINSERTUPDATE使用して値を上書きすることです

したがって、クエリが何を設定しても、目的のタイムスタンプフィールドの値は常にシステム時刻になります。

DELIMITER ;;

CREATE TRIGGER before_yourtable_insert 
BEFORE INSERT ON yourtable
FOR EACH ROW
BEGIN
    SET NEW.datefield := CURRENT_TIMESTAMP;
END;;

CREATE TRIGGER before_yourtable_update 
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
    SET NEW.datefield := CURRENT_TIMESTAMP;
END;;

DELIMITER ;

編集1: 一度設定されたシステム時刻が後で更新されるのを実際に防ぎたいと思ったことに気づきました。UPDATEトリガーを少し変更して、このジョブを実行します。

SET NEW.datefield := OLD.datefield更新のたびに値を古い値にリセットします

CREATE TRIGGER before_yourtable_update 
BEFORE UPDATE ON yourtable
FOR EACH ROW
BEGIN
    SET NEW.datefield := OLD.datefield;
END;;
于 2012-11-28T17:53:09.870 に答える
0

これを試してください:MYSQLには、デフォルトのCURRENT_TIMESTAMPを持つテーブルに単一のフィールドを持つという制約があります挿入クエリの場合、これは機能します

Create table foo
(

logged_date  TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

ただし、更新の場合は、アプリケーション コードを介して、triggersまたはアプリケーション コード内で別の方法で処理する必要があります。

于 2012-11-28T17:47:37.147 に答える