MySQL更新到其他表

时间:2011-11-18 02:05:18

标签: mysql primary-key

我希望能够将数据插入t1并将数据填入表t2,并将主键作为t2中的外键。

基本上,当我INSERT INTO t1 (first_name, last_name) values ( "blah", "blah");然后SELECT * FROM t2; t2Empty Set (0.00 sec) t2时,我当前的设置是怎样的?它不应该至少显示1的默认id

t1

+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| first_name | varchar(20)      | NO   |     | NULL    |                |
| last_name  | varchar(20)      | NO   |     | NULL    |                |
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
+------------+------------------+------+-----+---------+----------------+

t2

+-----------+------------------+------+-----+---------+-------+
| Field     | Type             | Null | Key | Default | Extra |
+-----------+------------------+------+-----+---------+-------+
| address   | varchar(50)      | NO   |     | NULL    |       |
| id        | int(10) unsigned | NO   | MUL | NULL    |       |
| last_name | varchar(20)      | YES  |     | NULL    |       |
+-----------+------------------+------+-----+---------+-------+

3 个答案:

答案 0 :(得分:1)

不,表格不会自动传播。 (但是你可以使用触发器执行此操作)您必须插入t2

答案 1 :(得分:1)

在关系数据库中,FOREIGN KEY是一个声明,您打算在T2中插入必须与T1中已存在的值匹配的值,并且您希望数据库拒绝执行任何会破坏此关系的操作。

这并不意味着数据库会自己创建记录以满足关系。如果您尝试在T1中插入一个T1中不存在的值,该命令将失败;它不会将所需的记录添加到T1。

然而,这与您所建议的相反,您希望自动生成外键值。但是,并不要求主键值实际具有引用,而且对主键值的引用次数没有限制 - 那么数据库如何猜测应该创建的内容T2?

也就是说,如果你希望自己的一些代码在数据添加到T1时自动执行,代码可以做任何你想做的事情,你可以在T1上创建一个触发器

答案 2 :(得分:0)

您可以在表t1上创建一个触发器,以便它在t2中插入一行,其中包含正确的id,其他字段为NULL

外键不会为您插入记录。

DELIMITER ;;
CREATE TRIGGER insert_addr_rec BEFORE INSERT ON t1
FOR EACH ROW BEGIN
   INSERT INTO t2 SET id=NEW.id, last_name=NEW.last_name
END ;;
DELIMITER ;

NB未经测试的代码