Sql 将值插入表中

Sql 将值插入表中,sql,sqlplus,Sql,Sqlplus,我正在尝试将这些值插入到我创建的表中。 这是我试图插入的值 INSERT INTO DDR_Rental (customer_ID, rental_date, rent_fee, film_title, start_date, expiry_date, rating) VALUES (12345, '12-Mar-19', '4.99', 'Peppermint', '12-Mar-19', '22-Mar-19', 4); 这是数据类型和约束 CREATE TABLE DDR_Rental

我正在尝试将这些值插入到我创建的表中。 这是我试图插入的值

INSERT INTO DDR_Rental (customer_ID, rental_date, rent_fee, film_title, start_date, expiry_date, rating)
VALUES (12345, '12-Mar-19', '4.99', 'Peppermint', '12-Mar-19', '22-Mar-19', 4);
这是数据类型和约束

CREATE TABLE DDR_Rental
 (customer_ID NUMBER(5),
  rental_date DATE,
  rent_fee NUMBER(3,2) CONSTRAINT SYS_RENTAL_FEE_NN NOT NULL,
  film_title VARCHAR2(20),
  start_date DATE,
  expiry_date DATE,
  rating NUMBER(5),
  CONSTRAINT SYS_RENTAL_PK PRIMARY KEY ((customer_ID), (rental_date), (film_title)),
  CONSTRAINT SYS_RENTAL_CUS_ID_FK1 FOREIGN KEY (customer_ID) REFERENCES 
     DDR_CUSTOMER(CUSTOMER_ID),
  CONSTRAINT SYS_RENTAL_FILM_TITLE_FK2 FOREIGN KEY (film_title) REFERENCES
     DDR_MOVIE_TITLE(FILM_TITLE),
  CONSTRAINT SYS_RENTAL_EXP_DATE_CK CHECK (expiry_date >= start_date),
  CONSTRAINT SYS_RENTAL_START_DATE_CK CHECK (start_date >= rental_date),
  CONSTRAINT SYS_RENTAL_RATING_CK CHECK (REGEXP_LIKE(rating,('[12345]'))));

错误表示违反了唯一约束(CPRG250.SYS_RENTAL_PK)

您的表中有唯一约束。您的表中已有一条记录,其中包含要插入的
customer\u id
rental\u date
film\u title

INSERT INTO DDR_Rental (customer_ID, rental_date, rent_fee, film_title, start_date, expiry_date, rating)
VALUES (12345, '12-Mar-19', '4.99', 'Peppermint', '12-Mar-19', '22-Mar-19', 4);
尝试此查询,您将看到已存在一条记录

select * from DDR_Rental
where customer_id=12345 and rental_date='12-Mar-19' and film_title='Peppermint'

您的表中有一个唯一的约束。您的表中已有一条记录,其中包含要插入的
customer\u id
rental\u date
film\u title

INSERT INTO DDR_Rental (customer_ID, rental_date, rent_fee, film_title, start_date, expiry_date, rating)
VALUES (12345, '12-Mar-19', '4.99', 'Peppermint', '12-Mar-19', '22-Mar-19', 4);
尝试此查询,您将看到已存在一条记录

select * from DDR_Rental
where customer_id=12345 and rental_date='12-Mar-19' and film_title='Peppermint'

似乎您正试图在同一天为同一客户的同一部电影添加重复的租赁活动。如果您在业务逻辑中允许客户可以租一部电影,在同一天归还,然后再租回来,这显然是可能发生的

了解您的业务,您有两种方法来应对这种情况:

  • 你的商业模式不允许这样。这意味着这是一个重复的记录,您不应该添加当前存在的记录,在这种情况下,显示错误是完全正确的,不允许重复,因为此事件只发生一次

  • 你的商业模式允许这样做。在这种情况下,您应该修改
    rental\u date
    列,将时间与日期一起存储,而不是仅存储日期,以便知道租赁事件实际发生的时间。例如,您可以使用
    datetime
    类型来存储带有时间的日期。这可以在创建表时完成,只需将
    rental\u date
    替换为
    rental\u datetime
    。如果已经创建了表,则需要删除并重新创建
    主键
    ,然后可以使用
    ALTER table ddr\u rent ALTER column rent\u date time
    更改列的类型,并重新创建主键。检查表中存储的值,因为
    2019-01-01
    现在将表示为
    2019-01-01 00:00:00.000
    附加之前未指定的时间

  • 除了(1)之外,您还可以包装代码并处理此异常,以便在发生这种情况时返回一条明确的消息,表明电影已被租用


    此外,由于您的库存中没有存储电影的表,这可能会导致错误,因为您可能有一个以上的电影副本。在这种情况下,我建议您创建单独的胶片和胶片拷贝表,以正确识别已租用的胶片的哪个拷贝,以便您可以租用另一个拷贝。

    似乎您正试图在某一天为同一客户的同一胶片添加重复的租赁事件。如果您在业务逻辑中允许客户可以租一部电影,在同一天归还,然后再租回来,这显然是可能发生的

    了解您的业务,您有两种方法来应对这种情况:

  • 你的商业模式不允许这样。这意味着这是一个重复的记录,您不应该添加当前存在的记录,在这种情况下,显示错误是完全正确的,不允许重复,因为此事件只发生一次

  • 你的商业模式允许这样做。在这种情况下,您应该修改
    rental\u date
    列,将时间与日期一起存储,而不是仅存储日期,以便知道租赁事件实际发生的时间。例如,您可以使用
    datetime
    类型来存储带有时间的日期。这可以在创建表时完成,只需将
    rental\u date
    替换为
    rental\u datetime
    。如果已经创建了表,则需要删除并重新创建
    主键
    ,然后可以使用
    ALTER table ddr\u rent ALTER column rent\u date time
    更改列的类型,并重新创建主键。检查表中存储的值,因为
    2019-01-01
    现在将表示为
    2019-01-01 00:00:00.000
    附加之前未指定的时间

  • 除了(1)之外,您还可以包装代码并处理此异常,以便在发生这种情况时返回一条明确的消息,表明电影已被租用


    此外,由于您的库存中没有存储电影的表,这可能会导致错误,因为您可能有一个以上的电影副本。在这种情况下,我建议您创建单独的胶片和胶片副本表,以正确识别已租用的胶片副本,以便您可以租用另一副本。

    您是否检查了客户12345关于租赁日期19年3月12日和文件名Peppermint的记录是否已经存在?如果该数据已经存在,数据库将阻止您输入另一个精确的组合,因为这三个字段构成主键(唯一且不为空)。您是否检查过客户12345关于租赁日期19年3月12日和文件名Peppermint的记录是否已经存在?若那个些数据已经存在,那个么数据库将阻止你们输入另一个精确的组合,因为这三个字段构成主键(唯一且不为空),这是什么意思?这是否意味着我不需要插入这些值?我如何解决这个问题?那要看情况。一个顾客每天能租一部以上的电影吗?如果是,则应删除该约束。如果不允许发生,则显示一条消息,说明不允许该行为谢谢!但不确定如何删除约束,因为它是主键。它说“这个唯一/主键被一些外键引用”这是什么意思?这是否意味着我不需要插入这些值?我如何解决这个问题?那要看情况。一个顾客每天能租一部以上的电影吗?我