SQL knowledge Note I

本文详细介绍了SQL中的自增列(标识列),包括其特点、使用方法及注意事项。讲解了如何设置标识列的显式值、获取最后插入的标识值、重置起始值等实用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL 中自增列(标识列又称标识符列):

三种特点:

  1、列的数据类型为不带小数的数值类型
  2、在进行插入(Insert)操作时,该列的值是由系统按一定规律生成,不允许空值
  3、列值不重复,具有标识表中每一行的作用,每个表只能有一个标识列。

 

IDENTITY(type,seed,increment),
类型(type)
在SQL Server 2000中,标识列类型必须是数值类型,如下:
decimal、int、numeric、smallint、bigint 、tinyint 其中要注意的是,当选择decimal和numeric时,小数位数必须为零
另外还要注意每种数据类型所有表示的数值范围

种子(seed)
是指派给表中第一行的值,默认为1

递增量(increment)
相邻两个标识值之间的增量,默认为1。

详细介绍链接:http://bingdian2001.blog.hexun.com/33157398_d.html

                     http://msdn.microsoft.com/zh-cn/library/ms186775.aspx

 

 

应用需知:

1,为标识列指定显式值

使用command:

SET IDENTITY_INSERT [ database.[ owner.] ] { table } { ON | OFF }

参数
database  指定的表所驻留的数据库名称。

owner       表所有者的名称。

table        是含有标识列的表名。

 

示例:

SET IDENTITY_INSERT [ database.[ owner.] ] { table }  ON

insert.....(显示指定标识列 批量插入)

SET IDENTITY_INSERT [ database.[ owner.] ] { table }  OFF

 

2,返回最后插入的标识值的系统函数。

  @@IDENTITY (Transact-SQL)

  http://msdn.microsoft.com/zh-cn/library/ms187342.aspx

 

3,重置标识列 起始值。

方法1     --   清空已有数据,并且将自增自段恢复从1开始计数
truncate   table   表名    

方法2     --   不清空已有数据,但将自增自段恢复从1开始计数
dbcc   checkident(表名,RESEED,0)

 

语法
DBCC   CHECKIDENT('table_name ' [,{NORESEED | { RESEED[ ,new_reseed_value ]}}] )
参数
'table_name' 是要对其当前标识值进行检查的表名。表名必须符合标识符规则。有关更多信息,请参见使用标识符。指定的表必须包含标识列。
NORESEED 指定不应更正当前标识值 |RESEED 指定应该更正当前标识值。
new_reseed_value
是在标识列中重新赋值时要使用的值。

 

 

4,select语句中实现第一列(非表自带)是自增的

有主键的可以直接用:
select   自增列=(select   sum(1)   from   表   where   主键 <=a.主键),*   from   表   a

没有主键的需要用临时表:
select   自增列=identity(int,1,1),*   into   #tb   from   表
select   *   from   #tb
drop   table   #tb

 

5,标识列并非是唯一,有很多原因能导致标识列不唯一。

具体可参考链接 http://bbs.db001.com/thread-315-1-1.html

 

 sql中text/char/varchar/ntext/nchar/nvarchar的区别 .

1, "n "开头的 表示存储的是Unicode 编码格式储存字符串。即2个字节

2, 用varchar,方便我们开发系统,但是就速度和空间考虑,用varchar没有char快,占的空间也大!
      char一般用在字符串定长的情况下,

3,  text文本型数据可以存储超过20亿个字符串。但是也不是任何时候都是和使用文本型数据,因为他非常占空间,也非常消耗服务器,随处乱用后果不堪设想!因为即使你像一个文本型字段输入了一个空值他都会占用2K的空间!而当这时除了删除该数据没有别的办法收回空间!效率不高这个可以肯定

 

 

Sql联合查询

UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示:

select_statement

UNION [ALL] selectstatement

[UNION [ALL] selectstatement][…n]

[ALL]选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一行。

联合查询时,查询结果的列标题为第一个查询语句的列标题。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。

在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。

在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如:

查询1 UNION (查询2 UNION 查询3)

 

连接查询:

内联(inner join)

select * from t1,t3 where  t1.id=t3.id 或

select * from t1 inner join t3 on t1.id=t3.id

左联(left outer join)显示左表中的所有行

右联(right outer join)显示右表中的所有行

全联(full outer join)显示两边表中所有行

交叉连接查询(cross join )等价于 无条件内联   select * from t1,t3

 

http://www.javaeye.com/topic/185385

http://www.javaeye.com/topic/450287

可参考http://blog.youkuaiyun.com/keke_wanwei/archive/2006/03/13/623455.aspx

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值