问题描述:
INSERT INTO Cms_Entity(
Entity_name,
Entity_type,
Entity_url
)
select 'test',2,convert (varchar(20),max(Entity_id)+1) from Cms_Entity
Entity_id是表Cms_Entity中的一个自增序列
请问有可能在我这条语句执行的时候会有新的Entity_id产生吗?
不知道有没有知道sqlserver访问底层的流程,这样一个sql执行的时候,有没有同时其它操作进行的可能,我这个问题的关键是:
我这个insert执行的时候,有两种可能
是我的insert先锁定表,然后再读max,然后再执行insert
还是先读了max再锁定,然后执行insert
问题解答:
你的意思是说,在你进行这些语句操作的同时,会不会有别人也在数据库进行写操作吗?
虽然在现实中其他人的写操作界于你的insert 和select 操作之间的可能性很小,但是理论上也是有可能的.所以,最好的办法是设置你的数据库的隔离性级别
这个只需要在表Cms_Entity设置一下Entity_id的属性就可以.
SQL企业管理器,打开表--->设计表--->选择Entity_id(唯一)--->下面有个列(标识),选择是,这样插入数据时它就会自动增.
会!