私はMySQLのテーブルを持っています。私はテーブルの列の値を定数の整数に設定したいと思います。これどうやってするの?MySQLテーブルの定数カラムの値
答えて
残念ながら、MySQLはSQLチェック制約をサポートしていません。互換性の理由から、 をDDLクエリで定義することはできますが、ちょうど無視された です。 BEFORE INSERTおよびBEFORE UPDATEトリガー を作成して、 のデータ要件が満たされていない場合にエラーを引き起こすか、フィールドをデフォルト値に設定することができます。
ここでは、MYSQL TRIGGER
を経由する方法を見つけることができます。
サンプルテーブル:
DROP TABLE IF EXISTS `constantvaluetable`;
CREATE TABLE `constantvaluetable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`constValue` int(11) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB;
トリガ:
DROP TRIGGER IF EXISTS trigger_const_check;
delimiter //
CREATE TRIGGER trigger_const_check BEFORE INSERT ON constantvaluetable
FOR EACH ROW
BEGIN
IF NEW.constValue <> 71 THEN
SIGNAL SQLSTATE '45000' SET message_text ='Only allowed value is 71';
END IF;
END //
delimiter ;
試験:
INSERT INTO constantvaluetable(constValue) VALUES(71);
INSERT INTO constantvaluetable(constValue) VALUES(66);
結果:
最初のinsert文は成功します。
2番目のinsert文は失敗します。そして、次のエラーメッセージが表示されます:
を[のErr] 1644 - のみ許容値は71
です。注意:はあなたのCONSTANT値が71
であると仮定します。
設定時にテーブルにCHECK
という制約を設定するだけです。このような何かは、彼らが他のDBMSで行うようしかし、MySQLので、CHECK制約は、同じように動作していない、ほとんどのDBMSで、あなたが必要とするすべて
CREATE someTable
(
someValue int(4) CHECK (someValue = 4)
)
です。状況はやや難解です。答えはここにあるようです:https://stackoverflow.com/a/14248038/5386243
本当にやりたいですか?
それはあなただけで一定の値をチェックしたいあなたのケースでは、より複雑な条件のために使用することができるので、71のトリガー溶液は、汎用的なアプローチですが、以下は、
Select Field1, field2, field3 , 5 as `ConstantField` from myTable
私が持っている問題は、より複雑で、行が参照テーブルへの二重外部キーとして制約されています。定数は、マスターリストを参照するn番目のテーブルへの参照です。 – 1N5818
まだ、 'JOIN refTable ON(refTable.id = ConstantField)'もうまくいくはずです。あるテーブルが定数値を参照している場合、ONステートメントは冗長であり、破棄することができます。 –
を十分ではないだろうデータベースロジックに近づくことができ、それに許容値を含むテーブルに外部キーを追加することができます。
create table tbl_checkconst (constraintvalue int primary key);
insert into tbl_checkconst values (71);
alter table yourtable
add constraint fk_yourtable_constcheck
foreign key (column1)
references tbl_chechconst (constraintvalue);
それは(それがインデックスを追加する必要がありますので)実際にいくつかのオーバーヘッドが追加されますが、データベース・ロジックであなたの制約を表現するだろう、とあなたの定数は、通常は、このようにデータベースモデルに設計された意味を持っています(現在は1つのみの値ですが)、あなた(および正しい権限を持つすべてのユーザー)は、トリガーコードを変更せずにtbl_checkconst
表に値を追加することで、より多くの値を簡単に追加できます。あなたのコメントの一つでは、あなたが「参照テーブルに二重の外部キー」を作成しようとしていると述べた。
は、私はそれを追加しましたもう一つの理由は、私はあなたが本当に実際に外部キーを探していると思うことです。私はそれを正しく理解していれば、あなたがforeign key
の列を結合することができますので、あなたは、複合外部キーを使用することがあります:
alter table yourtable
add constraint fk_yourtable_col1col2
foreign key (column1, column2)
references your_reference_table (refcolumn1, refcolumn2);
- 1. MySQLのカラム変数テーブル
- 2. 複数のテーブルのMySQL結合カラム
- 3. mysql:カラム値を別のテーブルのカラムの値に置き換えます。
- 4. csvファイルのカラム値とmysqlテーブルのカラム値を比較する方法
- 5. ロックMySQLのテーブルのカラム
- 6. テーブルが異なるカラムの特定の値の計算数
- 7. 複数の値を持つMySQLカラム
- 8. MySQLのストアド関数 - 動的/変数のテーブルとカラムの名前
- 9. Mysqlテーブルの1つのカラムで複数の値を検索する
- 10. mysql-tableのカラムのオーバーフロー値
- 11. MYSQL別のテーブルの値を1つのカラムに挿入する
- 12. MySQLカラム定義
- 13. mysqlデータベースの既存のテーブル名としてカラム値を渡す
- 14. カラム値に基づいてmysqlテーブルから特定の行を選択
- 15. NULL値のMySQL生成カラム
- 16. 22%のデクリメントmysqlカラム値
- 17. テーブルのFromとToカラムの指定番号の確認mysql
- 18. MySQLは、カラム名、値
- 19. 他のテーブルのカラムから値を含むMySQLのテーブルを作成
- 20. デフォルト値を持つMySQLデータベースのテーブルにカラムを追加
- 21. mysqlの別のテーブルからカラムをインポート
- 22. 多数のカラムを持つmysqlテーブルの最適なアプローチ
- 23. テーブル名とカラム名を指定せずにMysqlのすべてのテーブルの値を検索するには?
- 24. デフォルトで1のMySQL Alterテーブル追加カラム
- 25. 既存のテーブルのカラムに値を設定し、そのカラムのデフォルト値を設定するためのmysql構文
- 26. mySQLの合計カラム数!
- 27. 特定の値のシーケンスMySqlテーブル
- 28. MySQLが特定の行のカラム値を取得する
- 29. 特定の値のJSON文字列でMySQLカラムを検索
- 30. MySQL:特定の値のカラムを更新する
?そのレコードを挿入して、定数値で指定された値を置き換えますか? – 1000111
いいえ、私はその値を許可するように制約したいので、例外などがほしいと思うでしょう。 – 1N5818