![请教mysql怎么实现向多个表同时插入数据,第1张 请教mysql怎么实现向多个表同时插入数据,第1张](/aiimages/%E8%AF%B7%E6%95%99mysql%E6%80%8E%E4%B9%88%E5%AE%9E%E7%8E%B0%E5%90%91%E5%A4%9A%E4%B8%AA%E8%A1%A8%E5%90%8C%E6%97%B6%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE.png)
在一个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去做逻辑处理
评论列表(0条)