【问题标题】:How to insert two rows for one primary key SQL?如何为一个主键 SQL 插入两行?
【发布时间】:2020-02-22 01:05:34
【问题描述】:

学习SQL并创建了下表:

+-------+-------+---------+-----------------------+---------+----------+
| idnum | lname | fname   | rname                 | private | linkblue |
+-------+-------+---------+-----------------------+---------+----------+
| 40256 | South | William | south.william@uky.edu |       1 | weso123  |
| 68123 | Smith | Terry   | smith.terry@uky.edu   |       1 | tlsm321  |
+-------+-------+---------+-----------------------+---------+----------+

我需要使用将其中一个名称的地址信息输入到另一个带有以下条目的表中,使用以下代码创建表:

CREATE TABLE ADDR (idnum INT NOT NULL, adtype varchar(10), CONSTRAINT ad CHECK (adtype IN ('bill', 'permanent', 'local')), streetaddr varchar(60) NOT NULL, city varchar(40) NOT NULL, state char(2) NOT NULL, country char(2) NOT NULL, zip varchar(10), PRIMARY KEY (idnum), FOREIGN KEY (idnum) REFERENCES PERSON (idnum));

+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| idnum      | int(11)     | NO   | PRI | NULL    |       |
| adtype     | varchar(10) | YES  |     | NULL    |       |
| streetaddr | varchar(60) | NO   |     | NULL    |       |
| city       | varchar(40) | NO   |     | NULL    |       |
| state      | char(2)     | NO   |     | NULL    |       |
| country    | char(2)     | NO   |     | NULL    |       |
| zip        | varchar(10) | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+

但是我需要为那个人输入两个地址,一个是本地地址,一个是帐单地址,但我不断收到以下错误:

ERROR 1062 (23000): Duplicate entry '40256' for key 'PRIMARY'

这是我用来尝试输入该数据的代码:

INSERT INTO ADDR VALUE (40256, "bill", "street1", "city1", "state1", "country1", zip1), (40256, "local", "street2", "city2", "state2", "country2", zip2);

【问题讨论】:

  • 您应该有一个单独的列来存储 personid。并为 idnum 列分配唯一值。所以 personid 列的值为 40256,idnum 列的值为 1,2,3... 等等
  • 你用的是哪个RDMS mysql不等于sql server

标签: mysql sql-server


【解决方案1】:

您的 idnum 是主键,它在 addr 表中必须是唯一的。

使用

CREATE TABLE ADDR (
    idnum INT NOT NULL AUTO_INCREMENT, 
    person_idnum INT NOT NULL, 
    adtype varchar(10), 
    CONSTRAINT ad CHECK (adtype IN ('bill', 'permanent', 'local')), 
    streetaddr varchar(60) NOT NULL, 
    city varchar(40) NOT NULL, 
    state char(2) NOT NULL, 
    country char(2) NOT NULL, 
    zip varchar(10), 
 PRIMARY KEY (idnum), FOREIGN KEY (person_idnum) REFERENCES PERSON (idnum));

INSERT INTO ADDR VALUE 
    (NULL, 40256, "bill", "street1", "city1", "state1", "country1", zip1), 
    (NULL, 40256, "local", "street2", "city2", "state2", "country2", zip2);

【讨论】:

  • 现在我收到错误ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY
  • 我改变了答案。将“AUTO_INCREMENT”添加到 idnum
猜你喜欢
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
相关资源
最近更新 更多