【发布时间】:2019-04-08 06:53:39
【问题描述】:
我想按列名“EmpID”对表“Employee”进行排序,并将这些更改持久化。
这是我的员工表。 'EmpID' 是主键。
EmpID EmpName City
Ram 234 HYD
Shyam 130 BLR
Madan 894 KAN
Ramesh 101 CHN
所以我写了一个sql查询
Select * FROM Employee ORDER BY EmpID ASC;
EmpID EmpName City
Ramesh 101 CHN
Shyam 130 BLR
Ram 234 HYD
Madan 894 KAN
但它只生成排序格式的结果集,但实际表格不会永久更改。
现在当我运行 Select * FROM Employee 时,我再次得到原始表,而不是更新后的表。
Select * FROM Employee;
EmpID EmpName City
Ram 234 HYD
Shyam 130 BLR
Madan 894 KAN
Ramesh 101 CHN
那么如何做到这一点呢?
【问题讨论】:
-
为什么要关心数据在表中的存储方式?
-
@EstebanP.:这是一个要求。我正在对该表运行一些操作,因为我希望每次执行插入时该表都处于排序状态。我想找出具有最大值的行。插入前的员工 ID。我也在做随机插入和删除。
-
查看此问答 [SQL best practice to deal with default sort order ](stackoverflow.com/a/1793161/9602361)。
-
I want to find out the row having max. employee Id before insertion. I am also doing random insertions and deletions.为什么?如果您这样做是为了找到“下一个可用的 id”,这意味着您需要从读取查询中锁定整个表,直到INSERT完成,否则您将面临重复行的风险(希望您在列上有一个唯一键)。我也怀疑删除员工记录,而不是让它们处于非活动状态或其他什么 - 仅仅因为它们可能不适合你,并不意味着你不再有关系 -
@Clockwork-Muse :我需要删除记录,因为我正在测试数据库的可伸缩性以及多线程。无论如何找出最大值并使用 max+1 插入新记录解决了我的问题。关闭线程。谢谢。