2012-02-07 3 views
0
CREATE TABLE IF NOT EXISTS `MyTable` (
    `ID` SMALLINT NOT NULL AUTO_INCREMENT, 
    `Name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO MyTable (ID,Name) VALUES (ID=4,Name='xxx') 

илиINSERT заявление для MySQL таблицы

INSERT INTO MyTable (Name) VALUES (Name='xxx') 

Проблема заключается в том, что оба оператора INSERT производят запись (4, 0 ). Почему вместо «xxx»?

ОБНОВЛЕНИЕ: Первичный ключ изменен.

+0

Вы указать первичный ключ, который даже не существует (авиалиний), поэтому создание таблицы не должно даже работать. Кроме того, вам не нужно вставлять значение при использовании auto_increment. –

ответ

4

Это должно сделать работу:

INSERT INTO MyTable (ID, Name) VALUES (4, 'xxx') 
+0

Почему утверждение в моем примере не вызвало ошибку? –

+0

Потому что в вашем случае, как сказано в сообщении paxdiablo, вы используете метод column = expresion, который не написал baddly, но который оценивается как 0 в инструкции INSERT ... VALUES. Чтобы использовать метод column = expression, предпочитайте инструкцию INSERT ... SET. –

2

Я уверен, что это будет что-то вроде этого, вместо того, чтобы ...

INSERT INTO MyTable (Name) VALUES ('xxx')

Нет необходимости в Name= части, так как вы уже указали, какой столбец вы хотите вставить в первое определение (Name).

0

Является ли этот синтаксис Name='xxx' действительным? Я никогда не видел его раньше, я предполагаю, что он видит его как неуказанный литерал, пытаясь преобразовать его в число и придумать 0? Я не уверен, что у всех

Попробуйте это:

INSERT INTO MyTable (Name) VALUES ('xxx')

2

Поскольку выражениеName='xxx' ложно, следовательно, оценивается как ноль.

Вы используете метод column=expression в статьях on duplicate key update, как описано here, а не в «правильной» секции вставок. Пример этого:

insert into mytable (col1,col2) values (1,2) 
    on duplicate key update col1 = col1 + 1 

Вы должны использовать синтаксис:

INSERT INTO MyTable (ID,Name) VALUES (4,'xxx') 
0

Это потому, что вы должны указать имя столбца в значениях части. А также потому, что вы не определяете вы первичный ключ правильно (airlineID не является частью списка полей)

CREATE TABLE IF NOT EXISTS `MyTable` (
    `ID` SMALLINT NOT NULL AUTO_INCREMENT, 
    `Name` VARCHAR(50) NOT NULL, 
    PRIMARY KEY (`ID`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

INSERT INTO MyTable (ID,Name) VALUES (4,'xxx') 

INSERT INTO MyTable (Name) VALUES ('xxx') 
0

Попробуйте

INSERT INTO MyTable (ID,Name) VALUES (4,xxx) 

Для получения дополнительной информации просто посетить этот link

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