相关疑难解决方法(0)

是什么决定了多表查询的锁定顺序?

SQL标准是否指定了多表查询的锁定顺序?

例如,给定:

SELECT department.id FROM permissions, terminals, departments WHERE department.id = ? AND terminal.id = ? AND permissions.parent = department.id AND permissions.child = terminals.id;

  1. SQL标准是保证锁定顺序还是由(特定于实现的)执行计划确定?
  2. 有没有办法保证锁定顺序?
  3. 如果无法保证锁定顺序,我们应该如何防止死锁?

更新:如果不解释您的推理,请不要投票支持关闭此问题.就我而言,这是一个编程问题,这使得它成为Stackoverflow的主题.如果您认为问题需要进一步完善,请解释一下,我将非常乐意回答您.

sql deadlock

12
推荐指数
1
解决办法
2167
查看次数

是否使用子资源?

我们来看下面的例子:

我们希望从RESTful API公开公司和员工信息.

公司数据应该非常简单:

GET api/v1/companies
GET api/v1/companies/{id}
Run Code Online (Sandbox Code Playgroud)

员工属于公司,但我们仍然希望单独检索它们,因此哪种解决方案最好:

解决方案1:使用子资源

获取公司的所有员工:

GET api/v1/companies/{companyId}/employees
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/companies/{companyId}/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

解决方案2:使用独立资源

获取公司的所有员工:

GET api/v1/employees?companyId={companyId}
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

两种选择似乎都有其优点和缺点.

  • 对于子资源,当想要检索单个员工时,我可能并不总是拥有CompanyId.

  • 使用独立资源,如果我们想要RESTful,那么让公司的所有员工都应该使用子资源方法.

否则,我们可以使用混合,但这缺乏一致性:

获取公司的所有员工:

GET api/v1/companies/{companyId}/employees
Run Code Online (Sandbox Code Playgroud)

获得特定员工:

GET api/v1/employees/{employeeId}
Run Code Online (Sandbox Code Playgroud)

如果我们想要坚持RESTful标准,那么采取这种情况的最佳方法是什么?

rest restful-url restful-architecture asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
1197
查看次数