Таблица MySQL - усекать или не усекать?
У меня есть таблица, которая существует как в моей живой (размещенной) БД, так и в моей БД разработки (локальной). Я хочу внести кучу записей в живой стол.
То, что я делал, заключается в следующем:
- Экспортируйте/Импортируйте копию живой таблицы обратно в базу данных разработчиков с помощью phpMyAdmin.
- Используйте пакетный файл C для загрузки новых данных в таблицу разработки.
- Экспортируйте/Импортируйте копию обновленной таблицы разработки обратно в живую базу данных, снова используя phpMyAdmin.
Все это работает хорошо, насколько это возможно.
Проблема заключается в следующем: если запись была удалена в живой таблице, шаг 1 не удаляет ее из таблицы разработки (даже если вы выберете опцию "Заменить таблицу файлом"). Затем эта запись будет воссоздана в живой таблице на шаге 3.
Мой вопрос: должен ли я обрезать таблицу разработки (после резервного копирования, конечно) перед импортом на шаге 1? Установит ли мой импорт автоматическое увеличение в таблице разработки в ту же точку, что и в живой таблице? Или я о чтобы ужасно все испортить?
Спасибо.
РЕДАКТИРОВАТЬ: Вот стол. (Не могу отформатировать его лучше; извините.)
Тип столбца - НУЛЕВОЙ - По умолчанию
Cnum smallint(6) Нет
без малого (6) Нет 1
cat_subject малый размер(2) №0
cat_major малый размер(2) Нет 0
cat_minor малый размер(2) №0
символ кошачьего вкуса(1) Да НОЛЬ
неизмененный варчар (255) Нет
Индекс:
Тип имени ключа Уникальный Упакованный столбец Параметры сортировки Количества элементов Нулевой комментарий
ОСНОВНОЕ ДЕРЕВО BTREE Да нет cnum 2214 A Нет
2 answers
Усечение таблицы в MySQL приведет к сбросу столбца autonumber/identity. Если ваш скрипт явно не вставит автономер из live в dev, у вас возникнет серьезная проблема.
Если вы сможете опубликовать некоторые структуры таблиц и код, я смогу дать вам лучший ответ с помощью некоторого кода.
ОБНОВЛЕНИЕ:
Просто чтобы немного уточнить об автономер и MySQL. Давайте создадим таблицу следующим образом:
CREATE TABLE `testcust` (
`TestCustID` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(32) DEFAULT NULL,
PRIMARY KEY (`TestCustID`)
) ENGINE=InnoDB;
Если я вставил данные со следующими запрос:
INSERT INTO `test`.`TestCust`
(`TestCustID`,
`Name`
)
VALUES
(
NULL,
'Pieter'
);
И запустил select* на этой таблице, я бы увидел что-то вроде этого.
TestCustID Name
'1', 'Pieter'
Поскольку я не указал TestCustID, MySQL сгенерирует его. Если бы я выполнил следующий запрос вставки:
INSERT INTO `test`.`TestCust`
(`TestCustID`,
`Name`
)
VALUES
(
15,
'Pieter'
);
А затем запустил select* на таблице, которую я бы увидел
TestCustID Name
'1' 'Pieter'
'15' 'Pieter'
Поэтому, если вы усекли свою таблицу, она сбросит значение TestCustID до 1 (начиная с нуля).Если вы явно укажете автономер из вашей производственной/действующей системы в своих инструкциях insert, вы будете синхронизировано, если вы не укажете свои автономеры в операторах вставки, вы выйдете из синхронизации.
Надеюсь, это немного прояснит ситуацию.
После усечения Вам не нужно экспортировать/импортировать этот основной столбец автоматического увеличения. Просто импортируйте остальные столбцы. Он будет автоматически управлять столбцом автоматического увеличения самостоятельно.