Показать сообщение отдельно

  #354  
Старый 22.11.2008, 19:59
[Raz0r]
Members of Antichat - Level 5
Регистрация: 25.02.2007
Сообщений: 495
С нами: 10109126

Репутация: 1980
По умолчанию

На самом деле никаких сложных процедур и скриптов создавать не надо, решение довольно простое, используются лишь штатные средства MySQL.
Итак, сперва получаем структуру исходной таблицы. Допустим, это таблица accounts:
Код:
mysql> SHOW CREATE TABLE accounts;

CREATE TABLE `accounts` (
  `account_id` bigint(255) default '0',
  `affiliate_id` bigint(255) default '0',
  `site_handle` varchar(255) default NULL,
  `default_address` varchar(255) default NULL,
  `email` varchar(255) default NULL,
  `firstname` varchar(255) default NULL,
  `password` varchar(255) default NULL,
  `send_announcements` int(2) default '0',
  `ip_address` varchar(255) default NULL,
  `is_active` int(2) default '0',
  `is_affiliate` int(2) default '0',
  `last_modified` varchar(255) default NULL,
  `last_loggedin` varchar(255) default NULL,
  `last_updated` varchar(255) default NULL,
  `time_created` varchar(255) default NULL,
  UNIQUE KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Теперь создаем новую таблицу с измененной структурой на основе исходной таблицы:
Код:
mysql>CREATE TABLE `accounts2` (
  `account_id` bigint(255) default '0',
  `is_active` int(2) default '0',
  `is_affiliate` int(2) default '0',
  `last_modified` varchar(255) default NULL,
  `last_loggedin` varchar(255) default NULL,
  `last_updated` varchar(255) default NULL,
  `time_created` varchar(255) default NULL,
  UNIQUE KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Замечу, что у таблиц должен быть один общий столбец, иначе связь между ними нарушится, в данном случае это account_id.
Теперь переносим данные из первой таблицы во вторую:
Код:
mysql> INSERT INTO accounts2 (account_id,is_active,is_affiliate,last_modified,la
st_loggedin,last_updated,time_created) SELECT account_id,is_active,is_affiliate,
last_modified,last_loggedin,last_updated,time_created FROM accounts LIMIT 5000
    -> ;
Query OK, 5000 rows affected (0.27 sec)
Records: 5000  Duplicates: 0  Warnings: 0
Когда будешь разбивать таблицу, LIMIT нужно, конечно, убрать.
Теперь осталось лишь удалить ненужные столбцы из первой таблицы:
Код:
ALTER TABLE `accounts` DROP COLUMN `affiliate_id`, DROP COLUMN `site_handle`, DROP COLUMN `default_address`;
...

Последний раз редактировалось [Raz0r]; 22.11.2008 в 20:03..
 
Ответить с цитированием