mysql - 如何定义在数据库中存储值的特定范围?

标签 mysql size

我想知道,如何定义一个有限的范围(最大值和最小值)来存储表中的值?

我想要这个范围: [min: -99 , max: 999]

还有一些例子:

CREATE TABLE MyTable(
   id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   code INT(11) NOT NULL
)

INSERT INTO MyTable (id,code)
             VALUES (1, 42),
             VALUES (2, -332),
             VALUES (3, -83),
             VALUES (4, 44324),
             VALUES (5, 0),
             VALUES (6, 999);

所以,我想要这个输出:

// MyTable
+----+------+
| id | code |
+----+------+
| 1  | 42   |
| 2  | -99  |
| 3  | -83  |
| 4  | 999  |
| 5  | 0    |
| 6  | 999  |
+----+------+

那么,如何限制我的表只接受有效(在范围内)值或在存储之前将它们转换为最大/最小值?


或者,如果我在上面考虑的是不可能的,那么我怎样才能显示结果在范围内有效?

// MyTable
+----+------+
| id | code |
+----+------+
| 1  | 42   |
| 2  | -332 |
| 3  | -83  |
| 4  | 44324|
| 5  | 0    |
| 6  | 999  |
+----+------+

我想要这样的查询:

SELECT id, IF(LENGTH(code) > 999, '999', code)) AS FilteredCode FROM MyTable
// also I can not implement to filter negative values (-99) in my query 

最佳答案

您可以像这样使用 CHECK 约束:

CONSTRAINT code_fk CHECK (code  BETWEEN -99 AND 999)

因此您的表将创建为:

CREATE TABLE MyTable(
   id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
   code INT(11) NOT NULL,
   CONSTRAINT code_fk CHECK (code  BETWEEN -99 AND 999)
)

参见 SQL FIDDLE DEMO

关于mysql - 如何定义在数据库中存储值的特定范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33778399/

相关文章:

mysql - EclipseLink:连接池和 native 查询

mysql - 我如何知道MYSQL中特定数据库的数据库大小?

delphi - 在 Delphi TForm 上保存最大化和表单大小

java - 如何设置 Jframe 的宽度、高度?

c++ - PROCESSENTRY32 .dwSize 和 sizeof

php mysql 插入

php - 使用用户输入减去从 sql 中获取的值并将其输出到另一列

mysql - Apache Drill - 查询 HDFS 和 SQL

PHP PDO-MYSQL : How to use database connection across different classes

java - Set.size() 与迭代器中的元素数量不匹配