将NOT NULL值插入NOT NULL字段会导致错误

时间:2015-02-11 12:28:50

标签: mysql

我使用以下命令创建了一个表:

CREATE TABLE SpatialInfo (ItemID Integer NOT NULL, Latitude decimal(9,6) null, Longitude decimal(9,6) null) ENGINE=MyISAM;

INSERT INTO SpatialInfo (ItemID, Latitude, Longitude)
VALUES
(
 (SELECT ID AS ItemID from Item WHERE ID IS NOT NULL and Latitude IS NOT NULL and Longitude IS NOT NULL),
 (SELECT Latitude from Item),
 (SELECT Longitude from Item)
);

表项目有以下描述:

+-------------+---------------+------+-----+---------------------+----------------------------+
| Field       | Type          | Null | Key | Default             | Extra                       |
+-------------+---------------+------+-----+---------------------+-----------------------------+
| ID          | int(11)       | NO   | PRI | NULL                |                                 |
| Name        | varchar(300)  | NO   |     | NULL                |                             |
| Currently   | decimal(8,2)  | NO   |     | NULL                |                             |
| Buy_price   | decimal(8,2)  | YES  |     | NULL                |                             |
| First_bid   | decimal(8,2)  | NO   |     | NULL                |                             |
| Number_bids | int(11)       | YES  |     | NULL                |                             |
| Latitude    | decimal(9,6)  | YES  |     | NULL                |                             |
| Longitude   | decimal(9,6)  | YES  |     | NULL                |                             |
| Location    | varchar(60)   | YES  |     | NULL                |                             |
| Country     | varchar(60)   | YES  |     | NULL                |                             |
| Start       | timestamp     | NO   |     | CURRENT_TIMESTAMP   | on update CURRENT_TIMESTAMP |
| End         | timestamp     | NO   |     | 0000-00-00 00:00:00 |                             |
| SellerID    | varchar(60)   | NO   | MUL | NULL                |                             |
| Description | varchar(4000) | YES  |     | NULL                |                             |
+-------------+---------------+------+-----+---------------------+-----------------------------+

我注意到的一件事是,如果表Item中的ID为NULL,则默认值为NULL。但是,ID是主键,因此不可能为NULL。

当我运行INSERT INTO SpatialInfo命令时,mysql给了我这个错误:

ERROR 1048 (23000): Column 'ItemID' cannot be null

我想知道如何解决这个问题。

2 个答案:

答案 0 :(得分:2)

您的错误可能是由于item表中有多行,因此子查询返回多行。试着这样做:

INSERT INTO SpatialInfo (ItemID, Latitude, Longitude)
    SELECT ID AS ItemID, Latitude, Longitude
    from Item
    WHERE ID IS NOT NULL and Latitude IS NOT NULL and Longitude IS NOT NULL;

我不确定你为什么会遇到这个特殊的错误。我希望更多的东西更像是“在预期的情况下返回多行”。

答案 1 :(得分:0)

Null表示缺席值,或者我们可以说它未知。因此,您可以拥有多个字段为空的记录。即使您已指定为主键字段。 因此,请务必在主键字段上使用NOT NULL。