Таблица MySQL - усекать или не усекать?


У меня есть таблица, которая существует как в моей живой (размещенной) БД, так и в моей БД разработки (локальной). Я хочу внести кучу записей в живой стол.

То, что я делал, заключается в следующем:

  1. Экспортируйте/Импортируйте копию живой таблицы обратно в базу данных разработчиков с помощью phpMyAdmin.
  2. Используйте пакетный файл C для загрузки новых данных в таблицу разработки.
  3. Экспортируйте/Импортируйте копию обновленной таблицы разработки обратно в живую базу данных, снова используя 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 Нет

Author: Nick, 2012-05-28

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, вы будете синхронизировано, если вы не укажете свои автономеры в операторах вставки, вы выйдете из синхронизации.

Надеюсь, это немного прояснит ситуацию.

 4
Author: Namphibian, 2012-05-28 12:11:32

После усечения Вам не нужно экспортировать/импортировать этот основной столбец автоматического увеличения. Просто импортируйте остальные столбцы. Он будет автоматически управлять столбцом автоматического увеличения самостоятельно.

 1
Author: manurajhada, 2012-05-28 11:51:41