用SQL语句给一个表的增加自增主键或删除主键,sql主键
刚开始时碰到这个需求时,在网上搜索了一下,发现都说不行,得先删除那主键列再重新增加或者先创建一个临时表再把数据导过来,其实在MYSQL中是可以直接修改的。
修改ID字段为自增主键:
alter table `test` change `id` `id` int (11) UNSIGNED NOT NULL AUTO_INCREMENT , add primary key (`id` );
修改ID字段为自增非主键:
alter table `test` change `id` `id` int (11) UNSIGNED NOT NULL AUTO_INCREMENT , drop primary key;修改ID字段为普通字段:
alter table `test` change `id` `id` int (11) UNSIGNED NOT NULL ;例如表:student(id,name,sex.age),id主键自增
把表中纪录复制再插入到这个表后面
insert into student select name,sex,age from student;
原则,除自增列外的所有列都要写出,注意查询字段的顺序和表对应,要不如下:
insert into student(sex,name,age) select sex,name,age from student;
查询字段和插入字段对应
删除重复的行
delete from student where id in (select a.id id from student a,student b where a.name=b.name and a.sex = b.sex and a.age=b.age and a.id<>b.id)
其中查询语句为查出所有重复纪录的id
select a.id id from student a,student b where a.name=b.name and a.sex = b.sex and a.age=b.age and a.id<>b.id
原则除主建外所有字段都要相等
and a.id<>b.id ,这个不加就会把正个表的数据算重复
因为a和b都是student表,自己和自己比当然什么都一样,
and a.id<>b.id 就是和自己外的其他纪录比
运行了,sql server2000的数据库,没有问题
你什么库
给你一个触发器,当你删除一条,id递减
create trigger delid
on 表名
for delete
as
begin
if @@rowcount=1
update 表名 set id=id-1 where id>(select id from deleted)
end
仅限删除一行,如果删除多行,请追分追问