存储数据库,同时访问的良好模式

时间:2010-03-13 13:00:07

标签: php mysql sql

我对数据库设计有点新意,所以我要求一些建议或某种好的模式。

情况是,有一个数据库,几个表和许多用户。如果用户可以同时与数据库交互,我应该如何设计数据库,或/和我应该使用哪些类型的查询来使其工作?我的意思是,他们可以访问并可以更改同一组数据。

我在考虑交易,但我不确定,如果这是正确的/好的/唯一的解决方案。

更新:

许多人指的是数百甚至数千。客户端将通过PHP中的WWW页面连接到MySQL。他们将使用以下操作:插入,更新,删除和选择,有时加入。这是一个5-20个客户端和1-2个管理员的小型数据库。客户将更新并选择信息。我正在考虑在$ _SESSION中存储一些信息的交易。

2 个答案:

答案 0 :(得分:2)

一种非常有效的简单方法是行版本控制。

  • 将一个版本的int字段添加到主表
  • 插入时,将其设置为0
  • 更新时,将其递增1;在应该是版本字段的地方

实施例

CREATE TABLE myTable (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
vs INT NOT NULL,
)

INSERT INTO myTable VALUES (1, 'Sebastian', 0)

-- first user reads, vs = 0
SELECT * FROM myTable WHERE id = 1

-- second user reads, vs = 0
SELECT * FROM myTable WHERE id = 1

-- first user writes, vs = 1
UPDATE myTable SET name = 'Juan Sebastian', vs = vs + 1 WHERE id = 1 AND vs = 0
(1 row affected) 

-- second user writes, no rows affected, because vs is different, show error to the user or do your logic
UPDATE myTable SET name = 'Julian', vs = vs + 1 WHERE id = 1 AND vs = 0
(0 rows affected) 

答案 1 :(得分:0)

  1. 使用InnoDB作为引擎类型。与MyISAM相反,它支持行级阻塞,因此当有人更新某些记录时,您不必阻止整个表。