Mysql: как мне сделать точную рабочую копию таблицы? - PullRequest
0 голосов
/ 20 мая 2010

Я работаю над реструктуризацией устаревшей базы данных и связанных с ней приложений. Для того чтобы старые и новые работали параллельно, я создал базу данных для разработки и скопировал интересующие ее таблицы, например

create database devdb;

drop table if exists devdb.tab1;
CREATE TABLE devdb.tab1 like working.tab1;
insert into devdb.tab1 select * from working.tab1;

Сделав это, я заметил, что триггеры, влияющие на tab1, не были скопированы. Есть ли способ, которым я могу создать рабочую копию tab1, то есть данных, разрешений, триггеров, всего?

Ответы [ 3 ]

0 голосов
/ 21 мая 2010

Хм, видимо, задним числом, но может показаться, что выгрузка таблиц через mysqldump и загрузка этих дампов в новую базу данных восстанавливает триггеры (и я надеюсь, любая другая важная информация).

Позор, поскольку я хотел сделать весь процесс через менеджер баз данных DbVisualizer. Ты чему-то учишься каждый день ...

0 голосов
/ 08 июля 2010

Обратите внимание, что синтаксис "create table x select * from y" не создаст точную рабочую копию таблицы, даже если вы не беспокоитесь о триггерах. Новая таблица будет:

  • Использовать тип таблицы MyISAM по умолчанию (даже если родительская таблица InnoDB)
  • По умолчанию используется набор символов Latin1 (даже если родительская таблица UTF-8)
  • Может уничтожить значения полей auto_incremented и заменить их на 0 (зависит от структуры таблицы, но очень неприятно, если это случится с вами)
0 голосов
/ 20 мая 2010

Существует более быстрый способ как воссоздать структуру, так и импортировать данные (хотя вы теряете свои индексы;)):

 create table devdb.tab1 select * from working.tab1;

Для триггеров и друзей, вам придется запросить в information_schemas

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...