2015-11-18 2 views
1

Я хочу знать, как я могу определить ограниченный диапазон (max и min) для хранения значений в таблице?Как определить определенный диапазон для хранения значений в базе данных?

Я хочу, чтобы этот диапазон:[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 | 
+----+------+ 

Ну, как я могу ограничить мой таблица для принятия действительных значений (в диапазоне) или перед хранением преобразует их в значение max/min?


Или, если то, что я рассмотрел выше, невозможно, Тогда как я могу показать результат как действительный в диапазоне?

// 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 

ответ

2

Вы можете использовать СНЕСК как это:

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

+0

Кажется хорошо. Только одно: что произойдет, если значение не находится в зоне действия? Он не будет вставляться? – Shafizadeh

+0

@Shafizadeh: - Это вызовет ошибку. Я обновил свой ответ с помощью ссылки Fiddle, демонстрирующей это! –

+0

@ Шафизаде: - Добро пожаловать! –

1

Использование проверочное ограничение сделать это ниже, как:

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) 
) 
+0

Спасибо ....! +1 – Shafizadeh

+0

wlcm приятель ..... –

Смежные вопросы