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 INTO MyTable (Name) VALUES (Name='xxx')
问题是两个INSERT语句都产生条目(4, 0 )。为什么 0 而不是“xxx”?
更新:主键已更改。
答案 0 :(得分:4)
这应该做的工作:
INSERT INTO MyTable (ID, Name) VALUES (4, 'xxx')
答案 1 :(得分:2)
我很确定它会是这样的,而不是......
INSERT INTO MyTable (Name) VALUES ('xxx')
不需要Name=
部分,因为您已经使用第一个(Name)
定义指定了要插入的列。
答案 2 :(得分:2)
因为表达式 Name='xxx'
为false,因此评估为零。
您使用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')
答案 3 :(得分:0)
Name='xxx'
的语法是否有效?从来没有见过它,我认为它将它视为一个不带引号的文字,试图将其转换为数字并提出0?我完全不确定
试试这个:
INSERT INTO MyTable (Name) VALUES ('xxx')
答案 4 :(得分: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')
答案 5 :(得分:0)