UNSIGNED
и UNIQUE
являются несвязанными атрибутами.
UNSIGNED
означает, что в это поле вы будете помещать только неотрицательные числа.Это относится к большинству вещей, которые хранятся в базах данных - счетчики, длины и т. Д. INT SIGNED
дает диапазон около +/- 2 миллиардов.INT UNSIGNED
может содержать от 0 до около 4 млрд.
UNIQUE
подразумевает две вещи: «ограничение уникальности» и «индекс».
Если вставить строку с одинаковым значениемдля этого столбца INSERT
получит ошибку, потому что вы нарушили «ограничение уникальности».Вы используете такие, чтобы ловить ошибки программирования.Если у вас есть таблица с одной строкой для каждого виджета, удобно получить ошибку, если вы попытаетесь вставить вторую строку для идентичного виджета.
INDEX
- это ключевой инструмент для выполнения базы данных.Быстрее.Он обеспечивает быстрый способ поиска виджета по его идентификатору.
Пока я занимаюсь этим, давайте обсудим NULL
против NOT NULL
.Думайте о NULL
как о «дополнительном значении» для столбца.Это может означать «еще не установлено», «неизвестное значение» или любое другое, основанное на вашей бизнес-логике.С другой стороны, обычно столбец должен быть предоставлен (опять же, на основе бизнес-логики), поэтому вы обычно хотите объявить столбец как NOT NULL
.
Можно (идолжен) быть ровно один PRIMARY KEY
для таблицы.Он однозначно идентифицирует каждую строку.
A PRIMARY KEY
- это UNIQUE
ключ - это INDEX
(он же KEY
).Все они структурированы как BTrees
(в MySQL).
Возвращаясь к вашему вопросу:
правильно, я добавил эти KEY телефон (телефон), статус KEY (статус) строки до конца кода?
Синтаксис правильный.Их полезность спорна.Если вы никогда не скажете WHERE phone = '...'
, тогда KEY(phone)
бесполезен.Иметь это не вредит (кроме траты дискового пространства и замедления INSERTs
небольшого количества).