MySQL:null在INSERT和SELECT语句中变为0
我试图做一个INSERT语句使用SELECT查询语句到一个有两列的表(item_id不为null,价格可以为null)。 item_id不是自动递增的,我会从另一个表中进行选择查询。 所以一个例子是:
INSERT INTO myTable
SELECT ((SELECT id FROM myCatalogue where name="Item X"), "500");
通过单独执行SELECT语句,如果项目X在列表中不存在,则查询将返回:
| SELECT id FROM myCatalogue where name="Item X" | 500 | | NULL | 500 |
但是,当整个INSERT + SELECT语句中,以下内容被插入到'myTable'中:
| item_id | price | | 0 | 500 |
当'myCatalogue'中不存在项目时,例如'不能在列item_id中插入值NULL',我希望MySQL提示我出错,因此我可以返回'myCatalogue'来验证此项是否存在。 但它会自动将值从NULL更改为0并成功插入。 因此,我想问一下如何修改语句,使其不会将NULL更改为0?
这是我的表格定义:
CREATE TABLE myTable
(
item_id int(11) unsigned NOT NULL,
price float unsigned DEFAULT NULL,
PRIMARY KEY (item_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
INSERT INTO myTable
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"
更容易处理。 您可以通过last_insert_id()
确认插入是否成功。
你可以尝试:
INSERT INTO myTable
SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X"
UNION
SELECT NULL, "500"
很明显, id
需要启用NULL
和default
,如果它是PRIMARY
可能会很困难。 如果你有PRIMARY
或UNIQUE
,而是想要一个错误,你可以像这样运行:
INSERT INTO myTable
( SELECT id, "500"
FROM myCatalogue
WHERE name = "Item X")
UNION
( SELECT item_id, "500"
FROM myTable)
LIMIT 1
只要id
是PRIMARY
,它就会错误地将你现有的id
插入到表中。
我是初学者,理论上是有用的。 这是为MySQL。
INSERT INTO myTable SELECT ((SELECT IFNULL(id,0) as id FROM myCatalogue where name="Item X"), "500");
这是为了mssql。
INSERT INTO myTable SELECT ((SELECT ISNULL(id,0) as id FROM myCatalogue where name="Item X"), "500");
如果不行,那是我的错误。
链接地址: http://www.djcxy.com/p/63801.html上一篇: MySQL: null becomes 0 in INSERT and SELECT statement
下一篇: How do I pull both categories AND tags from a MySQL Database for an item?