0

我喜欢附加一个表来添加列但不使用alert 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;

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

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不使用命令可以做到这一点吗?

4

1 回答 1

2

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

您不能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,因为如果您没有正确转义它们,则会引发其他错误(请参阅保留字)。

于 2013-06-08T17:13:31.163 回答