Mysql SQL错误代码:1364字段';客户编号';不';没有默认值

Mysql SQL错误代码:1364字段';客户编号';不';没有默认值,mysql,sql,error-handling,Mysql,Sql,Error Handling,您可以联接包含数据的表,并为INSERT INTO语句提供一个完整的行。由于列上的约束,无法执行两个单独的插入 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( Cou

您可以联接包含数据的表,并为INSERT INTO语句提供一个完整的行。由于列上的约束,无法执行两个单独的插入

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。这些数据可能都应该放在同一行中。注册的结构是什么?@JacobH
创建表注册(CourseNumber int NOT NULL,CustomerNumber int NOT NULL,AmountPaid float(2)NOT NULL,CONSTRAINT pk_注册主键(CustomerNumber,CourseNumber),CONSTRAINT注册_fk外键(CustomerNumber)引用客户(CustomerNumber),约束fk_注册外键(CourseNumber)引用课程(CourseNumber),在更新级联中删除级联错误消息非常清楚。您的INSERT没有为CustomerNumber列指定任何值,并且该列不是空的,也没有默认值。@jarlh添加默认值不起作用。如果两个课程被称为“统计数据”,那该怎么办。但你得到了我的支持,因为这个问题已经解决了。我们无法修复OP的数据或结构我们只能提出建议。。。
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;