ОШИБКА 1364 (HY000): поле 'MY_DATE' не имеет значения по умолчанию - PullRequest
1 голос
/ 15 февраля 2011
create table MYTABLE
{
    MY_DATE int NOT NULL AUTO_INCREMENT,
    NAME varchar(255) NOT NULL UNIQUE
};
INSERT INTO MYTABLE(NAME)values(jessica);

Почему я получаю эту ошибку?

ОШИБКА 1364 (HY000): Поле 'MY_DATE' не имеет значения по умолчанию

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Из документов :

В таблице может быть только один столбец AUTO_INCREMENT, он должен быть проиндексирован и не может иметь значение DEFAULT.

Я думаю, вы обнаружите, что, поскольку вы не индексируете MY_DATE, возможно, он молча игнорирует параметр AUTO_INCREMENT (я не могу этого гарантировать, это просто предположение, но примечание в документациивсе еще актуален).

Все сэмплы, которые я вижу на материале AUTO_INCREMENT, имеют (эквивалент):

PRIMARY KEY (MY_DATE)

В качестве альтернативы, вы можете бытьработает в строгом режиме SQL.Кажется, что все документы, которые я видел, указывают на то, что при отсутствии определенного по умолчанию столбцы, не включенные в список, во вставке получат значение NULL, если они могут быть обнуляемыми, или тип по умолчанию, если они не обнуляются:1021 * Если вы не работаете в режиме строгого SQL, для любого столбца, для которого явно не задано значение, устанавливается значение по умолчанию (явное или неявное).Например, если вы укажете список столбцов, в котором не указаны все столбцы таблицы, для безымянных столбцов будут установлены значения по умолчанию.Назначение значений по умолчанию описано в Разделе 10.1.4, «Значения по умолчанию для типа данных».

Для целочисленного типа это значение по умолчанию равно 0 (что в любом случае должно привести к автоматическому увеличению).

Однако в строгом режиме SQL (с здесь ):

возникает ошибка для транзакционных таблиц и выполняется откат оператора.

2 голосов
/ 15 февраля 2011

Какую версию MySQL вы используете?

Я использую сообщество 5.1.41, а SQL для создания таблицы дает

Ошибка SQL (1075): неверное определение таблицы;может быть только один автоматический столбец, и он должен быть определен как ключ

Затем исправьте его следующим образом

create table MYTABLE
 (
 MY_DATE int NOT NULL AUTO_INCREMENT primary key,
 NAME varchar(255) NOT NULL UNIQUE
 );

Оператор вставки

INSERT INTO MYTABLE(NAME)values(jessica);

Результат

Ошибка SQL (1054): неизвестный столбец 'jessica' в 'списке полей'

, поскольку он не был заключен в кавычки.Как только это исправлено к следующему:

INSERT INTO MYTABLE(NAME)values('jessica');

Это работает.Вам не нужно предоставлять какие-либо значения для первичного ключа auto_increment, но вы можете .

Теперь давайте поговорим о причудах MySQL.Вы можете при желании включить столбец и установить значение NULL.Вы также можете присвоить ему значение SPECIFIC, и MySQL с радостью его использует, , даже если определено как auto_increment.

INSERT INTO MYTABLE(my_date,NAME)values(41,'jessica2');
INSERT INTO MYTABLE(my_date,NAME)values(null,'jessica3');
INSERT INTO MYTABLE(NAME)values('jessica4');
DELETE FROM MYTABLE where my_date=43;
INSERT INTO MYTABLE(my_date,NAME)values(3,'jessica5');
INSERT INTO MYTABLE(NAME)values('jessica?');
select * from mytable;

Когда вы специально установите число 41, следующее числостановится 42, затем 43. Это позволяет нам специально использовать 3, даже тогда, когда 43 был удален, прежде чем мы использовали конкретное число 3, следующее значение по-прежнему равно 44.

Вывод

MY_DATE  NAME
41       jessica2
42       jessica3
3        jessica5
44       jessica?
0 голосов
/ 15 февраля 2011

Вы не предоставляете значение для MY_DATE в своем выражении INSERT, и значение по умолчанию не определено.(И, как указывает paxdiablo, в этой ситуации не может быть определено значение по умолчанию.) Необязательно, вам нужно указать значение для MY_DATE, и если это значение равно нулю или нулю, MySQL назначит следующее значение автоинкремента.Как это:

insert into mytable values(null,'jessica');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...