假设我们有这些SQL表:
[Articles]
bill int (pkey)
arti int (pkey)
name varchar(50)
[Bills]
bill int (pkey)
fdate date
uid int
假设我们在网格上有一个项目列表,代表一个账单:
--------------------------------------------------------------
Id[ 15] Date [01-01-1980]
User [pepe]
Code Name
----------------------------
1 Something
2 Article name
3 lolololololoolo
4 datadatdatdatdata
5 datadatdatdatdata
--------------------------------------------------------------
所以,我们有一个标题,一个id,一个用户,一个日期等等。然后,网格中充满了项目。
当用户决定(保存按钮)时,两个表将同时保存。并且,用户还可以查看先前的帐单并对其进行修改。那么,还有什么更好的呢?
答案 0 :(得分:3)
无论
将写入包裹到事务中的两个表
答案 1 :(得分:2)
如果您只有两个选择,那么它主要取决于您的要求和您要优化的用例。那说你应该考虑以下
效果
在选项1中删除所有文章需要更长的时间。
在选项2中,对于包含10篇文章的法案,不添加任何文章将花费相同的时间,因为将10篇文章添加到没有文章的帐单中。
<强>审计强>
选项2很难审核
<强>并发强> 假设在应用程序中没有并发检测
两位用户同时开帐单。每个用户添加添加五篇文章和点击保存。
在选项1中,您最终会得到10篇文章。 在选项2中,你最终会得到五个。
我不能说哪个是对的。
交易效果
向现有账单添加商品时,在选项2中,交易将花费比需要更长的时间。这会增加该用例死锁的可能性。
在没有交易支持的情况下保存失败这假设您的应用不使用交易。
在选项1中,可能会丢失新文章,删除应删除的文章
在选项2中,所有文章都有可能丢失
答案 2 :(得分:1)
为什么不使用MySQL语法ON DUPLICATE KEY?
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
INSERT INTO table (a,b,c) VALUES
(1,2,3) ON DUPLICATE KEY UPDATE
c=c+1;