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

Mysql 将NOT NULL值插入NOT NULL字段会导致错误,mysql,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

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

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                |                             |
+-------------+---------------+------+-----+---------------------+-----------------------------+
我注意到的一点是,如果表项中的ID为NULL,则默认值为。但是,ID是主键,因此不可能为NULL

当我运行INSERT-INTO-SpatialInfo命令时,mysql给了我以下错误:

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

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

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

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;

我不知道你为什么会犯这样的错误。我希望类似于“多行返回其中一行”。

Null表示缺少值,或者我们可以说它是未知的。因此,您可以有多个字段为空的记录,即使您已指定为主键字段。
因此,请确保在主键字段上使用NOTNULL。

我不确定这段代码是否符合我的要求:我的目的是将ItemID从一个项目插入到另一个项目ID,插入到空间信息中,将纬度插入到SpatialInfo的纬度中,这同样适用于经度。在代码中,您将SELECTID写为ItemID、纬度和经度。我对这一行感到困惑:您是否选择这三个属性并传递到一个属性ID?如果是这样,我如何将这三个单独的属性传递到SpatialInfo?所以我测试了它,它做了我想要的事情。我只是对值语法感到困惑。我该怎么用呢?@最酷的企鹅。不要费心于
值()
<代码>插入。选择执行所有操作
插入。values()
有,等等。很抱歉@TheCoolestPenguin。我不太擅长解释事情。请参考以下问题以获得更清晰的答案。[链接]