随便问一下
1 挡在数据库设置一个主键id为自增时候,如下
id name
201 xiaowang
202 xiaofang
203 xiaoli
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。
2. 放在表1001行处
3. 最大的id,也就是最后一行的id
id name
201 xiaowang
202 xiaofang
203 xiaoli
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。
-------
2042 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
---
建议看看存储引擎
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。 ---
max () 是最大的ID,当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'table_name' )
go
create table tb(id int identity primary key,name nvarchar(2))
go
insert into tb(name)
select '张三' union all
select '李四' union all
select '王五'SELECT IDENT_CURRENT('tb') --取最后插入的ID
/*
---------------------------------------
3(1 行受影响)
*/
SELECT IDENT_CURRENT('表名')
注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
select @@identity
1 挡在数据库设置一个主键id为自增时候,如下
id name
201 xiaowang
202 xiaofang
203 xiaoli
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。
--id是204 ************************
2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
--放在表1001行处 *******************************************************
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' )
1 挡在数据库设置一个主键id为自增时候,如下
id name
201 xiaowang
202 xiaofang
203 xiaoli
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。
--id是204 ************************
2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
--放在表1001行处 *******************************************************
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' )
1 挡在数据库设置一个主键id为自增时候,如下
id name
201 xiaowang
202 xiaofang
203 xiaoli
当我们删除xiaofang记录时候,202也被删除了,这个时侯我们在向数据库插入数据,他的id是204,还是202呀,或者是别的。
--id是204 ************************
2 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
--放在表1001行处 *******************************************************
3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。--select IDENT_CURRENT( 'tablename' )
6、获取标识列的种子值可使用函数IDENT_SEED,用法:
SELECT IDENT_SEED ('表名')7、获取标识列的递增量可使用函数IDENT_INCR ,用法:
SELECT IDENT_INCR('表名')8、获取指定表中最后生成的标识值可使用函数IDENT_CURRENT,用法:
SELECT IDENT_CURRENT('表名')
注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
一、标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列。
该种列具有以下三种特点:1、列的数据类型为不带小数的数值类型
2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值
3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。由于以上特点,使得标识列在数据库的设计中得到广泛的使用。二、标识列的组成
创建一个标识列,通常要指定三个内容:
1、类型(type)
在SQL Server 2000中,标识列类型必须是数值类型,如下:
decimal、int、numeric、smallint、bigint 、tinyint
其中要注意的是,当选择decimal和numeric时,小数位数必须为零
另外还要注意每种数据类型所有表示的数值范围2、种子(seed)
是指派给表中第一行的值,默认为13、递增量(increment)
相邻两个标识值之间的增量,默认为1。三、标识列的创建与修改
标识列的创建与修改,通常在企业管理器和用Transact-SQL语句都可实现,使用企业管理管理器比较简单,请参考SQL Server的联机帮助,这里只讨论使用Transact-SQL的方法1、创建表时指定标识列
标识列可用 IDENTITY 属性建立,因此在SQL Server中,又称标识列为具有IDENTITY属性的列或IDENTITY列。
下面的例子创建一个包含名为ID,类型为int,种子为1,递增量为1的标识列
CREATE TABLE T_test
(ID int IDENTITY(1,1),
Name varchar(50)
)2、在现有表中添加标识列
下面的例子向表T_test中添加一个名为ID,类型为int,种子为1,递增量为1的标识列
--创建表
CREATE TABLE T_test
(Name varchar(50)
)--插入数据
INSERT T_test(Name) VALUES('张三')--增加标识列
ALTER TABLE T_test
ADD ID int IDENTITY(1,1)3、判段一个表是否具有标识列可以使用 OBJECTPROPERTY 函数确定一个表是否具有 IDENTITY(标识)列,用法:
Select OBJECTPROPERTY(OBJECT_ID('表名'),'TableHasIdentity')
如果有,则返回1,否则返回04、判断某列是否是标识列可使用 COLUMNPROPERTY 函数确定 某列是否具有IDENTITY 属性,用法
SELECT COLUMNPROPERTY( OBJECT_ID('表名'),'列名','IsIdentity')
如果该列为标识列,则返回1,否则返回04、查询某表标识列的列名
SQL Server中没有现成的函数实现此功能,实现的SQL语句如下
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.columns
WHERE TABLE_NAME='表名' AND COLUMNPROPERTY(
OBJECT_ID('表名'),COLUMN_NAME,'IsIdentity')=15、标识列的引用如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替
例如,若要查询上例中ID等于1的行,
以下两条查询语句是等价的
SELECT * FROM T_test WHERE IDENTITYCOL=1
SELECT * FROM T_test WHERE ID=16、获取标识列的种子值可使用函数IDENT_SEED,用法:
SELECT IDENT_SEED ('表名')7、获取标识列的递增量可使用函数IDENT_INCR ,用法:
SELECT IDENT_INCR('表名')8、获取指定表中最后生成的标识值可使用函数IDENT_CURRENT,用法:
SELECT IDENT_CURRENT('表名')
注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
看一下这个:
http://blog.csdn.net/sdhdy/archive/2009/04/26/4126265.aspx
1 2042 数据库如果有1000条数据,我们再插入一行时候,这条数据是放在表1001行处,还是放在中间行呢?
分两种情况,如果你的表以ID建了一个聚集索引的话,那么他就放到最后,如果只是普通索引或是没有索引的话,他就放在任何前面被删除的记录中间3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。
SELECT @@IDENTITY;
分两种情况,如果你的表以ID建了一个聚集索引的话,那么他就放到最后,如果只是普通索引或是没有索引的话,他就放在任何前面被删除的记录中间3 言归正传,我在网上看到了一个帖子
select max(id) from table where ...
这里的macx(id)是最大的id,还是表中最后一行的id,这就回到问题2了,当向表插入数据是,这条数据是放在最后一行吗。
当然最主要的问题还是 :向一个表插入数据,里面的id是自增的,我现在插入后后要立刻取回他的主键id,怎么取啊,万分感谢哦。SELECT @@IDENTITY;
insert into UserTest(name) --UserTest是表名字
select '你好'
SELECT IDENT_CURRENT('UserTest')