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

MySQL Auto Insert Record Into TableB when TableA record is created

我有两个 table。 msUser 和 msUserChar。我在 msUser 和 msUserChar 之间建立了关系,其中 msUser 中的 PK 是 msUserChar

中的 FK

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

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

本质上,每个用户都必须拥有一个角色。因此,当用户 table 插入一条记录时,将在用户字符 table.

中创建一条相关记录

根据要求,这里描述了 table:

+-----------+------------------+------+-----+---------+----------------+
| 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    |                |
+---------------+------------------+------+-----+---------+----------------+

你可以使用触发器

delimiter |

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

delimiter ;

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

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

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