[英]foreign Key and innodb engine insert
I couldn't insert salary values into this table error massage Field 'Tid' doesn't have a default value 我无法在此表格中插入薪水值错误消息“ Tid”字段没有默认值
I have tried so many times by adding constraint or default fk but it doesn't work out 我已经通过添加约束或默认fk尝试了很多次,但没有成功
My code is this 我的代码是这样
CREATE TABLE Actor (
aid INTEGER NOT NULL AUTO_INCREMENT,
NAME VARCHAR(20),
PRIMARY KEY (aid)
) ENGINE=INNODB;
CREATE TABLE Movie (
mid INTEGER NOT NULL AUTO_INCREMENT,
NAME VARCHAR(30),
YEAR INTEGER,
PRIMARY KEY (mid)
) ENGINE=INNODB;
CREATE TABLE acts_in (
aid INTEGER NOT NULL AUTO_INCREMENT,
mid INTEGER NOT NULL,
PRIMARY KEY (aid, mid),
FOREIGN KEY (aid) REFERENCES Actor (aid),
FOREIGN KEY (mid) REFERENCES Movie (mid)
) ENGINE=INNODB;
SHOW TABLES;
INSERT INTO Actor(NAME)
VALUES ('Brad Pitt'), ('Edward Norton'), ('Julia Roberts');
INSERT INTO Movie (NAME, YEAR)
VALUES ('Fight Club', 1999), ('Ocean\s Eleven', 2001), ('Fury', 2014), ('The Incredible Hulk', 2008), ('Closer', 2004);
INSERT INTO acts_in (aid, mid)
VALUES (1, 1), (1, 2), (1, 3),(2, 1), (2, 4), (3,2), (3, 5);
ALTER TABLE Acts_in
ADD COLUMN Salary INTEGER NOT NULL;
INSERT INTO acts_in (Salary)
VALUES (2000), (4000), (5000), (50), (7000), (750000), (888888);
Your acts_in table is a child table. 您的acts_in表是一个子表。 The parent tables of
acts_in table are:
act_in表的父表是:
So you cannot add or update a child table row if the corresponding foreign key values don't exist in the parent tables. 因此,如果父表中不存在相应的外键值,则无法添加或更新子表行。
In this case you cannot execute this query: 在这种情况下,您将无法执行以下查询:
INSERT INTO acts_in (Salary)
VALUES (2000), (4000), (5000), (50), (7000), (750000), (888888);
Look you are trying to add or update a child table but you didn't set any value of aid
and mid
. 看来您正在尝试添加或更新子表,但没有设置
aid
和mid
任何值。
Try instead the following queries to update the salaries: 尝试尝试以下查询来更新工资:
UPDATE acts_in SET Salary = 2000 WHERE aid = 1 AND mid = 1;
UPDATE acts_in SET Salary = 4000 WHERE aid = 1 AND mid = 2;
UPDATE acts_in SET Salary = 5000 WHERE aid = 1 AND mid = 3;
UPDATE acts_in SET Salary = 50 WHERE aid = 2 AND mid = 1;
UPDATE acts_in SET Salary = 7000 WHERE aid = 2 AND mid = 4;
UPDATE acts_in SET Salary = 750000 WHERE aid = 3 AND mid = 2;
UPDATE acts_in SET Salary = 888888 WHERE aid = 3 AND mid = 5;
OR 要么
this single query: 这个查询:
UPDATE
acts_in
SET Salary = CASE WHEN aid = 1 AND mid = 1 THEN 2000
WHEN aid = 1 AND mid = 2 THEN 4000
WHEN aid = 1 AND mid = 3 THEN 5000
WHEN aid = 2 AND mid = 1 THEN 50
WHEN aid = 2 AND mid = 4 THEN 7000
WHEN aid = 3 AND mid = 2 THEN 750000
WHEN aid = 3 AND mid = 5 THEN 888888
END
WHERE (aid,mid) IN ((1,1),(1,2),(1,3),(2,1),(2,4),(3,2),(3,5));
Note: In this case you are trying to update a child table where the corresponding foreign keys (in this case aid
and mid
) are containing valid values. 注意:在这种情况下,您尝试更新一个子表,其中相应的外键(在本例中为
aid
和mid
)包含有效值。
Check this SQL FIDDLE . 检查此SQL FIDDLE 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.