@Kekatoz

В чём ошибка в коде?

У меня есть пуста таблица в MySQL:
CREATE TABLE IF NOT EXISTS games(
    id INTEGER AUTO_INCREMENT PRIMARY KEY,
    game_id INT UNIQUE,
    name VARCHAR(255),
    date DATE
);


Через pymysql в python я прописываю команду:
cursor.execute("INSERT games(game_id, name, date) VALUES (2, 'Ships in the ocean', 20180212)")


и получаю следующую ошибку:

pymysql.err.IntegrityError: (1062, "Duplicate entry '2' for key 'games.game_id'")


таблица при этом пустая.

как решить проблему?
  • Вопрос задан
  • 179 просмотров
Решения вопроса 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
SQL UNIQUE Constraint

и очевидно в момент insert таблица непустая в пределах текущей транзакции.
например. ваш скрипт пытается добавить две записи, спотыкается на constraint, транзакция откатывается и таблица таки останется пустой.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Во первых нахрена было давать полю автоинкремент если вы его руками будете вставлять? Это не к тому чтобы убрать автоинкремент, это к тому что это поле в запросе указывать вообще не надо.

Во вторых - у таблицы которую вы уже использовали, наверняка уже существовал id=2, и она это "помнит", то что вы не можете создать такой ключ который уже использовался гарантирует консистентность данных.

UPD: Уники емнип так же попадают в индекс использования, то есть второй уник вы не создадите, особенно если это поле как-то связано с другими через внешний ключ.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы