我已经看过几次这样的问题,并且我正在尝试以非重叠的方式决定存储范围的最佳方式.例如,在安排某种资源时,一次只能有一个人使用.我看到的大多数是这样的:
PERSON ROOM START_TIME END_TIME
Col. Mustard Library 08:00 10:00
Prof. Plum Library 10:00 12:00
Run Code Online (Sandbox Code Playgroud)
防止新条目与现有时间表重叠的最佳方法是什么,例如,如果Scarlet小姐想要从11:00到11:30预订图书馆?内联约束不起作用,我不认为这可以在触发器中轻松完成.处理最初在表中查找现有冲突的所有插入的过程?
其次,处理并发问题的最佳方法是什么?说,Scarlet小姐在13:00到15:00之间想要图书馆,White夫人想要从14:00到16:00.(1)的程序会发现这些时间表都可以接受,但是明确地将它们放在一起,它们不是.我唯一能想到的是手动锁定表格或某种互斥锁.
上面的表((room,start_time)的主键是什么?
伪代码:
开始存储过程
承诺
检查第a行//第1步的值列1
更新第a行第2行的第1列
承诺
结束存储过程
这个sp线程安全吗?
Declare
tag_rec prep_tag%ROWTYPE;
begin
COMMIT;
SELECT * INTO tag_rec
FROM PREP_TAG
WHERE project = 'a' and categoryId = 'b';
if tag_rec.locked = 'No' then
UPDATE prep_tag
SET locked = 'Yes'
WHERE TAG_NUMBER = tag_rec.TAG_NUMBER;
end if;
COMMIT;
end;
Run Code Online (Sandbox Code Playgroud)
这个sp线程安全吗?是否有可能线程A检查了tag_rec.locked ='否',那么它即将更新它.但在它之前,线程B偷偷进入并且还看到tag_rec.locked ='不'?
我今天遇到了这个Perl构造:
@foo = split("\n", $bar);
Run Code Online (Sandbox Code Playgroud)
这适用于将大型字符串拆分为UNIX类型行结尾的行数组,但为Windows留下了尾随\ r \n.所以我改成了:
@foo = split("\r?\n", $bar);
Run Code Online (Sandbox Code Playgroud)
其中逐行拆分字符串并且不留下尾随\ r \n(在ActivePerl 5.8下测试).然后有人向我指出,这应该是:
@foo = split(/\r?\n/, $bar);
Run Code Online (Sandbox Code Playgroud)
那么为什么第二种变体会起作用呢?双引号意味着评估内容,这就是为什么\ r和\n实际上被视为CR和LF,但是?被视为正则表达式元字符而不是文字问号.
正则表达式周围的斜杠是split()的可选项吗?是否假设函数的第一个参数是正则表达式?
我有一个足球网站,它有6个小按钮,当点击它时,它将通过一个随机数组并告诉用户赢了一些东西.什么是阻止用户多次点击直到用户赢了的最佳方法.例如某种javascript来检测用户ip并检查它是否已经粘贴在x小时内的网站中.
谢谢,
我正在考虑在Oracle数据库中实现队列,基本上使用表作为队列,并且我正在尝试决定如何防止多个会话同时插入表中并弄乱排序.
是否是LOCK TABLE mytable IN EXCLUSIVE MODE
阻止多个会话插入表的唯一方法?
编辑:
"队列"可能不是正确的术语.更多的列表,其中元素之间的相对顺序是重要的.我正在考虑Java的ArrayList的顺序.
concurrency ×3
oracle ×3
constraints ×1
database ×1
html ×1
insert ×1
javascript ×1
perl ×1
regex ×1
split ×1
sql ×1