如何解决SQL Servermysql自增主键问题和自动编号问题

随笔 - 74&
&&&&&&&&&&&
一、对主键的修改
主键值都会带有主键约束,当执行update操作或是其他操作的时候就会受到限制无法修改,解决的方法是:取消主键约束-&删掉主键列-&插入修改后的主键值。
(1)取消主键约束
取消主键约束的SQL语句如下:
alter table [表名] drop constraint [主键名]输入表名和主键名时不要带中括号(下同),这里值得说明的是[主键名]并不是主键所在的字段名。主键名如果没有指定系统会自动分配一个,这时就需要查询主键名,查询主键名的方法如下:
--使用sql存储方式进行主键的查询exec sp_pkeys @table_name='[表名]'--查询表的详细信息,在其中找到主键名sp_help [表名]在这里顺便介绍下如何查询主键的列名,虽然这可能用的不多,但以下这个方法还是比较直观的:
select TABLE_NAME,COLUMN_NAME from INFORMATION_SCHEMA.KEY_COLUMN_USAGEwhere TABLE_NAME='[表名]'(2)删掉主键列
上一步总结了一些补充的知识,这一步就简单许多了,方法如下:
alter table [表名] drop column [字段名](3)插入修改后的主键名
alter table [表名] add constraint [主键名] primary key(字段名)值得说明的是,这里的主键名是自定义的主键名,指定之后如果以后还需取消主键约束就可以用这个主键名,而不再是系统自动分配的字段名了。
二、自增长标识符的修改
这个问题主要遇到的情形是,在删除了一段连续的带有自增长字段的一部分数据项之后,自增长序列不会自动补全,而是按照原先的计数继续增长。举个例一段连续的自增长字段(1,2,3,…,8,9),我们将其中的(7,8,9)delete掉后再向其中插入新的数据,此时新序列标号不是7而是10。
解决的方法有两种:设置序列自增长开关和重置序列自增长起始数。
(1)设置序列自增长开关
取消序列的自增长的SQL语句:
set identity_insert [表名] on这条语句执行完后,再进行插入时需要指定插入项的序列值,而不会引起序列的自增长。当修改完成后,如果还想让序列具有自增长性需要进行恢复操作:
set identity_insert [表名] off(2)重置序列自增长起始数
dbcc checkident([表名],RESEED,[数字])该语句可用来重置自增长序列的起始值,[数字]处设置起始值。
dbcc checkident([表名],NORESEED)该语句可用来查询目前自增序列的当前值。
阅读(...) 评论()SQL server 创建主键后某一列创建唯一约束就自动排列这是怎么回事
本人新手,无意间发现当表里有个主键后,在某一列在创建 唯一约束,唯一约束的那一列就自动排序了
这是怎么回事,我知道主键有聚集索引,但不是只排序主键那一列吗?
大神帮帮忙!sql自动增长的主键
sql自动增长的主键
问:SQL Server 2005中设计表时和在SQL Server Management Studio Express中如何得到自动编号字段? &www.2cto.com &
答:具体步骤如下:
①像Access中的自动编号字段
右键你的表--&设计表--&找到你的id字段(类int型)--&标识--&是--&标识种子(初始值)--&标识递增量--&OK
②用IDENTITY (SEED,INCREMENT)参数
seed -启始值
increment -增量
CREATE TABLE 表名(
你的ID IDENTITY (1, 1) NOT NULL ,你的其他字段... )
CREATE TABLE 表名(
你的字段ID AUTOINCREMENT(1000,10),其他字段... )
& www.2cto.com &
③修改起始值和步进值
ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(2000,50)
④让一个删空的表自动增加字段的开始值重新从1开始
ALTER TABLE 表名 ALTER COLUMN 你的字段ID COUNTER(1,1)
上述3 4只适用与Access,COUNTER为其一种数据类型,可以在Access中指定一不是自动编号的字段为自动编号字段,也可以让一自动编号字段重新从 指定值按指定步长自动编号。但是如果表中有数据,用户不能用该语句来将该列的数据类型改变为COUNTER 数据类型。对于SQL Server并不支持。
对于SQL Server我们或许总希望用Alter Table 表名 Alter Column 你的字段 IDENTITY(1,1)
来指定字段重新从1开始计数,但是这句话本身是错误的,好长时间我也疑惑为什么这句话不能执行。如果我们看看MS 对Alter Table语句的定义就清楚了,这句话根本是错误的。下面是MS对Alter Table语句的定义。
ALTER TABLE table &&
{ [ ALTER COLUMN column_name &&
& & { new_data_type [ ( precision [ , scale ] ) ] &
& & & & [ COLLATE & collation_name & ] &
& & & & [ NULL | NOT NULL ] &
& & & & | {ADD | DROP } ROWGUIDCOL } &
& & | ADD &
& & & & { [ & column_definition & ] &
& & & & | column_name AS computed_column_expression &
& & & & } [ ,n ] &
& & | [ WITH CHECK | WITH NOCHECK ] ADD &
& & & & { & table_constraint & } [ ,n ] &&
& & | DROP &
& & & & { [ CONSTRAINT ] constraint_name &&
& & & & & & | COLUMN column } [ ,n ] &&
& & | { CHECK | NOCHECK } CONSTRAINT &
& & & & { ALL | constraint_name [ ,n ] } &
& & | { ENABLE | DISABLE } TRIGGER &
& & & & { ALL | trigger_name [ ,n ] } &&
& column_definition & ::= &
& & { column_name data_type } &
& & [ [ DEFAULT constant_expression ] [ WITH VALUES ] &
& & | [ IDENTITY [ ( seed , increment ) [ NOT FOR REPLICATION ] ] ] &
& & & & ] &&
& & [ ROWGUIDCOL ] &
& & [ COLLATE & collation_name & ] &
& & [ & column_constraint & ] [ n ] &
& column_constraint & ::= &
& & [ CONSTRAINT constraint_name ] &
& & { [ NULL | NOT NULL ] &
& & & & | [ { PRIMARY KEY | UNIQUE } &
& & & & & & [ CLUSTERED | NONCLUSTERED ] &
& & & & & & [ WITH FILLFACTOR = fillfactor ] &
& & & & & & [ ON { filegroup | DEFAULT } ] &
& & & & & & ] &&
& & & & | [ [ FOREIGN KEY ] &
& & & & & & REFERENCES ref_table [ ( ref_column ) ] &
& & & & & & [ ON DELETE { CASCADE | NO ACTION } ] &
& & & & & & [ ON UPDATE { CASCADE | NO ACTION } ] &
& & & & & & [ NOT FOR REPLICATION ] &
& & & & & & ] &&
& & & & | CHECK [ NOT FOR REPLICATION ] &
& & & & & & ( logical_expression ) &&
& table_constraint & ::= &
& & [ CONSTRAINT constraint_name ] &
& & { [ { PRIMARY KEY | UNIQUE } &
& & & & [ CLUSTERED | NONCLUSTERED ] &
& & & & { ( column [ ,n ] ) } &&
& & & & [ WITH FILLFACTOR = fillfactor ] &
& & & & [ ON { filegroup | DEFAULT } ] &
& & & & ] &&
& & & & | & &FOREIGN KEY &
& & & & & & [ ( column [ ,n ] ) ] &
& & & & & & REFERENCES ref_table [ ( ref_column [ ,n ] ) ] &
& & & & & & [ ON DELETE { CASCADE | NO ACTION } ] &
& & & & & & [ ON UPDATE { CASCADE | NO ACTION } ] &
& & & & & & [ NOT FOR REPLICATION ] &
& & & & | DEFAULT constant_expression &
& & & & & & [ FOR column ] [ WITH VALUES ] &
& & & & | & &CHECK [ NOT FOR REPLICATION ] &
& & & & & & ( search_conditions ) &&
可以看到,IDENTITY只是在& column_definition &中,也就是说,我们可以这样使用
Alter Table 表名 Add 字段名 Int IDENTITY(1,1)
即,我们可以增加一个字段并指定它为自动编号字段。但是不能更改一个字段为自动编号字段(也或许我没找到方法)。即,如果我们想给表增加自动编号字段,只能使用添加字段的方法,而不能更改一个已有的字段为自动编号字段。
至于如果需要更改自动编号字段计数起始值可以使用DBCC命令:
DBCC CHECKIDENT (表名,RESEED,100)
自动编号字段下一个从101开始计。博客分类:
浏览: 1154101 次
来自: 北京
谢谢分享,上次也遇到过的,解决了,过了一段时间又忘记,幸亏看到 ...
这是什么错啊,我也遇到了.问下写一个servlet能解决什么问 ...
如何用php怎么弄了。http://surenpi.com
那怎么样才能屏蔽呢
Trinea 写道还是利用Fiddler抓包更方便,(1)无需 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'Access俱乐部
?&&&&?&&&&?&&&&?&&&&
您的位置:  > >
SQL表如何设置自动编号主键
来源:www.accessoft.com&&点击数:4010&&评论数:0 &|&&|&
时 间: 08:50:29
作 者:&&&ID:16058&&城市:江阴
摘 要:ACCESS做前台,SQL做后台表,这时SQL里所有表必须要有主键,否则就会无法编辑数据。(ACCESS临时表就不一定要有主键了,因为临时表不要升迁到SQL里的)
&&&& 设置方法:进入SQL表设计,新建int型单号ID,然后添加主键,并将单号ID列属性里标识增量,标识种子设为1。如下图
总结:SQL表,特点:必须要有一个主键,且主键不能重复 ACCESS里要升迁到SQL的表,也要符合这个要求,不符合的要改一下
&&&& 比如加个自动编号ID,1,2,3,4…作主键.保证主键不重复
ACCESS临时表就不一定要有主键了,因为临时表不要升迁到SQL里的
&&&& 相关文章:
      
&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】&&&&【&&】
Access网店
价格:¥280 元
价格:¥200 元
价格:¥199 元
(07-03 16:49)
(07-03 11:13)
(07-03 09:56)
(07-03 08:32)
(07-02 18:55)
(07-02 18:14)
(07-02 17:39)
(07-02 15:44)
(07-02 12:39)
(07-02 11:52)
Access软件网 版权所有 CopyRight
提供支持 本站特聘法律顾问: 李慧 律师

我要回帖

更多关于 速达3000 主键 编号 的文章

 

随机推荐