2017-08-07 77 views
0

我需要確保插入列的數字是正數(即大於零),但無法找到解決方法。 decimal type's documentationNumeric type overview都沒有提供一個解決方案(或一個技巧),它允許我在數據庫列上設置這樣的約束。只允許MariaDB列中的正數

我知道存在unsigned修飾符,但它只是表示該值可能不是(即小於零),並且將無符號列的值留爲零。

有沒有辦法在數據庫模式級別強制執行此操作? 如果沒有,我可以在代碼中平凡的執行規則,但是我想在模式中保持類型信息的顯式。

+0

大多數數據庫爲此在CREATE語句中提供了CHECK。 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)