MySQL:在INSERT和SELECT语句中null变为0

时间:2013-06-19 07:01:18

标签: mysql select insert null

我正在尝试使用SELECT查询语句将INSERT语句放入具有两列的表中(item_id不为null且price可以为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 |

我希望MySQL在'myCatalogue'中不存在项时提示我错误,例如'无法在列item_id中插入值NULL',这样我就可以返回'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 

2 个答案:

答案 0 :(得分:0)

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需要启用NULLdefault,如果是PRIMARY则可能会很困难。如果您有PRIMARYUNIQUE但又想要出错,则可以这样运行:

INSERT INTO myTable 
(   SELECT id, "500"
    FROM myCatalogue
    WHERE name = "Item X")
    UNION
(   SELECT item_id, "500"
    FROM myTable)
    LIMIT 1

只要idPRIMARY,就会在您尝试将现有id插入表格时出错。

答案 1 :(得分:0)

我是初学者,它在理论上有效。这是为了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");

如果不行,那是我的错。