2017-08-07 4 views
0

列に挿入された数字が正(つまりゼロより大きい)であることを確認する必要がありますが、その方法を見つけることができませんでした。 decimal type's documentationでもNumeric type overviewでも、データベースの列にこのような制約を設定できる解決策(またはトリック)はありません。MariaDB列に正の数だけを許可する

unsigned修飾語がありますが、値がの負の(つまりゼロより小さい)でなく、符号なしの列の有効な値としてゼロになっているとしか言えません。

これをデータベーススキーマレベルで実施する方法はありますか? もしそうでなければ、私は自明にコードにルールを適用できますが、私はスキーマに型情報を明示的に保存したいと思います。

+0

ほとんどのデータベースでは、このためのCREATE文があります。 MySQLまたはMariaDBはその機能をサポートしていませんので回避策としてトリガを使用する必要があります - > https://stackoverflow.com/questions/9734920/can-a-mysql-trigger-simulate-a-check-constraint –

+0

@RaymondNijlandありがとう。 – Mael

+0

MariaDBはCHECK制約をサポートしています。 – elenst

答えて

2

MariaDB 10.2がCHECK constraintsをサポートします。

MariaDB [test]> CREATE TABLE t1 (i INT CHECK(i>0)); 
Query OK, 0 rows affected (1.04 sec) 

MariaDB [test]> INSERT INTO t1 VALUES (1); 
Query OK, 1 row affected (0.08 sec) 

MariaDB [test]> INSERT INTO t1 VALUES (0); 
ERROR 4025 (23000): CONSTRAINT `i` failed for `test`.`t1` 
MariaDB [test]> INSERT INTO t1 VALUES (-1); 
ERROR 4025 (23000): CONSTRAINT `i` failed for `test`.`t1` 
MariaDB [test]> 
MariaDB [test]> SELECT @@version; 
+----------------+ 
| @@version  | 
+----------------+ 
| 10.2.6-MariaDB | 
+----------------+ 
1 row in set (0.00 sec) 
関連する問題