首頁 > 軟體

一文掌握MySQL表的建立和約束

2022-07-26 14:04:32

一、資料庫的建立和銷燬

建立資料庫:

create database [if not exists] 資料庫名 [default charset 字元集]

tips: 中括號[]裡面的內容可以省略不寫

加上if not exists的含義是:如果不存在此資料庫就會建立

default charset 字元集是建立資料庫的時候設定字元集

銷燬資料庫:

drop database [if exists] 資料庫名

tips: 可省略部分的含義同上

二、表的建立和銷燬

1、表的建立

語法:

create table [if not exists] 表名(
    欄位名  資料型別  [約束],
    欄位名  資料型別  [約束],
    ...(最後一個欄位不能加逗號)
)

1.1、命名規則

表名通常以t_開頭

關鍵欄位通常以表名縮寫_開頭

MySQL不區分大小寫,不能使用關鍵字命名,多個部分之間用下劃線連線

1.2、資料型別

需要掌握的資料型別:

1.整數:int、integer、bigint

2.小數:decimal

3.字串:varchar

4.列舉:enum

5.日期:datatime

使用建議:

當欄位數位一定大於0並且不會進行減運算時可以使用無符號數unsigned,通常不建議

float和double存在精度問題,後續mysql將不再支援

char和verchar在儲存多個字元時底層實現是一致的,只是佔用空間的模式不同,不建議使用char,因為有可能浪費空間

timestamp上限太低,date和time不實用,所以日期建議使用datetime

2、表約束概念

2.1、約束預覽

約束解釋說明
primary key主鍵用來標誌一列為主鍵列
not null非空約束該列值不允許為空
unique唯一約束該列值不允許重複
default預設給該列設定預設值
foreign key外來鍵標誌一列為外來鍵值
check檢查約束MySQL不支援

2.2、特點及作用

主鍵

作用:可以作為唯一標識具體鎖定某行資料

特點:非空且唯一

一張表至多有一個主鍵列

非空

特點:值不能為null,必須設定

唯一

特點:值可以為null,並且可以存在多個null,該約束只對已經存在的值有效

非空約束+唯一約束 不等同於 主鍵約束

預設

特點:如果該列未顯式賦值,則使用預設值存放

語法: default(值)

外來鍵的使用放在下面具體講解

3、表約束具體使用

3.1、列級約束

直接將約束定義到在列的宣告裡

使用範例:

-- id、姓名、年齡、性別、身高、生日
create table if not exists t_person(
        p_id int primary key,-- 主鍵
        p_name varchar(50) unique not null,-- 唯一+非空
        age tinyint unsigned not null,-- 非空 無符號數  0-255
        sex enum('男','女','奧特曼') default '奧特曼',-- 預設
        height decimal(4,1), -- 總共有4位元,小數點佔1位:000.0
        birthday datetime
)

3.2、表級約束

將約束單獨定義在所有列的下方,not null和default沒有表級約束

語法:[constraint 自定義約束名] 約束型別(欄位名)

使用範例:

create table if not exists t_person(
        p_id int,-- 主鍵
        p_name varchar(50) not null,-- 唯一+非空
        age tinyint unsigned not null,-- 非空 無符號數  0-255
        sex enum('男','女','奧特曼') default '奧特曼',-- 預設
        height decimal(4,1), -- 總共有4位元,小數點佔1位:000.0
        birthday datetime,
        -- 表級約束
        primary key(p_id),-- 給p_id新增主鍵約束
        constraint un_name unique(p_name)-- 給p_name新增唯一約束
)

3.3、外來鍵約束

作用:用來表示兩張表之間的聯絡,必須結合另一張表使用

特點:

  • 連線的必須是另一張表的主鍵或者唯一列
  • 外來鍵列的值不可自定義,必須來自另一張表與之關聯的列中已經存在的值
  • 值可以為null,不唯一
  • 必須用表級約束建立

語法:

foreign key(欄位名) references 其他表名(其他表的連線欄位名)

使用:

  • 建表順序:先建沒有外來鍵的表,再建有外來鍵的表
  • 刪表順序:先刪有外來鍵的,再刪沒外來鍵的
  • 外來鍵列的資料型別必須與所連線的列一致

使用範例:

-- 班級表:id,班級名
create table t_class(
    c_id  int PRIMARY KEY,
    c_name varchar(20) not null
)
-- 學生表:id,姓名,所屬班級id
create table t_student(
    s_id int PRIMARY KEY,
    s_name varchar(20) not null,
    c_id int not null ,
    -- 表級約束
    FOREIGN KEY(c_id) REFERENCES t_class(c_id)
)

4、表的銷燬

語法:

drop table [if exists] 表名

注意事項:

在3.3外來鍵約束具體使用中對於有外來鍵的表,要先刪除有外來鍵的表,再刪除沒有外來鍵的表

drop table t_student – 先刪學生表

drop table t_class – 才能刪班級表

到此這篇關於一文掌握MySQL表的建立和約束的文章就介紹到這了,更多相關MySQL表 建立 約束內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com