1. 程式人生 > >05-MySQL的完整性約束

05-MySQL的完整性約束

1.整體說明
(1)討論重點內容
    not null 與default
    unique:表中該值唯一,不能有重複值
    primary
    auto_increment
    foreign key
(2)約束條件與資料型別的寬度一致,都是可選引數
(3)作用:用於保證資料的完整性和一致性。
(4)主要分為如下:

    PRIMARY KEY (PK)    #標識該欄位為該表的主鍵,可以唯一的標識記錄
    FOREIGN KEY (FK)    #標識該欄位為該表的外來鍵
    NOT NULL    #標識該欄位不能為空
    UNIQUE KEY (UK)    #標識該欄位的值是唯一的
    AUTO_INCREMENT    #標識該欄位的值自動增長(整數型別,而且為主鍵)
    DEFAULT    #為該欄位設定預設值

    UNSIGNED #無符號
    ZEROFILL #使用0填充
(5)其他說明如下:
    #1. 是否允許為空,預設NULL,可設定NOT NULL,欄位不允許為空,必須賦值
    #2. 欄位是否有預設值,預設的預設值是NULL,如果插入記錄時不給欄位賦值,此欄位使用預設值
    sex enum('male','female') not null default 'male'

    #必須為正值(無符號) 不允許為空 預設是20
    age int unsigned NOT NULL default 20
    # 3. 是否是key
    主鍵 primary key
    外來鍵 foreign key
    索引 (index,unique...)

2.not null 與default
(1)預設值可以為空。
(2)設定not null時,插入值時不能為空。
(3)設定id欄位有預設值後,則無論id欄位是null還是not null,都可以插入空,插入空值時預設填入default指定的預設值。

3.unique:唯一
(1)包括單列唯一、多列唯一以及聯合唯一。
    create table user4(
        id int unique,
        name char(20)
    );

    create table user4(
        id int,
        name char(20),
        unique(id)
    );
(2)單列唯一
    create table user4(
        id int unique,
        name char(20)
    );
(3)多列唯一
     多列都不相同才可以插入,只要有一列相同都不能插入
    create table user5(
        id int unique,
        name char(20),
        ip char(30)unique
    );

(4)聯合唯一
    只要有一列不同 都可以插入。
    create table user6(
        id int,
        name char(20),
        ip char(30),
        unique(id,ip)
    );

4.primary key
在MySQL的一個表中只有唯一的一個主鍵,不能有多列主鍵,但可以有複合主鍵

一個表中可以:

單列做主鍵
多列做主鍵(複合主鍵)

5.auto_increment
(1)不指定ID,則自動增長
(2)指定ID則按照指定的ID增長
(3)對於自增的欄位,在用delete刪除後,再插入值,該欄位仍按照刪除前的位置繼續增長

6.foreign key

create table emp(
    id int primary key,
    name varchar(20) not null,
    age int not null,
    dep_id int,
    constraint fk_dep foreign key(dep_id) references dep(id)
    on delete cascade #同步刪除
    on update cascade #同步更新
);