溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

MySQL表的創(chuàng)建和約束實(shí)例分析

發(fā)布時(shí)間:2022-07-27 10:05:12 來(lái)源:億速云 閱讀:113 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“MySQL表的創(chuàng)建和約束實(shí)例分析”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“MySQL表的創(chuàng)建和約束實(shí)例分析”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

一、數(shù)據(jù)庫(kù)的建立和銷(xiāo)毀

建立數(shù)據(jù)庫(kù):

create database [if not exists] 數(shù)據(jù)庫(kù)名 [default charset 字符集]

tips: 中括號(hào)[]里面的內(nèi)容可以省略不寫(xiě)

加上if not exists的含義是:如果不存在此數(shù)據(jù)庫(kù)就會(huì)創(chuàng)建

default charset 字符集是創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候設(shè)置字符集

銷(xiāo)毀數(shù)據(jù)庫(kù):

drop database [if exists] 數(shù)據(jù)庫(kù)名

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

二、表的建立和銷(xiāo)毀

1、表的建立

語(yǔ)法:

create table [if not exists] 表名(
    字段名  數(shù)據(jù)類(lèi)型  [約束],
    字段名  數(shù)據(jù)類(lèi)型  [約束],
    ...(最后一個(gè)字段不能加逗號(hào))
)

1.1、命名規(guī)則

表名通常以t_開(kāi)頭

關(guān)鍵字段通常以表名縮寫(xiě)_開(kāi)頭

MySQL不區(qū)分大小寫(xiě),不能使用關(guān)鍵字命名,多個(gè)部分之間用下劃線連接

1.2、數(shù)據(jù)類(lèi)型

需要掌握的數(shù)據(jù)類(lèi)型:

1.整數(shù):int、integer、bigint

2.小數(shù):decimal

3.字符串:varchar

4.枚舉:enum

5.日期:datatime

使用建議:

當(dāng)字段數(shù)字一定大于0并且不會(huì)進(jìn)行減運(yùn)算時(shí)可以使用無(wú)符號(hào)數(shù)unsigned,通常不建議

float和double存在精度問(wèn)題,后續(xù)mysql將不再支持

char和verchar在保存多個(gè)字符時(shí)底層實(shí)現(xiàn)是一致的,只是占用空間的模式不同,不建議使用char,因?yàn)橛锌赡芾速M(fèi)空間

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

2、表約束概念

2.1、約束預(yù)覽

約束解釋說(shuō)明
primary key主鍵用來(lái)標(biāo)志一列為主鍵列
not null非空約束該列值不允許為空
unique唯一約束該列值不允許重復(fù)
default默認(rèn)給該列設(shè)置默認(rèn)值
foreign key外鍵標(biāo)志一列為外鍵值
check檢查約束MySQL不支持

2.2、特點(diǎn)及作用

主鍵

作用:可以作為唯一標(biāo)識(shí)具體鎖定某行數(shù)據(jù)

特點(diǎn):非空且唯一

一張表至多有一個(gè)主鍵列

非空

特點(diǎn):值不能為null,必須設(shè)定

唯一

特點(diǎn):值可以為null,并且可以存在多個(gè)null,該約束只對(duì)已經(jīng)存在的值有效

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

默認(rèn)

特點(diǎn):如果該列未顯式賦值,則使用默認(rèn)值存放

語(yǔ)法: default(值)

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

3、表約束具體使用

3.1、列級(jí)約束

直接將約束定義到在列的聲明里

使用示例:

-- 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,-- 非空 無(wú)符號(hào)數(shù)  0-255
        sex enum('男','女','奧特曼') default '奧特曼',-- 默認(rèn)
        height decimal(4,1), -- 總共有4位,小數(shù)點(diǎn)占1位:000.0
        birthday datetime
)

3.2、表級(jí)約束

將約束單獨(dú)定義在所有列的下方,not null和default沒(méi)有表級(jí)約束

語(yǔ)法:[constraint 自定義約束名] 約束類(lèi)型(字段名)

使用示例:

create table if not exists t_person(
        p_id int,-- 主鍵
        p_name varchar(50) not null,-- 唯一+非空
        age tinyint unsigned not null,-- 非空 無(wú)符號(hào)數(shù)  0-255
        sex enum('男','女','奧特曼') default '奧特曼',-- 默認(rèn)
        height decimal(4,1), -- 總共有4位,小數(shù)點(diǎn)占1位:000.0
        birthday datetime,
        -- 表級(jí)約束
        primary key(p_id),-- 給p_id添加主鍵約束
        constraint un_name unique(p_name)-- 給p_name添加唯一約束
)

3.3、外鍵約束

作用:用來(lái)表示兩張表之間的聯(lián)系,必須結(jié)合另一張表使用

特點(diǎn):

  • 連接的必須是另一張表的主鍵或者唯一列

  • 外鍵列的值不可自定義,必須來(lái)自另一張表與之關(guān)聯(lián)的列中已經(jīng)存在的值

  • 值可以為null,不唯一

  • 必須用表級(jí)約束創(chuàng)建

語(yǔ)法:

foreign key(字段名) references 其他表名(其他表的連接字段名)

使用:

  • 建表順序:先建沒(méi)有外鍵的表,再建有外鍵的表

  • 刪表順序:先刪有外鍵的,再刪沒(méi)外鍵的

  • 外鍵列的數(shù)據(jù)類(lèi)型必須與所連接的列一致

使用示例:

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

4、表的銷(xiāo)毀

語(yǔ)法:

drop table [if exists] 表名

注意事項(xiàng):

在3.3外鍵約束具體使用中對(duì)于有外鍵的表,要先刪除有外鍵的表,再刪除沒(méi)有外鍵的表

drop table t_student – 先刪學(xué)生表

drop table t_class – 才能刪班級(jí)表

讀到這里,這篇“MySQL表的創(chuàng)建和約束實(shí)例分析”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI