简体   繁体   English

外键和innodb引擎插入

[英]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表的父表是:

  1. actor 演员
  2. movie 电影

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 . 看来您正在尝试添加或更新子表,但没有设置aidmid任何值。

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. 注意:在这种情况下,您尝试更新一个子表,其中相应的外键(在本例中为aidmid )包含有效值。

Check this SQL FIDDLE . 检查此SQL FIDDLE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM