Mysql追加表添加列

时间:2013-06-08 16:58:00

标签: mysql

我想附加一个表来添加列但不使用alert table命令

e.g。

这是缺少某些列的表。

CREATE TABLE IF NOT EXISTS `admin` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `passwd` varchar(40) NOT NULL,
  `isActive` tinyint(1) NOT NULL default '1',
  `lastVisit` datetime NOT NULL default '0000-00-00 00:00:00',
  `modifyAt` datetime NOT NULL,
  `createdAt` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

因此,如果我运行此查询,那么它应该自动将缺少的列添加到我的表中

CREATE TABLE IF NOT EXISTS `admin` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `passwd` varchar(40) NOT NULL,
  `name` varchar(100) NOT NULL,
  `originalUser` tinyint(1) NOT NULL default '0',
  `isActive` tinyint(1) NOT NULL default '1',
  `lastVisit` datetime NOT NULL default '0000-00-00 00:00:00',
  `modifyAt` datetime NOT NULL,
  `createdAt` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这可以不使用alert table命令吗?

1 个答案:

答案 0 :(得分:1)

我理解您的问题,因为您想在表格中添加一些列。请注意,术语通常与表中的实际数据有关,而与列本身无关。如果我的假设是错误的,请澄清你的问题。

您无法使用CREATE TABLE更改表格。它是在那里创建表, 如果它无法创建它,它在大多数情况下会抛出你所描述的错误。出于这个原因存在另一个命令:ALTER TABLE

你可能会这样做。

(1)使用上面的CREATE TABLE语法创建表格:

CREATE TABLE IF NOT EXISTS `admin` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(20) NOT NULL,
  `passwd` varchar(40) NOT NULL,
  `isActive` tinyint(1) NOT NULL default '1',
  `lastVisit` datetime NOT NULL default '0000-00-00 00:00:00',
  `modifyAt` datetime NOT NULL,
  `createdAt` datetime NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

(2)使用这样的ALTER TABLE进行我认为您希望在第二个语句中修改的修改(另外两列):

ALTER TABLE
ADD COLUMN `name` varchar(100) NOT NULL AFTER `passwd`,
ADD COLUMN `originalUser` tinyint(1) NOT NULL default '0' AFTER `name`;

与您的问题无关,但我会避免使用name这样的列名,因为如果您没有正确地转义它们,它会给您带来其他错误(请参阅reserved words)。