小编dan*_*gel的帖子

MySQL在没有自动增量的情况下获取下一个唯一值

我有一个 MySQL 数据库 (InnoDB),我正在开发它用于跟踪我组织的工作订单。有多个“站点”,每个站点的工作订单号从 100 开始。

WorkorderID    SiteID    SiteWorkorderNum
     1           1            100
     2           1            101
     3           2            100
Run Code Online (Sandbox Code Playgroud)

WorkorderID是自动增量字段。
SiteIDSiteWorkorderNum都设置为唯一约束。

每当即将为特定站点插入新工作订单时,应用程序都会检查登录者的站点 ID 的 max(SiteWorkorderNum) 并将该值返回到插入语句。我想避免的问题是,同一站点的两个用户是否同时输入新的工作订单。

我有几个可能的解决方案,但我想看看是否有更好的方法,因为每个方法都有其缺点,但我确信一个会比另一个更好,当然我对新想法持开放态度。

1)锁定表以保证在我们检索并插入我们的值之前没有其他用户检索 SiteWorkorderNum 值(但是假设我们每分钟有成千上万的用户试图输入工作订单,表锁定不会减慢速度吗? )

2)不要锁定表,检索下一个可用的 SiteWorkorderNum 并尝试插入到数据库中,如果我收到一个唯一约束错误,请捕获该错误并重试,直到我成功。(这可能会释放表,但再次假设我们在同一站点有数千个用户,多个数据库调用是否会有点低效?)

我是否对这些解决方案中的任何一个“可能”影响性能过于偏执?当然,我没有成千上万的用户,但我想在这个设计中应用最佳实践,以防我曾经在一个流量很高的项目上工作。

mysql constraint auto-increment locking

7
推荐指数
1
解决办法
2万
查看次数

MYSQL 只显示允许为空的列

我需要能够提取允许 NULL 值的列名,我知道

show columns from TABLE
Run Code Online (Sandbox Code Playgroud)

将显示表属性以及该列是否允许空值,但是有没有办法只返回允许空值的列名。

show columns from TABLE where Null = 'YES' 不起作用,但它解释了我需要完成的工作。

当然,很容易把所有东西都拉出来,然后再整理出来,但是如果有办法做我要问的事情,我想学习它。

mysql null

3
推荐指数
1
解决办法
4487
查看次数

标签 统计

mysql ×2

auto-increment ×1

constraint ×1

locking ×1

null ×1