Каково значение по умолчанию для поля, если не указано значение по умолчанию? - PullRequest
14 голосов
/ 19 декабря 2011

Надеюсь, это не глупый вопрос.Вы можете установить значение по умолчанию для всех переменных или функцию, когда она вставлена.но если поле не требуется вставлять, и вы не допускаете нулевые значения, что такое «пустое» значение, которое вы видите в phpMyAdmin?в запросе это возвращается как пустая строка и т. д.?

просто пытаясь выяснить это, я хочу запросить все записи так, чтобы значение для определенного столбца в этой записи не было «пустым», пустым или чем-то еще.

спасибо.

Ответы [ 3 ]

27 голосов
/ 19 декабря 2011

Ссылаясь на руководство ,

Для ввода данных для столбца NOT NULL, у которого нет явного предложения DEFAULT, если оператор INSERT или REPLACE не содержит значения для столбцаили оператор UPDATE устанавливает для столбца значение NULL, MySQL обрабатывает столбец в соответствии с действующим в то время режимом SQL:

  • Если режим строгого SQL не включен, MySQL устанавливает для столбца неявныйзначение по умолчанию для типа данных столбца.
  • Если включен строгий режим, возникает ошибка для транзакционных таблиц и выполняется откат оператора.Для нетранзакционных таблиц возникает ошибка
    , но если это происходит для второй или последующей строки многострочного оператора, предыдущие строки будут вставлены.

Таким образом, вашТеперь вопрос может быть, каковы неявные значения по умолчанию для различных типов данных столбца?Здесь вы идете:

Неявные значения по умолчанию определяются следующим образом:

  • Для числовых типов значение по умолчанию равно 0, за исключением того, что для объявленных целочисленных типов или типов с плавающей точкойс атрибутом AUTO_INCREMENT
    значением по умолчанию является следующее значение в последовательности.
  • Для типов даты и времени, отличных от TIMESTAMP, значением по умолчанию является соответствующее «нулевое» значение для типа.Для первого столбца TIMESTAMP в таблице значением по умолчанию являются текущие дата и время.См. Раздел 10.3, «Типы даты и времени».
  • Для типов строк, отличных от ENUM, значением по умолчанию является пустая строка.Для ENUM значением по умолчанию является первое значение перечисления.
0 голосов
/ 19 декабря 2011

Если вы хотите запретить null: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default '';

Приведенный выше запрос будет запрещать null и назначать пустую строку, если значение не указано.
В phpmysqladmin, blank = empty.
Через PHP функция mysqli или функция mysql , null value is returned as null still.

Как только вы примените запрос, вы можете легко отфильтровать его, используя

select ... from YOUR_TABLE 
where COLUMN != "";        <-- no need to check is null
                           <-- because the first query already enforce not null

Однако лучше всего сделать это перед выполнением изменения: -

update YOUR_TABLE set COLUMN = ""
where COLUMN is null;  
0 голосов
/ 19 декабря 2011

Нет значения по умолчанию, если вы не укажете его (т.е. если вы не определите «ограничение по умолчанию» для рассматриваемого столбца).

Вот пример добавления значения по умолчанию для существующего столбца:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown'

Вот пример создания таблицы по умолчанию:

CREATE TABLE Books (
  ID SMALLINT NOT NULL,
  Name VARCHAR(40) NOT NULL,
  PubID SMALLINT NOT NULL DEFAULT 0
)

Хорошей практикой является объявление ВСЕХ столбцов "не нулевыми" и предоставление соответствующих ограничений по умолчанию.

В приведенном выше примере с «книгами», если вы «вставляете» без указания PubID, PubID будет равен нулю.

В том же примере, если вы "вставите" без указания идентификатора или имени ... вы получите ошибку.

Если вы хотите, чтобы MySQL автоматически назначал идентификатор, используйте вместо этого следующий синтаксис:

CREATE TABLE Books (
  ID SMALLINT NOT NULL AUTO_INCREMENT,
  Name VARCHAR(40) NOT NULL,
  PubID SMALLINT NOT NULL DEFAULT 0
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...