MYSQL如何在插入基于父表的数据时用外键更新子表值

时间:2017-07-06 08:32:11

标签: mysql

我有2个表,父表和子表。子表具有父表的外键。我已经成功创建了外键。但是如何在我只插入'id_parent'时自动更新基于父表的字段'nama'? 我只试过了:

kernel void multiply(global int* A,
                 const int M,
                 global int* B,
                 const int N,
                 global int* C) {
    //const int row = get_local_id(0); // Row ID of C (0..M)
    const int globalRow = get_global_id(0);
    uint globalCol;
    int i;
    for(i=0;i<M+N+1;i++) {
        C[i]=0;
    }

    for (globalCol=0; globalCol<N; globalCol++) {
        int val=A[globalRow]*B[globalCol];
        C[globalCol + globalRow +1]+=val/10;
        //barrier(CLK_GLOBAL_MEM_FENCE);
        C[globalCol + globalRow]+=val%10;
        barrier(CLK_GLOBAL_MEM_FENCE); 

        C[globalCol+1+globalRow]+=val/10;

    }

    int flag=1;
    while (flag) {
        flag=0;
        for (i=M+N-1   ; i>=0 ; i--) {
            if (C[i]>9) {
                barrier(CLK_GLOBAL_MEM_FENCE);

                C[i+1]+=C[i]/10;
                barrier(CLK_GLOBAL_MEM_FENCE);

                C[i]=C[i]%10;
                //barrier(CLK_GLOBAL_MEM_FENCE);
                flag=1;
            }
        }
    }
}

但字段'name'值仍为NULL

这是我的表格:

INSERT INTO child (id_parent) values (1)

父表有这样的数据

CREATE TABLE `child` (
  `id` int(6) NOT NULL AUTO_INCREMENT,
  `id_parent` int(6) DEFAULT NULL,
  `nama` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `aa` (`nama`,`id_parent`),
  CONSTRAINT `aa` FOREIGN KEY (`nama`, `id_parent`) REFERENCES `parent` (`nama`, `id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=armscii8;

-- ----------------------------
-- Table structure for parent
-- ----------------------------
CREATE TABLE `parent` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `nama` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `nama` (`nama`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=armscii8;

2 个答案:

答案 0 :(得分:1)

检查此行:

KEY `aa` (`nama`,`id_parent`),
  CONSTRAINT `aa` FOREIGN KEY (`nama`, `id_parent`) REFERENCES `parent` (`nama`, `id`)

此处您已在两列上创建foreign key关系,即parentnamaid)。在这种情况下,您只能在子表中插入已经在父表中的那些组合值。请记住,这里的外键是通过组合两列来实现的,而不是在一列上。

答案 1 :(得分:0)

在我的情况下,我的子表中有一个Location TransId列。我已从父ti子表列更新位置名称。我完成了下面的

UPDATE     表-A 组     Table_A.CityName = Table_B.LocationDesc

来自

<ParentTable> AS Table_A
INNER JOIN <ChildTable> AS Table_B
    ON Table_A.CityTransID = Table_B.TransID