Sql 修改语句

来源:百度知道 编辑:UC知道 时间:2024/05/24 21:28:23
编号 位置
21 1
22 2
23 3
24 4
怎样动态的更改位置。 位置都是唯一的。
例如:
把编号22的位置改成4让编号23和24的位置更新成2和3之类的

如果你的这个“位置”是一个字段的话,就直接用 Update 语句更改其内容。

如果这个“位置”不是字段,只是显示出来的顺序,那就难说了。原因是这样的:SQL中其实没有一个物理位置的概念,所有数据记录的顺序依赖于索引及查询时的排序指令。

所以不要去关心数据的物理位置先后,要改变位置得从自己的数据和查询语句上着手。

不过呢,有一个聚集索引的与数据的存放顺序有关系,LZ可以查查相关资料。只是说,聚集索引会改变存放顺序,但它的核心是为其他索引服务的,设置得好,整个数据库都会受益,查询速度飞快,设置得不好,数据库就的响应就会变慢了,甚至拖垮系统。

我这有个交换的方法
设三个变量 a,b,x
a,b表示要交换的两个位置,他们通过赋值(如提交表单等)得到数据,
x为一个中间变量负责临时存储数据用

x=a
a=b
b=x
那么a,b的值就交换了
至于SQL,可以不变,反正DESC,ASC看你需要。以a,b所在属性(列)的关键值排序即可。
------------------
楼上兄弟的方法是行不通的,要是里面是中国人口的数据,只要移动一个数据你要update 13亿次了

用update 触发器
思路:
1、小位置号改成大位置号,则两个位置号之间的值-1(不包括更新的位置号)
如:
21 1
22 2
23 3
24 4
将22的位置号改为4,则2和4之间的位置号(不包括编号22的位置号)都减一变成:
21 1
22 4
23 2
24 3
2、大位置号改成小位置号,则两个位置号之间的值+1(不包括更新的位置号)
如:
21 1
22 2
23 3
24 4
将24的位置号改为1,则1和4之间的位置号(不包括编号24的位置号)都加一变成:
21 2
22 3
23 4
24 1
更新出发器如下:
create TRIGGER u