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

使用主键约束

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

--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 )临时表需要锁机制 , 而表变量则不需要

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值