创建TableA记录时,MySQL自动将记录插入TableB

时间:2015-05-04 13:21:22

标签: mysql sql database tsql relational-database

我有两张桌子。 msUser和msUserChar。我在msUser和msUserChar之间创建了一个关系,其中msUser中的PK是msUserChar中的FK

我需要的是,当一条记录插入msUser时,还会在msUserChar中创建一条记录,其中FK是来自msUser的PK。

我尝试过使用约束,更新级联和各种其他关系方法。我知道,我可以使用Last_Insert_Id方法,或者使用事务性mysql,并且只在创建了两个记录时才提交。我想知道,如果有办法以关系的方式做到这一点。

基本上,用户必须拥有一个角色。因此,当用记录插入用户表时,会在用户字符表中创建相关记录。

根据要求,这里是描述的表格:

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| _msId     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| msUser    | varchar(25)      | NO   |     | NULL    |                |
| msPass    | varchar(30)      | NO   |     | NULL    |                |
| msSecret  | varchar(30)      | NO   |     | NULL    |                |
| msEmail   | varchar(45)      | NO   |     | NULL    |                |
| msAccType | int(2)           | NO   |     | NULL    |                |
| msLastLog | datetime         | YES  |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+

+---------------+------------------+------+-----+---------+----------------+
| Field         | Type             | Null | Key | Default | Extra          |
+---------------+------------------+------+-----+---------+----------------+
| _msCharUserID | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| _msId         | int(10) unsigned | YES  | MUL | NULL    |                |
| _msCharID     | int(10) unsigned | YES  | MUL | NULL    |                |
| msChar_1      | int(10)          | YES  |     | NULL    |                |
| msChar_2      | int(10)          | YES  |     | NULL    |                |
| msChar_3      | int(10)          | YES  |     | NULL    |                |
+---------------+------------------+------+-----+---------+----------------+

2 个答案:

答案 0 :(得分:1)

你可以使用触发器

delimiter |

CREATE TRIGGER TrgMsUser BEFORE INSERT ON msUser 
  FOR EACH ROW
  BEGIN
    INSERT INTO msUserChar SET _msId = LAST_INSERT_ID();
  END;
|

delimiter ;

答案 1 :(得分:1)

在MySQL中,一个查询是不可能的,因为INSERT只能一次将数据插入到一个表中。因此,如果您不想使用TRIGGERS,那么您可以试试这个

  1. 创建一个将执行2个INSERT语句的存储过程

  2. 在事务中包装这2个INSERTS以确保两个查询都成功。