Python MySQL: очистить таблицу с несколькими внешними ключами

0

Я работаю с Python MySQL, и мне нужно очистить таблицу в моей базе данных с 13328 строками.

Я не могу создать простую таблицу перетаскивания, потому что эта таблица является дочерней, а также отцом других дочерних внешних ключей, связанных с ней. Если я попытаюсь сбросить таблицу, система мне запретила. Таблица определена с помощью ON UPDATE CASCADE, ON DELETE CASCADE и InnoDB; Индекс primary_key для этой таблицы определяется как

productID INT(6) NOT NULL AUTO_INCREMENT ...
PRIMARY KEY (productID,productNO)

Поэтому мне просто нужно очистить; это автоматически восстановит индекс первичного ключа таблицы до 1 для следующего ввода. Правильно?

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

Вот код - productID - это мой основной индексный ключ к этой таблице:

def clean_tableProduct(self):
    getMaxID_MySQLQuery = """SELECT MAX(productID)
    FROM product;"""

    cleanTabeMySQLQuery="""DELETE FROM product WHERE productID <=%s;"""              

    self.cursorMySQL.execute(getMaxID_MySQLQuery)        

    for row in self.cursorMySQL:       
        self.cursorMySQL.execute(cleanTabeMySQLQuery,(row[0],)) 

Если я перейду на консоль MySQL, чтобы проверить результаты обработки, он получает меня:

mysql> SELECT MIN(productID)
    FROM product;
4615748

mysql> SELECT MAX(productID)
    FROM product;
4629075

Если я запустил ту же команду на консоли, чтобы очистить таблицу, она работает:

mysql> DELETE FROM product WHERE productID <='4629075';
Query OK, 13328 rows affected (0.64 sec)

и показывает мне то, что я обычно ожидаю.

Однако, если я перейду к функции Python после очистки таблицы на консоли и снова запустите программу и очистку таблицы, чтобы перезапустить обработку, она перезапускает индекс таблицы не с MIN: 1, а вместо 4629076.

Любое предложение?

Все комментарии и предложения приветствуются и приветствуются.

  • 0
    Режим вики сообщества означает, что вам не присуждается репутация за вопрос или за людей, которые отвечают на этот вопрос.
Теги:
foreign-keys
auto-increment

3 ответа

2
Лучший ответ

Чтобы удалить все записи из таблицы:

truncate table product

К reset следующий идентификатор к 1:

ALTER TABLE product AUTO_INCREMENT = 1

или

SET insert_id;
INSERT INTO product ...;

(Я не тестировал это, но я должен работать)

  • 0
    +1 Хотя вы не получите никакого повторения, так как это в режиме вики :)
2

Если вы очистите таблицу с усечением:

TRUNCATE TABLE product

В качестве побочного эффекта будет reset счетчик автоматического увеличения. Но вы также можете reset вручную:

ALTER TABLE product AUTO_INCREMENT = 1
0

Большое спасибо за все входные и быстрые отзывы. Он сделал трюк!

Вот как это выглядит сейчас:

def clean_tableProduct(self):
    cleanTabeMySQLQuery = """TRUNCATE TABLE product;"""
    self.cursorMySQL.execute(cleanTabeMySQLQuery)

    setIndexMySQLQuery = """ALTER TABLE product AUTO_INCREMENT = 1;"""
    self.cursorMySQL.execute(setIndexMySQLQuery)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню