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