2012-02-07 107 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') 

对MySQL表的INSERT语句

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

的问题是,无论是INSERT语句产生条目(4 )。为什么而不是“xxx”?

更新:主键已更改。

+0

您指定主键甚至不存在(航空公司),所以表创建不应该工作。另外,使用auto_increment时不需要插入值。 – 2012-02-07 11:27:42

回答

4

这应该做的工作:

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

为什么我的例子中的语句没有产生错误? – 2012-02-07 11:29:31

+0

因为就你的情况而言,正如paxdiablo的帖子中所说的那样,你可以使用column = expresion方法,该方法不会被baddly写入,但在INSERT ... VALUES语句中被评估为0。要使用column = expression方法,首选INSERT ... SET语句。 – 2012-02-07 11:39:59

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