MySQL 欄位約束

LiberHome發表於2022-06-06

欄位約束

目的:保證資料的:有效性、完整性、正確性。
分類:

  • not null: 非空約束 此列不為null 必須提供
  • unique: 唯一約束 此列的值不能重複
  • primary key: 主鍵約束 唯一標一條資料
  • foreign key: 外來鍵約束 建立不同表之間的關係

非空約束&唯一約束

not null: 非空約束 此列不為null 必須提供
例如下面帶有not null或者帶有unique的欄位:

 CREATE TABLE students(
    -> stu_num char(8) not null unique,
    -> stu_name varchar(20) not null,
    -> stu_age int not null,
    -> stu_tel char(11) not null unique,
    -> stu_qq varchar(11) unique
    -> );

主鍵約束

一張資料表只能有一個主鍵,不過一個主鍵可以有多個列組成(聯合主鍵),另外,主鍵一定非空且唯一,所以設定主鍵之後,該欄位就沒必要加非空和唯一約束了,比如:
寫法一:

 CREATE TABLE students(
    -> stu_num char(8) not null primary key,
    -> stu_name varchar(20) not null,
    -> stu_age int not null,
    -> stu_tel char(11) not null unique,
    -> stu_qq varchar(11) unique
    -> );

寫法二:

 CREATE TABLE students(
    -> stu_num char(8) not null,
    -> stu_name varchar(20) not null,
    -> stu_age int not null,
    -> stu_tel char(11) not null unique,
    -> stu_qq varchar(11) unique,
    -> primary key(stu_num)
    -> );

建立表之後新增主鍵約束
用modify

ALTER table stus modify stu_num char(4) primary key

主鍵自動增長

CREATE tabletypes(
    type_id int primary key auto_increment,
    type_name varchar(20) not null,
)

注意:自動增長從1開始, 每天夾一條記錄,計數器+1,刪除某條記錄後,計數器不會更新,所以自增只保證唯一性,不保證連續性。

聯合主鍵(使用頻率低)

將資料表中的多個欄位組合在一起

CREATE table grades(
    stunum char(8),
    course_id int,
    score int,
    primary key(str_num, course_id
)

外來鍵約束

後面多表關聯再展開

參考:bilibili

相關文章