zoukankan      html  css  js  c++  java
  • SQL学习笔记6:进阶之SQL Constraints(约束)

    SQL约束(Constraints): SQL约束用于限制一个表中数据的类型,可以在建表时(使用CREATE TABLE语句),也可以在建表后(使用ALTER TABLE)来指定约束。

    约束包括以下几种:

    NOT NULL

    UNIQUE

    PRIMARY KEY

    FOREIGN KEY

    CHECK

    DEFAULT

    1. NOT NULL: 强制表中某列不接受空值。

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    1. UNIQUE: 此约束使表中某列值唯一,PRIMARY KEY自动包含此约束.

    Example:

    在创建表的同时创建UNIQUE约束

    CREATE TABLE Persons

    (

    P_Id int NOT NULL UNIQUE,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    创建表时对多行使用UNIQUE约束

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

    )

    修改已经存在的表,以使表中某列使用UNIQUE约束

    ALTER TABLE Persons

    ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

    删除UNIQUE约束

    ALTER TABLE Persons

    DROP CONSTRAINT uc_PersonID

    1. PRIMARY KEY

    每个表应该有且仅有一个主键约束

    Example:

    创建表的同时创建主键约束

    CREATE TABLE Persons

    (

    P_Id int NOT NULL PRIMARY KEY,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    可以对多列的组合定义主键约束

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

    )

    在这个例子中,主键为pk_PersonID, 主键的值由两列组成,P_Id和LastName

    设定已经存在的表的主键约束

    ALTER TABLE Persons

    ADD PRIMARY KEY (P_Id)

    ALTER TABLE Persons

    ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

    删除主键约束

    ALTER TABLE Persons

    DROP CONSTRAINT pk_PersonID

    1. FOREIGN KEY

    一个表的外键指向另一个表的主键。

    外键可以阻止破坏表间连接的行为。

    外键约束可以阻止无效数据被插入外键所在的列,因为外键所在列的数据需要来自外键指向的表。

    Example:

    建表的同时添加外键约束

    CREATE TABLE Orders

    (

    O_Id int NOT NULL PRIMARY KEY,

    OrderNo int NOT NULL,

    P_Id int FOREIGN KEY REFERENCES Persons(P_Id)

    )

    定义多列的外键约束

    CREATE TABLE Orders

    (

    O_Id int NOT NULL,

    OrderNo int NOT NULL,

    P_Id int,

    PRIMARY KEY (O_Id),

    CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)

    REFERENCES Persons(P_Id)

    )

    向已经存在的表中加外键约束

    ALTER TABLE Orders

    ADD FOREIGN KEY (P_Id)

    REFERENCES Persons(P_Id)

    ALTER TABLE Orders

    ADD CONSTRAINT fk_PerOrders

    FOREIGN KEY (P_Id)

    REFERENCES Persons(P_Id)

    删除外键约束

    ALTER TABLE Orders

    DROP CONSTRAINT fk_PerOrders

    1. CHECK: 用于限制表中数据列值的范围

    创建表时定义CHECK约束

    对单列定义:

    CREATE TABLE Persons

    (

    P_Id int NOT NULL CHECK (P_Id>0),

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255)

    )

    对多列定义:

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255),

    CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

    )

    对已经存在的表添加CHECK约束

    ALTER TABLE Persons

    ADD CHECK (P_Id>0)

    ALTER TABLE Persons

    ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')

    删除CHECK约束

    ALTER TABLE Persons

    DROP CONSTRAINT chk_Person

    1. DEFAULT: 用于向表中某列添加默认值。

    新建表时同时定义某列的default值

    CREATE TABLE Persons

    (

    P_Id int NOT NULL,

    LastName varchar(255) NOT NULL,

    FirstName varchar(255),

    Address varchar(255),

    City varchar(255) DEFAULT 'Sandnes'

    )

    也可以定义系统值

    CREATE TABLE Orders

    (

    O_Id int NOT NULL,

    OrderNo int NOT NULL,

    P_Id int,

    OrderDate date DEFAULT GETDATE()

    )

    修改表以定义该表某列的default值

    ALTER TABLE Persons

    ALTER COLUMN City SET DEFAULT 'SANDNES'

    删除default约束

    ALTER TABLE Persons

    ALTER COLUMN City DROP DEFAULT

    参考资料:http://w3schools.com/sql/sql_constraints.asp

  • 相关阅读:
    著名的二分查找的BUG
    C/C++ static用法
    浅谈C++虚函数
    git备忘(长久更新)
    【经典问题】最大子串和
    水波纹效果
    博客迁址 xpeng.scorpionstudio.com
    终于,我们的新产品Fotor Slideshow Maker上线了!!
    分享一款浏览器扩展--美图搜索-图片搜索工具
    分享网页微信防撤回插件
  • 原文地址:https://www.cnblogs.com/ITGirlXiaoXiao/p/2162230.html
Copyright © 2011-2022 走看看