0

PHP を使用せずに、またはクエリに明示的に含めることなく、その行が更新されるたびにフィールドを 0 に設定する方法はありますか?

4

4 に答える 4

1

= 0テーブルを定義するときにデフォルト値を設定できます。

CREATE TABLE構文から:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
   .../...
column_definition:
    data_type [NOT NULL | NULL] [DEFAULT default_value]

まあ言ってみれば

CREATE TABLE test (
a INT,
b INT DEFAULT 0);

もしそうなら

INSERT INTO test (a) values (1),(2),(3);

それから私たちが

SELECT * FROM test

私たちは得るだろう

a  |  b
1     0
2     0
3     0

SQLFiddleで動作することを確認してください

于 2013-03-22T22:47:34.467 に答える
1

トリガーを使用します。

CREATE TRIGGER set_zero AFTER UPDATE ON table_name
   FOR EACH ROW
      UPDATE table_name SET col_name=0 WHERE xyz=cond_xyz;
;

テストしませんでした。

于 2013-03-22T22:52:49.960 に答える
0

これは最初は奇妙な要求のように見えましたが、実際にはMySQLで可能です。0そのフィールドのデフォルトとして指定すると、指定されてREPLACE INTOいないが既存の列にデフォルトを使用するという事実を利用できます。

INSERT INTO t1 (id, numToZero, value) VALUES (1, 1345, 'value');

後で更新する場合:

REPLACE INTO t1 (id, value) VALUES (1, 'new value');

これにより(1, 0, 'new value')、新しい行を作成せずに生成されます。

于 2013-03-22T22:50:53.170 に答える
0

トリガーは正しい方法ですが、セバスチャンはそれをすべて間違っていました。

トリガー内で実行するのではなく、トリガーに渡されるレコードUPDATEに値を割り当てるだけです。newさらに、トリガーである必要があります( AFTERトリガーでのレコードBEFORE UPDATEへの変更は保持されないため)。new

CREATE TRIGGER set_zero 
  BEFORE UPDATE ON table_name
  FOR EACH ROW
BEGIN
  SET new.col_name = 0; 
END;

デフォルト値が定義されている場合でも、挿入中にゼロ以外の値を指定できることに注意してください。それも望まない場合は、挿入トリガーも必要です

SQLFiddle の例を次に示します: http://sqlfiddle.com/#!2/cebe82/1

于 2013-11-03T09:57:48.877 に答える