SQL——SQL约束

SQL约束 - 用于限制加入表的数据的类型
    可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)。
    NOT NULL -- 约束强制列不接受 NULL 值。
    UNIQUE -- 约束唯一标识数据库表中的每条记录。每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
        MySQL:
            CREATE TABLE tableName
            (
                Id int NOT NULL,
                UNIQUE (Id)
            )
        SQLServer/Oracle:
            CREATE TABLE tableName
            (
                Id int NOT NULL UNIQUE
            )
        需命名的UNIQUE约束:MySql/SQLServer/Oracle:
            CREATE TABLE tableName
            (
                Id int NOT NULL,
                pwd varchar(255) NOT NULL,
                CONSTRAINT uniqueName UNIQUE (Id,pwd)
            )
        表已创建:ALTER TABLE tableName ADD UNIQUE (Id)
        需命名:ALTER TABLE tableName ADD CONSTRAINT uniqueName UNIQUE (Id,pwd)
        撤销 UNIQUE 约束
            MySQL:
                ALTER TABLE tableName DROP INDEX uniqueName
            SQLServer/Oracle:
                ALTER TABLE tableName DROP CONSTRAINT uniqueName
    PRIMARY KEY -- 主键约束,约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
        MySQL:
            CREATE TABLE tableName
            (
                Id int NOT NULL,
                PRIMARY KEY (Id)
            )
        SQLServer/Oracle:
            CREATE TABLE tableName
            (
                Id int NOT NULL PRIMARY KEY
            )
        命名PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束:
        MySQL/SQLServer:
            CREATE TABLE tableName
            (
                Id int NOT NULL,
                pwd varchar(255) NOT NULL,
                CONSTRAINT pkName PRIMARY KEY (Id,pwd)
            )
       
        表已创建:ALTER TABLE tableName ADD PRIMARY KEY (Id)
        命名 PRIMARY KEY 约束,以及为多个列定义 PRIMARY KEY 约束:
            ALTER TABLE tableName ADD CONSTRAINT pkName PRIMARY KEY (Id,pwd)
            注释:如果使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。
        撤销 PRIMARY KEY 约束
        如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
        MySQL:
            ALTER TABLE tableName DROP PRIMARY KEY
        SQL Server / Oracle:
            ALTER TABLE tableName DROP CONSTRAINT pkName
    FOREIGN KEY -- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。用于预防破坏表之间连接的动作。必须是指向的那个表中的值之一。
        MySQL:
            CREATE TABLE tableName1
            (
                Id1 int NOT NULL,
                Id2 int,
                PRIMARY KEY (Id1),
                FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
            )
        SQL Server/Oracle:
            CREATE TABLE tableName1
            (
            Id1 int NOT NULL PRIMARY KEY,
            Id2 int FOREIGN KEY REFERENCES tableName2(Id2)
            )
        命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
            CREATE TABLE tableName1
            (
                Id1 int NOT NULL,
                Id2 int,
                PRIMARY KEY (Id1),
                CONSTRAINT fkName FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
            )
        表已创建:
            ALTER TABLE tableName1 ADD FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
        命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束:
            ALTER TABLE tableName1 ADD CONSTRAINT fkName FOREIGN KEY (Id2) REFERENCES tableName2(Id2)
        撤销 FOREIGN KEY 约束
            MySQL: ALTER TABLE tableName1 DROP FOREIGN KEY fkName
            SQLServer/Oracle: ALTER TABLE tableName1 DROP CONSTRAINT fkName
    CHECK -- 约束用于限制列中的值的范围。对单个列定义 CHECK 约束,该列只允许特定的值。对一个表定义 CHECK 约束,此约束会在特定的列中对值进行限制。
        以下CHECK 约束规定 "col1" 列必须只包含大于 0 的整数。
        My SQL:
            CREATE TABLE tableName
            (
                col1 int NOT NULL,
                CHECK (col1>0)
            )
        SQL Server/Oracle:
            CREATE TABLE tableName
            (
                col1 int NOT NULL CHECK (col1>0)
            )
        命名 CHECK 约束,以及为多个列定义 CHECK 约束:
            CREATE TABLE tableName
            (
                col1 int NOT NULL,
                col2 varchar(255),
                CONSTRAINT chkName CHECK (col1>0 AND col2='Sandnes')
            )
        表已存在:ALTER TABLE tableName ADD CHECK (col1>0)
        命名 CHECK 约束,以及为多个列定义 CHECK 约束:
            ALTER TABLE tableName ADD CONSTRAINT chkName CHECK (col1>0 AND col2='Sandnes')
        撤销 CHECK 约束
        SQLServer/Oracle: ALTER TABLE tableName DROP CONSTRAINT chkName
        MySQL: ALTER TABLE tableName DROP CHECK chkName
    DEFAULT -- 用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。
        CREATE TABLE tableName
        (
            col varchar(255) DEFAULT 'Sandnes'
        )
        通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于插入系统值:
        CREATE TABLE Orders
        (
        OrderDate date DEFAULT GETDATE()
        )
        表已存在:
        MySQL: ALTER TABLE tableName ALTER col SET DEFAULT 'SANDNES'
        SQL Server/Oracle:ALTER TABLE tableName ALTER COLUMN col SET DEFAULT 'SANDNES'
        撤销 DEFAULT 约束:
        MySQL: ALTER TABLE tableName ALTER col DROP DEFAULT
        SQL Server/Oracle:ALTER TABLE tableName ALTER COLUMN col DROP DEFAULT

原文地址:https://www.cnblogs.com/it-mh/p/12034623.html