PHP を使用せずに、またはクエリに明示的に含めることなく、その行が更新されるたびにフィールドを 0 に設定する方法はありますか?
質問する
128 次
4 に答える
1
= 0
テーブルを定義するときにデフォルト値を設定できます。
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 に答える