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
,那么你可以试试这个
创建一个将执行 2 个 INSERT 语句的存储过程
将这 2 个 INSERTS 包装在事务中以确保两个查询都成功。
我有两个 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
,那么你可以试试这个
创建一个将执行 2 个 INSERT 语句的存储过程
将这 2 个 INSERTS 包装在事务中以确保两个查询都成功。