mysql — default null, но значение notNULL. Структура таблиц, значение по умолчанию
Вопрос задан
Изменён 11 дней назад
Просмотрен 923 раза
вопрос возник из комментов отсюда подсчет количества.
Есть такие таблички
mysql> describe usopt; +---------------+---------------------+------+-----+------------------------------------------+ | Field | Type | Null | Key | Default | +---------------+---------------------+------+-----+------------------------------------------+ | uid_usopt | int(10) unsigned | NO | PRI | NULL | | usname | varchar(25) | NO | | NULL | | skinid_usopt | int(10) unsigned | NO | | 1 | mysql> describe skin; +--------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------+----------------+ | skinid | int(10) unsigned | NO | PRI | NULL | auto_increment | | skin_name | varchar(32) | NO | | NULL | | | uid_skinfrom | int(10) unsigned | NO | MUL | NULL | | | skin_way | varchar(32) | NO | | NULL | | | date_skin | int(10) unsigned | NO | MUL | NULL | |
Обратите внимание на то что у
+--------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+------------------+------+-----+---------+----------------+ | skinid | int(10) unsigned | NO | PRI | NULL | auto_increment | | uid_usopt | int(10) unsigned | NO | PRI | NULL |
| usname | varchar(25) | NO | | NULL
У меня по умолчанию NULL в тех полях где значение не может быть NULL Зачем такая бредовая структура таблиц? Ответ очень прост: Для того чтобы при попытке вставки пустого значения (например значения пустой переменной) в таблицу, вставка не происходила и получалась ошибка.
Я задавал значения NOT NULL. NULL по умолчания я специально НЕ ставил. Это субд, которой я пользуюсь, ставит NULL.
Кстати я к этому случайно додумался ранее (летом2016), когда задавал тут вопросы.
Не все то что кажется на первый взгляд абсолютным бредом, является таковым.
ВНИМАНИЕ! вопрос: Правильно ли я сделал? Я считаю что это действительно сильно! Или нет?
- mysql
- sql
- null
Речь идет о разных, на прямую между собой не связанных вещах. Если было указано, что колонка NOT NULL, никто же не мешает задать значение по умолчанию. Если оно не указано, то значение по умолчанию — NULL. Для уникальных ключей смысла устанавливать значение по умолчанию, понятно, смысла нет.
Дополню ответ. Делать столбец NOT NULL и ставить значение по умолчанию не всегда целесообразно.
Как здесь:
+---------------+---------------------+------+-----+------------------------------------------+ | Field | Type | Null | Key | Default | +---------------+---------------------+------+-----+------------------------------------------+ | skinid_usopt | int(10) unsigned | NO | | 1
Если по этому столбцу будет поиск, то лучше сделать его NULLABLE
и создать по нему индекс. В индексе значения NULL
не сохраняются, поэтому он будет небольшим и эффективным.
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
mysql — Если поле PRIMARY KEY, то NOT NULL не нужен?
Есть поле, являющееся первичным ключом. Это поле не должно содержать «нулевых» значений.
Есть ли необходимость в NOT NULL
, или достаточно только PRIMARY KEY
?
8
У уникальных полей есть одна забавная особенность. Уникальность определяется равенством. Но NULL
не равен NULL
! Поэтому значения NULL
можно добавлять в столбец с проверкой на уникальность в любом количестве строк!
А первичный ключ должен уникально идентифицировать каждую строку по равенству значения этого ключа. Потому значение NULL
для первичного ключа не имеет смысла. При сравнении равенством он просто никогда не совпадёт ни с какой строкой.
Это распространяется на все SQL-совместимые базы данных.
Но процитирую определение первичного ключа с dev.mysql.com:
A set of columns—and by implication, the index based on this set of columns—that can uniquely identify every row in a table.
As such, it must be a unique index that does not contain any NULL
values.
Набор столбцов и индекс по этому набору столбцов, способный однозначно идентифицироать каждую строку в таблице. Это уникальный индекс, не содержащий значений
NULL
.
Так что да, PRIMARY KEY
требует, чтобы его столбцы были NOT NULL
.
И в зависимости от того, каким синтаксисом определяется первичный ключ, указание NOT NULL
может быть обязательным или необязательным. В MySQL (по всей видимости) обязательно всегда.
Синтаксис определения первичного ключа я встречал трёх видов:
Прямо при определении типа колонки, добавив
PRIMARY KEY
к её типу:CREATE TABLE things ( id integer PRIMARY KEY )
- Указание
NOT NULL
может быть необязательным. Но в MySQL, судя по примерам (документация не особо помогла), обязательно. В PostgreSQL же нет: там считается, чтоPRIMARY KEY
в типе столбца включает в себяNOT NULL
.
- Указание
При определении первичного ключа в составе определения таблицы (но не её :столбцов)
CREATE TABLE things ( id integer NOT NULL, PRIMARY KEY(id) )
NOT NULL
обязательно, иначе упоминание колонки вPRIMARY KEY
будет конфликтовать с уже объявленным.
При определении первичного ключа на уже созданной таблице отдельно.
NOT NULL
обязательно, т. к. таблица уже определена.
5
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Значения MySQL NULL — IS NULL и IS NOT NULL
❮ Предыдущий Далее ❯
Что такое значение NULL?
Поле со значением NULL является полем без значения.
Если поле в таблице является необязательным, можно вставить новую запись или обновить запись, не добавляя значение в это поле. Тогда поле будет сохраняется со значением NULL.
Примечание: Значение NULL отличается от нулевого значения или поля, которое содержит пробелы. Поле со значением NULL — это поле, оставленное пустым. при создании записи!
Как проверить значения NULL?
Невозможно проверить значения NULL с помощью операторов сравнения, таких как =, < или <>.
Нам придется использовать IS NULL
и IS NOT NULL вместо
операторов.
IS NULL Синтаксис
SELECT имена_столбцов
FROM имя_таблицы
ГДЕ имя_столбца IS NULL;
IS NOT NULL Синтаксис
SELECT имена столбцов
ОТ имя_таблицы
ГДЕ имя_столбца НЕ НУЛЕВОЕ;
Демонстрационная база данных
Ниже приведена выборка из таблицы «Клиенты» в образце «Борей» база данных:
CustomerID | ИмяКлиента | Контактное имя | Адрес | Город | Почтовый индекс | Страна |
---|---|---|---|---|---|---|
1 | Альфред Футтеркисте | Мария Андерс | ул. Обере 57 | Берлин | 12209 | Германия |
2 | Ана Трухильо Emparedados y helados | Ана Трухильо | Авда. Конститусьон 2222 | Мексика Д.Ф. | 05021 | Мексика |
3 | Антонио Морено Такерия | Антонио Морено | Матадерос 2312 | Мексика Д.Ф. | 05023 | Мексика |
4 | Вокруг Рога | Томас Харди | Ганноверская площадь, 120 | Лондон | ВА1 1ДП | Великобритания |
5 | Берглундс снабжение | Кристина Берглунд | Бергувсвеген 8 | Лулео | S-958 22 | Швеция |
Оператор IS NULL
Оператор IS NULL
используется для проверки пустых значений (значений NULL).
Следующий SQL перечисляет всех клиентов со значением NULL в поле «Адрес»:
Пример
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address
НУЛЕВОЙ;
Попробуйте сами »
Совет: Всегда используйте IS NULL для поиска значений NULL.
Оператор IS NOT NULL
Оператор IS NOT NULL
используется для проверки непустых значений (NOT NULL
ценности).
Следующий SQL перечисляет всех клиентов со значением в поле «Адрес»:
Пример
SELECT CustomerName, ContactName, Address
FROM Customers
WHERE Address
НЕ НУЛЬ;
Попробуйте сами »
Проверьте себя с помощью упражнений
Упражнение:
Выберите все записи из Customers
, где Столбец PostalCode
пуст.
ВЫБЕРИТЕ * ИЗ клиентов КУДА ;
Запустить Упражнение
❮ Предыдущий Далее ❯
НОВИНКА
Мы только что запустили
Видео W3Schools
Узнать
ВЫБОР ЦВЕТА
КОД ИГРЫ
Играть в игру
Top Tutorials
Учебник HTMLУчебник CSS
Учебник JavaScript
Учебник How To
Учебник SQL
Учебник Python
Учебник по W3. CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
Основные ссылки
Справочник по HTMLСправочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Лучшие примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
FORUM | О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.
Что означает NULL и NOT NULL в базе данных MySQL
спросил
Изменено 10 лет, 1 месяц назад
Просмотрено 18 тысяч раз
2
Новинка! Сохраняйте вопросы или ответы и организуйте свой любимый контент.
Узнать больше.
всякий раз, когда мы создаем нашу таблицу в базе данных mysql, там присутствует опция нулевого флажка. и если щелкнуть по нему, он также принимает нулевое значение, а если он остается непроверенным, то также принимает нулевые значения. Что это значит?
- mysql
- база данных
1
NULL
используется для представления «нет значения» и позволяет различать 1 и 0, истину или ложь или пустую строку и строку с содержимым. Это похоже на nil
в Ruby, null
в JavaScript или NULL
в PHP.
Если вы определяете столбец как NOT NULL
, тогда он не позволит INSERT
без указания значения для этого столбца. Если у вас есть DEFAULT
, то это будет применено автоматически. Если вы используете ORM, он может заполнить его для вас безопасным минимальным значением по умолчанию.
Столбцы, которые могут быть NULL
, требуют почти незначительного объема дополнительной памяти на строку, один бит, для хранения флага NULL
или NOT NULL
.
Помните, что NULL
в MySQL необычен тем, что он не больше, не меньше и не равен любому другому значению. Вот почему IS NULL
и IS NOT NULL
необходимы для логических сравнений.
Флажок, вероятно, устанавливает значение по умолчанию равным нулю. Также может быть поле, указывающее, принимает ли поле нулевые значения. Null в основном означает «пусто или ничего» (в VB).
Null в основном означает «нет значения». Если вы разрешаете пустые значения, вам необходимо убедиться, что ваш код может обрабатывать этот столбец, не содержащий значения. Другой подход — это определенное «пустое» значение для каждого столбца (например, 0 для целого числа). Иногда это может потребовать меньше усилий, чем обработка нулевого значения.
Как отмечено HLGEM ниже: я не пытаюсь сказать, что 0 эквивалентен нулю. Рассмотреть возможность: БД со столбцом StockOnHand.
0 означает, что вы знаете, что в наличии нет товара. Null на самом деле означает неизвестность (у вас есть акции, у вас их может и не быть)
В зависимости от приложения, возможно, вы решите рассматривать «неизвестно» так же, как «нет на складе» — в этом случае вы можете использовать «без нулей» и просто иметь значение 0.