请教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 合适!

1、先添加完,删除所有重复的记录,再insert一次

insert into A select * from B

insert into A select * from C

insert into A select * from D

2、删除重复的记录只保留一行

delete from A where name in (select id from t1 group by id having count(id) >1)and rowid not in (select min(rowid) from t1 group by id having

count(*)>1)

3、记录一下这些重复的记录,

mysql -uroot -p123456 -Ddb01 -e 'select b.id from t1 b group by id having count(b.id) >1' | tail -n +2 >repeat.txt

删除全部重复的记录

delete from A where name in (select name from t1 group by name having count(name) >1)

再次插入多删的重复记录

#!/bin/sh

for id1 in `cat repeat.txt`do

mysql -uroot -p123456 -Ddb01 -e "insert into A select * from B where id='${id1}'"

done

需求有问题,

前面讲到要update products,但后面又讲到没有资料时要进行另外两个表的数据insert *** 作,这明显是不同的两个DML,怎么可能一个sql搞定

只能用procedure去做逻辑处理


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

原文地址: https://outofmemory.cn/zaji/6139247.html

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

发表评论

登录后才能评论

评论列表(0条)

保存