安全地更改MySQL 5.5中的列

问题描述 投票:0回答:1

我发现自己正在寻找一个旧的testlink安装,所有负责的人都离开了,这是我做任何严肃的SQL工作多年。

底层数据库是版本5.5.24-0ubuntu0.12.04.1

我没有所有密码,但我有足够的权限进行没有锁的备份;

  mysqldump --all-databases --single-transaction -u testlink -p --result-file=dump2.sql

我真的不想尝试恢复数据!

我们需要增加testlink中name字段的长度,各种页面使我增加nodes_hierarchy表中字段的长度。

备份产生了这个;

CREATE TABLE `nodes_hierarchy` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `parent_id` int(10) unsigned DEFAULT NULL,
  `node_type_id` int(10) unsigned NOT NULL DEFAULT '1',
  `node_order` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `pid_m_nodeorder` (`parent_id`,`node_order`)
) ENGINE=MyISAM AUTO_INCREMENT=184284 DEFAULT CHARSET=utf8;

我只有一次机会能够做到这一点并且不会丢失任何数据。这看起来完全正确吗?

ALTER TABLE nodes_hierarchy MODIFY name VARCHAR(150) DEFAULT NULL;
mysql alter-table
1个回答
1
投票

这是正确的语法。

备用

无论此操作的安全性如何,都应备份数据库。好像你已经在计划它了。你不太可能遇到问题。备份只是一种保险政策,可以解决不太可能发生的情况。

测试表

你似乎有~200K的记录。我建议您只需执行以下操作即可复制此表:

CREATE TABLE `test_nodes_hierarchy` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `parent_id` int(10) unsigned DEFAULT NULL,
  `node_type_id` int(10) unsigned NOT NULL DEFAULT '1',
  `node_order` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `test_pid_m_nodeorder` (`parent_id`,`node_order`)
) ENGINE=MyISAM AUTO_INCREMENT=184284  DEFAULT CHARSET=utf8;

填充测试表

使用以下命令填充测试表:

insert into test_nodes_hierarchy
select *
from nodes_hierarchy;

在此测试表上运行alter state

查找alter语句对测试表的持续时间。

ALTER TABLE test_nodes_hierarchy
MODIFY name VARCHAR(150) DEFAULT NULL;

重命名测试表

练习使用以下命令重命名测试表:

RENAME TABLE test_nodes_hierarchy TO test2_nodes_hierarchy;

一旦知道了所需的时间,就会知道主表上会发生什么。如果出现问题,可以替换drop the nodes_hierarchy表,只需重命名test_nodes_hierarchy表。

这只会在行动中建立信心。

© www.soinside.com 2019 - 2024. All rights reserved.