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