T-SQL入門攻略之创建数据表

网络整理 - 08-18

   使用主键约束

  主键不允许重复也不允许有空值

  --1单字段主键

  IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  col1 varchar(10),

  col2 int,

  col3 datetime,

  col4 numeric(10,2),

  col5 xml,

  col6 image,

  primary key(col1)

  );

  --2多字段主键 IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  col1 varchar(10),

  col2 int,

  col3 datetime,

  col4 numeric(10,2),

  col5 xml,

  col6 image,

  primary key(col1,col2,col3)

  );

  使用唯一性约束

  唯一unique 用于强制非主键列的唯一性,我们可以将唯一约束定义在一个字段上也可以定义在多个字段上。

  --1单字段唯一约束

  IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  col1 char(10),

  col2 int,

  col3 float,

  unique(col1)

  );

  --2多字段唯一约束

  IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  col1 char(10),

  col2 int,

  col3 float,

  unique(col1,col2)

  );

  主键与唯一约束的相似点与不同点:

  相似点:

  在主键列或逐渐列的组合上不允许出现重复值,在被定义唯一性约束的列或列的组合上也不允许出现重复值,他们所在列都创建了一个唯一性索引。

  不同点:

  在表里只能定义定义一个主键,但可以定义多个唯一约束,主键所在列不允许空值但唯一性约束列允许空值

  使用非空约束

  使用NOT NULL约束的字段其值不允许为空(NULL)

  IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  col1 char(10)NOT NULL UNIQUE, -- 非空约束和唯一性约束

  col2 int NOT NULL, -- 非空约束

  col3 float

  );

  使用缺省约束

  对有的字段可能不希望直接对其输入值或者暂时不输入,同时希望它自己能够形成一个初始值或者有的字段值是取自其他地方这时候可以使用缺省约束。

  IF OBJECT_ID ('usertable', 'U') IS NOT NULL DROP TABLE usertable;

  CREATE TABLE usertable

  (

  username varchar(20),

  loginuser varchar(10) DEFAULT user,

  logintime datetime DEFAULT getdate(),

  uservocation varchar(50) DEFAULT '计算机及其相关'

  );

  使用检查约束

  为了避免输入数据时候出现人为错误,可以通过定义检查约束的方法来解决(check)

  IF OBJECT_ID ('testtable', 'U') IS NOT NULL DROP TABLE testtable;

  CREATE TABLE testtable

  (

  userid varchar(10) CHECK(userid LIKE '[a-z]%[1-4]' AND DATALENGTH(userid)=5),

  -- age值不能为0

  --userid值的长度必须为5

  --userid值中最后一个字符必须 1、2、3或4

  --userid值的首字符必须为字母

  age int CHECK(age > 0 AND age <= 150)

  );

  创建临时表和表变量

  1:临时表

  临时表表名以#或##为前缀的一类数据表是临时存储数据库tempdb中的一类数据库对象。其中以#前缀的临时表为本地临时表,在当前会话内有效,会话外无效。前缀##的临时表是全局临时表所有会话都可以访问。临时表的生命周期是创建临时表的会话的生命周期只要创建他的会话还存在,该临时表就会持续存在。数据表都会自动保存到tempdb中,数据库重启后这些表将会被删除。

  2:表变量

  表变量是用于存储表数据的一种变量,与一般变量一样也使用declare来声明

  不管是临时表还是表变量都要把他们当数据表来操作

  3:表变量与临时表的不同点

  (1) 临时表保存在磁盘上(逻辑上保存在数据库tempdb上)表变量则保存在内存中,

  (2) 访问临时表会生成日志信息,而访问表变量则不会

  (3)可以对临时表创建索引 但不能对表变量创建索引

  (4)临时表需要锁机制,而表变量则不需要