#mysql
#mysql
Вопрос:
Допустим, у нас есть таблица A только с одним столбцом id (который является первичным ключом)
Как нам вставить новую строку в таблицу без указания идентификатора?
Я попробовал это
INSERT INTO A (`id`) VALUES (NULL)
и это не работает
Редактировать: Я забыл упомянуть, что идентификатор первичного ключа имеет атрибут auto_increment, а НЕ NOT NULL.
Правка 2: Точная ошибка при выполнении приведенного выше запроса
Column 'id' cannot be null
Комментарии:
1. Почему бы не поделиться с нами, как именно это не работает?
2. Поле PK не допускает повторяющихся значений или нулевых значений
3. Поля первичного ключа не должны быть нулевыми.
4. @arvinsim — Ваше описание настройки выглядит правильным. Вероятно, вам не удалось выполнить некоторые из шагов, которые, как вы утверждаете, вы выполнили.
5. можете ли вы опубликовать определение вашей таблицы, пожалуйста 🙂
Ответ №1:
Как только ‘id’ в качестве параметра автоматического увеличения включен (при условии, что ID является целым числом), вы можете просто сделать:
INSERT INTO A (id) values (null)
и ‘id’ будет продолжать увеличиваться каждый раз.
Комментарии:
1. Я не думаю, что это работает. Я попробовал это, и он попытался вставить цифру 0. Поскольку я пытался вставить 5 раз, это приводит к ошибке дублирования ввода.
2. @arvinsim: Должно быть, какая-то проблема с вашей настройкой. MySQL принимает оба
NULL
и0
в качестве значений для столбца auto_increment и интерпретирует их как означающие «использовать следующий идентификатор».3. У меня это сработало с базой данных MySQL. Фактически это увеличивает идентификатор каждый раз.
4. Проблема заключается в том, чтобы получить это число, вздох!!
Ответ №2:
работает, только если вы используете первичный ключ auto_increment (PK), поскольку каждый PK должен иметь уникальное значение, отличное от null.
drop table if exists A;
create table A
(
id int unsigned not null auto_increment primary key
)
engine=innodb;
insert into A (id) values (null),(null);
mysql> select * from A order by id;
----
| id |
----
| 1 |
| 2 |
----
2 rows in set (0.00 sec)
Комментарии:
1. Да, это автоматически увеличивающееся поле
2. Если я чего-то не упускаю, это настройка, описанная в вопросе 😕
Ответ №3:
У меня была похожая проблема, затем я заметил, что я не применил изменения, когда я изменил id
на primary key not null auto incremental.
Ответ №4:
INSERT INTO `table` () VALUES ();
тоже работает.
Ответ №5:
Попробуйте это без `.. Как в:
ВСТАВИТЬ В A (sid) ЗНАЧЕНИЯ (NULL); // я использовал sid вместо id…
у меня все нормально работало..
Также при создании таблицы A укажите unique (sid) … т.е.
создайте таблицу A(sid int(3) not null auto_increment unique(sid));
Комментарии:
1. Стиль цитирования ничего не должен менять