【问题标题】:SQL error code: 1364 Field 'CustomerNumber' doesn't have a default valueSQL 错误代码:1364 字段 'CustomerNumber' 没有默认值
【发布时间】:2018-08-14 12:22:33
【问题描述】:
CREATE TABLE CUSTOMER(
CustomerNumber int NOT NULL PRIMARY KEY,
CustomerFirstName char(30) NOT NULL,
CustomerLastName char(30) NOT NULL,
Phone char(12) NOT NULL
);

CREATE TABLE ENROLLMENT( 
CourseNumber int NOT NULL, 
CustomerNumber int NOT NULL, 
AmountPaid float(2) NOT NULL, 
CONSTRAINT pk_ENROLLMENT PRIMARY KEY (CustomerNumber, CourseNumber),
CONSTRAINT ENROLLMENTS_fk FOREIGN KEY (CustomerNumber) 
    REFERENCES CUSTOMER(CustomerNumber), 
CONSTRAINT fk_ENROLLMENT FOREIGN KEY (CourseNumber) 
    REFERENCES COURSE(CourseNumber) 
    ON DELETE CASCADE ON UPDATE CASCADE 
); 

INSERT INTO CUSTOMER(CustomerNumber, CustomerFirstName, CustomerLastName, Phone)
VALUES (992, 'Steve', 'Johnson', '631-998-2244');
INSERT INTO CUSTOMER(CustomerNumber, CustomerFirstName, CustomerLastName, Phone)
VALUES (998, 'Jane', 'Lovegood', '516-777-0033');
INSERT INTO CUSTOMER(CustomerNumber, CustomerFirstName, CustomerLastName, Phone)
VALUES (987, 'John', 'Lovegood', '516-777-2888');

INSERT INTO ENROLLMENT(CourseNumber)
SELECT CourseNumber
FROM COURSE
WHERE Course = 'Statistics' LIMIT 1;
INSERT INTO ENROLLMENT(CustomerNumber, AmountPaid)
SELECT CustomerNumber, 600.00
FROM CUSTOMER
WHERE CustomerLastName = 'Johnson' LIMIT 1;

【问题讨论】:

  • 看起来问题可能出在添加注册的部分。您添加仅包含 coursenumber 的行,然后添加仅包含 customernumber 和 amountpaid 的另一行。这些数据可能都应该放在同一行。
  • ENROLLMENT的结构是什么?
  • @JacobH CREATE TABLE ENROLLMENT( CourseNumber int NOT NULL, CustomerNumber int NOT NULL, AmountPaid float(2) NOT NULL, CONSTRAINT pk_ENROLLMENT PRIMARY KEY (CustomerNumber, CourseNumber), CONSTRAINT ENROLLMENTS_fk FOREIGN KEY (CustomerNumber) REFERENCES CUSTOMER(CustomerNumber), CONSTRAINT fk_ENROLLMENT FOREIGN KEY (CourseNumber) REFERENCES COURSE(CourseNumber) ON DELETE CASCADE ON UPDATE CASCADE );
  • 错误信息很清楚。您的 INSERT 没有为 CustomerNumber 列指定任何值,并且该列不是 NULL 并且没有默认值。
  • @jarlh 添加默认值不起作用

标签: mysql sql error-handling


【解决方案1】:

您可以连接包含数据的表并为 INSERT INTO 语句提供一个完整的行。由于列的限制,您不能进行两次单独的插入。

INSERT INTO ENROLLMENT(CourseNumber, CustomerNumber, AmountPaid)
  SELECT COURSE.CourseNumber, CUSTOMER.CustomerNumber, 600.00
  FROM COURSE
  LEFT JOIN CUSTOMER on CUSTOMER.CustomerLastName='Johnson'
  WHERE COURSE.Course = 'Statistics' LIMIT 1;

这对我来说是“哦,但是如果两个客户的姓氏相同怎么办”,这将是一个问题。

【讨论】:

  • 另外,如果两门课程被称为“统计学”。但是你得到了我的支持,因为这个问题已经解决了。我们无法修复 OP 的数据或结构,我们只能提出建议......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 2017-04-13
  • 2019-11-23
  • 2013-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多