2012-06-14 174 views
1

我在一些PHP代码中一个接一个地运行这两个语句。为什么mysql插入查询失败* only *当表为空时?

INSERT INTO input (ID) VALUES('1'); 
UPDATE input SET `vendor_name` = 'some name' WHERE ID=1 

如果数据库表是空的(意思是我刚截断的表),创建没有数据,没有出现警告。就好像我从未执行过查询。

如果我再运行只是

INSERT INTO input (ID) VALUES('1'); 

在此完全相同的明确的表,创建一个条目没有问题。 之后,如果我再次运行相同 INSERT/UPDATE querys

INSERT INTO input (ID) VALUES('2'); 
UPDATE input SET `vendor_name` = 'some name' WHERE ID=2 

然后创建所述数据和所述VENDOR_NAME适当设定。这里发生了什么??我似乎误解了将数据插入数据库的根本原因。我能否在空表上像这样背对背执行语句?

要像“不列存在吗?”抢先不可避免的傻问题,这里有一些额外的注意事项:曾经出现

  • 没有任何警告。这真让我感到困惑。 INSERT/UPDATE似乎默默地失败了。 (是的,是的,我已经设置了错误报告和我检查了日志)

  • 适当的列/表/数据库/权限的存在和定义(记住查询工作正常,如果表中有一个空行)

  • ID是主键。我用于身份证的号码(1,2,不管)似乎都不重要。我也可以逆转它们,或者使用101和102。创建表看起来像这样:CREATE TABLE IF NOT EXISTS $ tablename(ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY)。用户动态添加列。所以现在出现在表的约100列(请记住,这不应该的问题。我只是想更新一个列,如果表中的数据更新工作正常)

  • 在这里偷偷地点一个Count(*)查询可以发现行是创建的,但是在Update语句之后会消失。 (也许该行未完成,或什么的,并有一个“确保插入结束”查询我是否需要运行?)

+0

drop/create table again给出相同的结果吗?如果列是数字(不是我所知道的问题) – Sebas

+2

一个注释:如果'ID'的列类型是INT,则在'1'附近引用引号。 – hannebaumsaway

+0

它是一个Int类型,但为什么这么重要 - 记住,如果数据存在于表中,那么查询,引号和全部就可以工作。 –

回答

1

试试这个代码....我的作品.. ..

INSERT INTO `input` (ID) VALUES('1'); 
UPDATE `input` SET `vendor_name` = 'some name' WHERE ID=1