C#SQL在定义的位置插入行

时间:2014-02-03 17:29:48

标签: c# sql

我有一个包含多个列的表,这些列按其中的3列正确排序。现在的要点是如何使用这些列在特定点插入新行。我举一个例子,请假设有一个像这样的表:

Name   Order1 Order2 Order3 Address
Marc   30     01     7     Street1
James  30     03     7     Street1
Dan    31     02     5     Street3
Rick   31     02     2     Street1

如果我插入新记录(Tony),我可以使用

Marc   30     01     7     Street1
James  30     03     7     Street1
Dan    31     02     5     Street3
Rick   31     02     2     Street1
Tony   30     01     5     Street1

但是我需要的顺序是

Marc   30     01     7     Street1
Tony   30     01     5     Street1
James  30     03     7     Street1
Dan    31     02     5     Street3
Rick   31     02     2     Street1

(详情来说,对于订单1和2,我需要更低的数字在顶部,如果订单3我需要更高的数字在顶部)。

您对如何操作有任何建议吗?简单的方法是沿着表格移动并复制新订单中的新数据但是很长......

2 个答案:

答案 0 :(得分:4)

您通常不会将数据插入到表的中间 - 如果定义了聚簇索引,则插入位于末尾或中间位置。

只需将行添加到表中,然后在检索数据时设置顺序:

SELECT * 
FROM People
ORDER BY Order1, Order2, Order3 DESC

如果需要物理结构按此顺序,则在Order1, Order2, Order3 DESC上添加聚簇索引。但请注意,仍然需要在查询时指定顺序,因为如果您未在查询中指定顺序,则SQL可以按其认为合适的顺序返回记录。

请注意,插入到聚簇索引的中间会影响性能,因为服务器可能需要重新组织数据。如果表格很小,那应该不是问题。

答案 1 :(得分:1)

RDBMS通常以集合论数学概念为核心。这使得基于集合的操作(快速)对数据而不是基于光标的操作(慢)。当您考虑存储在RDBMS中的表中的数据时,将其视为一组数据,这并不意味着任何顺序。索引可以应用于表,以便生成订购数据的子集,以提高查找速度。 RDBMS提供了可以对数据执行的操作,以便将其排序以便进行检索,例如Order By语句。这将对检索到的数据集执行基于游标的操作,以便根据定义的参数对其进行排序。对数据库结构有这种基本的了解将有助于使用RDBMS的各个方面,从执行CRUD操作,到优化,到正确的结构等。

总结:

  • 绝不应假设表格中的数据有任何订单
  • 绝不应假设插入表格的数据放在任何特定位置
  • 索引基于给定的列或列集创建有序集,这极大地提高了查找速度
  • 订单在检索到集合后应用于数据