请教mysql怎么实现向多个表同时插入数据

请教mysql怎么实现向多个表同时插入数据,第1张

在一个jsp 页面表单上的数据,submit 后表单上不同的数据分别同时插入不同的表. 具体表的情况是这样的的,三个表为: person 表,operator 表,contact 表,三个表的主键为ObjectID,通过ObjectID 关联. 假如只设置了person 表的ObjectID 是自增字段,应该如何实现? 假如ObjectID 不是自增字段,应该如何设计数据表? ------解决方案-------------------------------------------------------- 建一个sequence 表,在插入表之前先取得person 表的ObjectID,然后分别插入各张表。 存储过程也可以, 还有可以将表的默认值关联到sequence 上,这样插入的时候不需要插入这个字段,只要插入其他值就可以。 ------解决方案-------------------------------------------------------- 1、假如只设置了person 表的ObjectID 是自增字段,应该如何实现? -------------------- person 表Objectid 是自增字段,那么可以先插入它,然后取出它。如果你使用了ORM 框架,那么它会自动帮你把KEY 取出来帮设置好。如果没有用框架,那么用MYSQL 的SQL 指令SELECT LAST_INSERT_ID()是可以取到你刚刚插入的记录的KEY的。然后吧这个值附给其他2个记录。 2、假如ObjectID 不是自增字段,应该如何设计数据表? -- 建议不要这样做。 非要这么做的话,可以: (1)做一个方法,在每次插入前,找到 person 表的最大的 Objectid,然后加1。这种办法需要考虑的是并发冲突导致抢号事件发生,所以要考虑采用同步。 (2)做一个专门产生号码的空表,只定义一个自增字段,然后用这个表的KEY 作为3 个表的KEY。--其实跟前面的方法一样,只不过把person的自增字段移到了这个多余的表而已。 (3)专门做一个流水号表,维持一行记录,每次把流水号加 1。这种方式同样要考虑同步的问题。 综上所述,还是1 合适!

可以做到,事物和存储过程都行

不过一条语句的话,就要用到触发器

大致思路是

在表A

建立一个触发器,然后再插入的时候向表B中执行插入 *** 作

假设表A中有一个字段叫description

就是说明字段

create

trigger

tr_tableA_insert_after

after

insert

on

tableA

for

each

row

insert

into

B(B_Sm)

values

(NEW.description)

然后你在向A中插入一条数据的时候,触发器会自动在B中插入一条数据

因为两表数据量是一样的,所以自增长id也是一样的,这样就可以形成关联


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6113150.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-15
下一篇 2023-03-15

发表评论

登录后才能评论

评论列表(0条)

保存