2013-06-08 2 views
0

мне нравится, чтобы добавить таблицу, чтобы добавить колонку, но без использования alert table командыMysql Дозапись таблицы, чтобы добавить столбцы

например,

Это таблица, в которой отсутствуют некоторые столбцы.

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

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

Вы не можете использовать 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).

+0

У меня есть база данных с множеством таблиц, где я добавляю новые столбцы, но их слишком много, чтобы пройти через каждый из них, чтобы добавить ее в качестве таблицы предупреждений. Я надеялся, что смогу импортировать файл .sql в базу данных, и может показаться, что этот столбец отсутствует, поэтому я могу добавить их для вас. как насчет somthing как замена команды таблицы – user1967132

+0

Сколько их слишком много? Вы можете использовать динамический SQL, я думаю, чтобы пройти через все таблицы в базе данных и выполнить некоторые действия (например, «ALTER TABLE».) –

+0

Если вам не хватает столбцов, вы должны добавить их, как я описал. Нет команды 'replace table'. – Bjoern

Смежные вопросы