我需要确保插入到列中的数字是正数(即大于零),但无法找到方法。 decimal
type's documentation和Numeric type overview都没有提供允许我在数据库列上设置此类约束的解决方案(或技巧)。
我知道有unsigned
修饰符,但它只表示该值可能不是负(即小于零),并且将零作为无符号列的有效值。
有没有办法在数据库架构级别强制执行此操作? 如果没有,我可以在代码中轻松强制执行规则,但我希望在模式中明确保留类型信息。
答案 0 :(得分: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)