我需要确保插入到列中的数字为正(即大于零),但是找不到解决方法。 decimal type's documentationNumeric type overview均未提供允许我在数据库列上设置此类约束的解决方案(或技巧)。

我知道有一个unsigned修饰符,但它只表示该值可能不为负(即小于零),并且将零保留为无符号列的有效值。

有没有办法在数据库架构级别上强制执行此操作?
如果没有,我可以在代码中简单地执行该规则,但是我想在模式中保持类型信息的明确。

最佳答案

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)

关于mysql - MariaDB列中仅允许正数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45547884/

10-16 23:41