1. 程式人生 > 其它 >MySQL筆記-約束

MySQL筆記-約束

1 資料庫表的約束

1.1 約束種類

約束名 關鍵字
主鍵 primary key
唯一 unique
非空 not null
外來鍵 foreign key

1.2 主鍵

  1. 主鍵的性質

    • 關鍵字: primary key
    • 特點:
      1. 非空
      2. 唯一
  2. 主鍵的建立
    2.1 建立表時新增主鍵
    欄位名 欄位型別 PRIMARY KEY
    2.2 在已有的表中新增主鍵
    ALTER TABLE 表名 ADD PRIMARY KEY(欄位名);

    • 例:
    --建立表t1
    create table t1(
    	id int primary key,
    	name varchar(20),
    	age int
    );
    desc t1;
    
    -- 插入值(此時id的值不能為null)
    inset into t1 values(1,'張三',20);
    
    --刪除主鍵
    alter table t1 drop primary key;
    
    --新增主鍵
    alter table t1 add int primary key(id);
    

    2.3 主鍵自增長
    AUTO_INCREMENT 表示自動增長(欄位型別必須是整數型別)

    • 語法:
    -- 建立表時建立
    CREATE TABLE 表名(
    	列名 int primary key AUTO_INCREMENT
    ) [AUTO_INCREMENT=起始值];
    
    -- 建立好後修改
    alter table 表名 AUTO_INCREMENT=起始值;
    

1.3 唯一約束

表中某一列不能出現重複的值

  • 格式:
    欄位名 欄位型別 UNIQUE;
    • null值沒有資料,不存在重複的問題

1.4 非空約束

某一列值不能為null

  • 格式:
    欄位名 欄位型別 NOT NULL;

1.5 外來鍵約束

  1. 概念
    • 主表:一方,用來約束其他表的表
    • 從表/副表:多方,使用主表的資料,被別人約束的表
    • 外來鍵: 在從表中與主表主鍵對應的那一列
  2. 語法
  • 建立
    [CONSTRAINT][外來鍵約束名稱] foreign key(外來鍵欄位名) references 主表名(主鍵欄位名);

  • 修改
    ALTER TABLE 從表 ADD [CONSTRAINT] [外來鍵約束名稱] FOREIGN KEY (外來鍵欄位名) REFERENCES 主表(主鍵欄位名);

  • 刪除
    ALTER TABLE 從表 drop foreign key 外來鍵名稱;

  • 級聯操作

在修改和刪除主表的主鍵時,同時更新或刪除副表的外來鍵值,稱為級聯操作

級聯操作語法 說明
ON UPDATE CASCADE 級聯更新,只能是建立表的時候建立級聯關係。
更新主表中的主鍵,從表中的外來鍵列也自動同步更新
ON DELETE CASCADE 級聯刪除
  • 例:
    -- 建立主表
    create table department(
    	id int PRIMARY key auto_increment,
    	dep_name VARCHAR(128),
    	dep_location VARCHAR(128)
    );
    insert into department
    values(null, '研發部','廣州'),(null, '銷售部', '深圳');
    
    --建立從表並新增外來鍵約束
    create table employee(
    id int primary key auto_increment,
    name varchar(20),
    age int,
    dep_id int, -- 外來鍵對應主表的主鍵
    -- 建立外來鍵約束並新增級聯操作
    constraint emp_depid_fk foreign key (dep_id) references department(id) on update cascade on delete cascade
    );
    -- 插入資料
    INSERT INTO employee (NAME, age, dep_id) VALUES ('張三', 20, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('李四', 21, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('王五', 20, 1);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('老王', 20, 2);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('大王', 22, 2);
    INSERT INTO employee (NAME, age, dep_id) VALUES ('小王', 18, 2);
    

參考網課資料