【问题标题】:MYSQL Insert Data into table using Foreign Keys from different tablesMYSQL 使用来自不同表的外键将数据插入表中
【发布时间】:2016-07-04 14:44:24
【问题描述】:

我有一个由“LOAD DATA LOCAL INFILE”创建的临时表“teststepdump”。临时表包含了通过外键连接在一起的不同表的数据在表TestResult中:

  1. teststepdump (dummyno, stationno, name, result)
  2. duttest(ID、DUTID、processTime)
  3. dut(ID,DummyNr)
  4. 站(ID,站号)
  5. 测试步骤名称(ID、名称)
  6. teststepresult(DUTTestID,TeststepID,Result)

我正在使用存储过程尝试这种方式,但出现错误 1452:

SQL Fehler (1452):无法添加或更新子行:外键 约束失败(database.teststepresult, CONSTRAINT teststepresult_ibfk_1 外键 (DUTTestID) 引用 duttest (ID) 更新级联删除级联)

BEGIN
DECLARE dt_id INT;
SELECT teststepresult.DUTTestID INTO dt_id FROM teststepresult
INNER JOIN duttest ON teststepresult.DUTTestID = duttest.ID
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.StationID = station.Nummer
INNER JOIN teststepdump ON teststepresult.ID = teststepdump.ID
WHERE
dut.DummyNr = teststepdump.dummyno AND
station.Nummer = teststepdump.stationno;

INSERT INTO teststepresult (DUTTestID, TeststepID, Result) 
SELECT dt_id, teststepname.ID, teststepdump.Result 
FROM teststepdump
INNER JOIN teststepname ON teststepdump.name = teststepname.name
WHERE 
teststepname.name = teststepdump.name;
terminate teststepdump;
END

对于单个 INSERT,此存储过程对我有用,但我想避免“for”循环;:

BEGIN

DECLARE t_id INT;
DECLARE tn_id INT;

SELECT teststepname.ID INTO tn_id FROM teststepname 
WHERE  teststepname.Name = name;

SELECT duttest.ID INTO t_id FROM duttest
INNER JOIN dut ON duttest.DUTID = dut.ID 
INNER JOIN station ON duttest.stationID = station.ID
WHERE
dut.DummyNr = dummyno AND 
station.Nummer = stationno;

IF NOT t_id IS NULL AND NOT tn_id IS NULL THEN
INSERT INTO teststepresult (DUTTestID, TeststepID, Result) 
VALUES (t_id, tn_id, Result);
END IF;
END

【问题讨论】:

  • 你能告诉我们表teststepdump的结构吗? (我的意思是创建sql代码)
  • 创建表 teststepdump (ID INT(11) NOT NULL AUTO_INCREMENT, dummyno BIGINT(20) NOT NULL DEFAULT '0', stationno INT(11) NOT NULL DEFAULT ' 0', name VARCHAR(50) NOT NULL DEFAULT '0' COLLATE 'utf8_bin',Result TINYINT(4) NULL DEFAULT NULL, PRIMARY KEY (ID)
  • 好像没有外键...能不能把teststepresult的结构展示一下?
  • 是的,teststepdump 没有外键。
  • teststepresult 呢?

标签: mysql database stored-procedures


【解决方案1】:

我解决了问题!

BEGIN
INSERT INTO teststepresult (DUTTestID, StepName, Result) 
SELECT duttest.DUTID, teststepdump.name, teststepdump.Result 
FROM duttest
INNER JOIN dut ON duttest.DUTID = dut.ID
INNER JOIN station ON duttest.StationID = station.ID
INNER JOIN teststepdump ON dut.DummyNr = teststepdump.dummyno
WHERE 
dut.DummyNr = teststepdump.dummyno AND
station.Nummer = teststepdump.stationno;
#truncate teststepdump; 
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2017-04-11
    相关资源
    最近更新 更多