【笔记】数据表管理

2017-03-31  本文已影响12人  Murrey_Xiao

一、约束

【为什么要有约束?】

保证数据表数据的完整性和合理性

1.实体完整性(对行进行约束)

约束方法:唯一约束、主键约束、标识列

2.域完整性(对列进行约束)

限制数据类型、检查约束、外键约束、默认值、非空约束

3.引用完整性:要求两表相同字段必须一致

外键约束

二、一些名词的基本概念

主键:
外键:
标识列
默认值
数据库关系图

三、数据类型

1. 文本数据类型

2. 日期和时间

3. 数字数据类型

4. 货币数据类型

5. bit数据类型

四、T-SQL语句

1. 创建表

CREATE TABLE CommoditySort
(
    SortId int IDENTITY(1,1) NOT NULL,
    SortName varchar(50) NOT NULL
)

2. 添加约束

CREATE TABLE CommoditySort
(
    SortId int Primary Key,     -- 主键约束
    SortName varchar(50) Unique,   -- 唯一约束
    SortPrice float NOT NULL,     -- 非空约束
    SortKey char(6) Foreign Key References Table_A(SortKey),  -- 外键约束
    SortRom char(10) Check(SortRom='1' OR SortRom='0'),    --检查约束
    -- 多主键
    -- Primary Key(a,b,c)
)    
-- 或
ALTER TABLE 表名
    ADD CONSTRAINT 约束名 约束类型 具体的约束说明

约束名的取名规则推荐采用:约束类型_约束列

范例1:
  1. UserId 要求设置为主键
  2. UserPwd 要求长度大于等于6
  3. Gender 要求取值为1或0 默认值为0
  4. Email 中要存在@字符
ALTER TABLE UserInfo
ADD CONSTRAINT PK_UserId PRIMARY KEY (UserId),
    CONSTRAINT CK_UserPwd CHECK (LEN(UserPwd)>=6),
    CONSTRAINT CK_Gender CHECK (Gender=0 OR Gender=1),
    CONSTRAINT DF_Gender DEFAULT(0) FOR Gender,
    CONSTRAINT CK_Email CHECK (Email LIKE '%@%')
GO
范例2:
  1. OrderId 要求设置为主键
  2. UserId 要求设置为外键,参照UserInfo表中的UserId列
  3. CommodityId 要求设置为外键,参照CommodityInfo表中的CommodityId列
  4. PayWay 要求默认值为“网上银行”
  5. Confirm 要求取值为0或1 默认值为0
  6. SendGoods 要求取值为0或1 默认值为0
ALTER TABLE OrderInfo
    ADD CONSTRAINT PK_OrderId PRIMARY KEY (OrderId),
        CONSTRAINT FK_UserId FOREIGN KEY (UserId) REFERENCES UserInfo(UserId),
        CONSTRAINT FK_CommodityId FOREIGN KEY (CommodityId) REFERENCES CommodityInfo(CommodityId),
        CONSTRAINT DF_PayWay DEFAULT ('网上银行') FOR PayWay,
        CONSTRAINT CK_Confirm CHECK(Confirm=0 OR Confirm=1),
        CONSTRAINT DF_Confirm DEFAULT(0) FOR Confirm,
        CONSTRAINT CK_SendGoods CHECK(SendGoods=0 OR SendGoods=1),
        CONSTRAINT DF_SendGoods DEFAULT(0) FOR SendGoods
GO
注意:

[1] 外键约束需要注意类型、长度必须与引用的主键列的类型、长度完全一致。
[2] 外键约束注意引用的表中必须有主键列

向已存在数据的表中添加约束
ALTER TABLE Employee WITH NOCHECK
    ADD CONSTRAINT CK_EmployeeId CHECK(LEN(EmployeeId)=18)
GO

3. 删除约束

ALTER TABLE Employee
    DROP CONSTRAINT PK_Employee
GO

4. 删除数据表

DROP TABLE CommodityInfo
DROP TABLE CommoditySort
IF EXISTS(SELECT * FROM sysobjects WHERE name='ComodityInfo')
    DROP TABLE ComodityInfo
上一篇 下一篇

猜你喜欢

热点阅读