關於MySQL資料庫約束

來源:互聯網
上載者:User

關於MySQL資料庫約束

資料庫約束:   
  約束是在表上強制執行的資料校正規則,主要用於保證資料庫裡資料的完整性。   
  除此之外,當表中的資料存在相互依賴性時,可以保證相關的資料不被刪除。

根據約束對資料列的限制,約束可分為如下兩類:           
  單列約束: 每個約束只約束一列           
  多列約束: 每個約束可以約束多個資料列

為資料表指定約束有如下兩個時機:           
  建表的同時為相應的資料列指定約束           
  建立表後,以修改表的方式來增加約束

大部分資料庫支援下面5中完整性條件約束:
1.NOT NULL: 非空約束,指定某列不可為空,只能作為資料行層級條件約束使用,只能使用資料行層級條件約束文法定義。
 SQL中的null值,null不區分大小寫,具有如下特徵:
   所有資料類型的值都可以是null,包括int、float、boolean等。
    Null 字元串不等於null,0也不等於null。

 建表時為指定列設定非空約束,只需在列定義後增加not null即可,例如:
create table t_test
(
    id int not null,
    name varchar(255) default 'xyz' not null,
    gender varchar(2) null
);
使用alter table修改表時增加或刪除非空約束,例如:

#增加非空約束
alter table t_test modify gender varchar(2) not null;

#取消非空約束
alter table t_test modify gender varchar(2) null;

#取消非空約束,並指定預設值
alter table t_test modify name varchar(255) default 'abc' null;

2.UNIQUE: 唯一約束,指定某列或者幾列組合不能重複
雖然唯一約束的列不可以出現重複值,但可以出現多個null值,因為在資料庫中null不等於null。

同一個表內可建立多個唯一約束,唯一約束也可有多列組合而成。 當為某列建立唯一約束時,MySQL會為該列建立唯一索引, 如果不給唯一約束起名,該唯一約束預設與列名相同。

唯一約束可以使用列級文法建立,也可以使用表級文法建立。 如果是為多列建立組合約束,或者需要為約束指定約束名,則只能使用表級文法。

使用列級文法建立唯一約束,只需要在列定義後增加unique關鍵字即可:

#建立表時建立唯一約束,使用列級文法建立
create table unique_test
(
    #建立非空約束,意味著id不能為null
    id int not null,
    #建立唯一約束,意味著多行資料的該列值不能相等
    name varchar(255) unique
);

表級文法建立唯一約束的格式:

[constraint 約束名] unique (列名[,列名,...])
上面的表級約束文法格式既可以放在create table語句中與列定義並列,也可以放在alter table語句中使用add關鍵字添加:

#建立表時,使用表級文法建立唯一約束
create table uniques_test2
(
    #為id建立非空約束,意味著id不能為null
    id int not null,
    name varchar(255),
    pass varchar(255),
    #使用表級文法為name建立唯一約束
    unique (name),
    #使用表級文法為pass建立唯一約束,並指定約束名為test2_uk
    constraint test2_uk unique (pass)
);

#建立表時,使用表級文法建立組合列的唯一約束
create table unique_test3
(
    id int not null,
    name varchar(255),
    pass varchar(255),
    #指定name和pass兩列組合不能重複
    constraint test3_uk unique (name, pass)
);


#在修改表時,使用add關鍵字來增加唯一約束
alter table unique_test3 add unique (id, name);


#在修改表時,使用modify關鍵字,來為單列設定唯一約束
alter table unique_test3 modify name varchar(100) unique;

MySQL中刪除唯一約束:
  文法格式:

alter table tableName drop index 約束名;
    例句:

#刪除unique_test3表中的test3_uk唯一約束
alter table unique_test3 drop index test3_uk;
 

3.PRIMARY KEY: 主鍵約束,指定該列的值可以唯一地標識該條記錄

4.FOREIGN KEY: 外鍵約束,指定該行記錄從屬於主表中的一條記錄,主要用於保證參照完整性

5.CHECK(MySQL不支援): 檢查約束,指定一個布林運算式,用於指定對應列的值必須滿足該運算式

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-03/151362.htm

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.