我希望能够将数据插入t1
并将数据填入表t2
,并将主键作为t2
中的外键。
基本上,当我INSERT INTO t1 (first_name, last_name) values ( "blah", "blah");
然后SELECT * FROM t2;
t2
为Empty 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 | |
+-----------+------------------+------+-----+---------+-------+
答案 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未经测试的代码