欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql表的約束超詳細(xì)講解

 更新時(shí)間:2022年09月08日 09:24:22   作者:_End丶斷弦  
MySQL唯一約束(Unique Key)是指所有記錄中字段的值不能重復(fù)出現(xiàn)。例如,為 id 字段加上唯一性約束后,每條記錄的 id 值都是唯一的,不能出現(xiàn)重復(fù)的情況

約束的概念

約束:通過限制用戶操作的方式,來達(dá)到維護(hù)數(shù)據(jù)本身安全,完整性的一套方案。

為什么要有約束? Mysql是一套整體的數(shù)據(jù)存儲(chǔ)解決方案,除了解決數(shù)據(jù)存儲(chǔ)功能,還要保證數(shù)據(jù)的安全,減少用戶的誤操作。 表的約束有很多,主要介紹:null/not null,default, comment, zerofill,primary key, auto_increment,unique key 。

空屬性

數(shù)據(jù)庫默認(rèn)字段基本都是字段為空,但是實(shí)際開發(fā)時(shí),盡可能保證字段不為空,因?yàn)閿?shù)據(jù)為空沒辦法參與運(yùn)算。

空屬性有2個(gè)值分別為: null(默認(rèn))not null(不為空)

例:

實(shí)例:

創(chuàng)建一個(gè)班級表,包含班級名和班級所在的教室。如果班級沒有名字,就不知道學(xué)生在哪個(gè)班級,如果教室為空,就不知道在哪里上課。所以在設(shè)計(jì)數(shù)據(jù)庫時(shí)要在表中進(jìn)行限制,滿足上面條件的數(shù)據(jù)就不能插入到表中。這就是約束。

create table myclass( 
 class_name varchar(20) not null, 
 class_room varchar(10) not null
);

沒有給class_room插入數(shù)據(jù)就報(bào)錯(cuò)了。

默認(rèn)值

默認(rèn)值:某一種數(shù)據(jù)會(huì)經(jīng)常性的出現(xiàn)某個(gè)具體的值,可以在一開始就指定好,在需要真實(shí)數(shù)據(jù)的時(shí)候,用戶可以選擇性的使用默認(rèn)值。

實(shí)例:

數(shù)據(jù)在插入時(shí)不給該字段賦值,就使用默認(rèn)值。注意:只有設(shè)置了default的列,才可以在插入值的時(shí)候,對列進(jìn)行省略

列描述

列描述:comment,沒有實(shí)際含義,專門用來描述字段,會(huì)根據(jù)表創(chuàng)建語句保存,用來給程序員或DBA來進(jìn)行了解。

create table tt12 ( 
name varchar(20) not null comment '姓名', 
sex char(2) default '男' comment '性別' 
);

desc 表名查不到注釋,通過show能看到注釋。

zerofill

主鍵

主鍵:primary key用來唯一的約束該字段里面的數(shù)據(jù),不能重復(fù),不能為空,一張表中最多只能有一個(gè)主鍵;主鍵所在的列通常是整數(shù)類型。

案例:

創(chuàng)建表的時(shí)候直接在字段上指定主鍵

create table tt13 ( 
id int unsigned primary key comment '學(xué)號(hào)不能為空', 
name varchar(20) not null);

主鍵對應(yīng)的字段不能重復(fù),再插入張三就會(huì)報(bào)錯(cuò),

刪除主鍵:

alter table 表名 drop primary key;

當(dāng)表創(chuàng)建好以后但是沒有主鍵的時(shí)候,可以再次追加主鍵

alter table 表名 add primary key(字段列表)

剛剛是刪除主鍵了,再次添加主鍵。

復(fù)合主鍵:

在創(chuàng)建表的時(shí)候,在所有字段之后,使用primary key(主鍵字段列表)來創(chuàng)建主鍵,如果有多個(gè)字段作為主鍵,可以使用復(fù)合主鍵。

實(shí)例:

create table tt14( 
id int unsigned, 
course char(10) comment '課程代碼', 
score tinyint unsigned default 60 comment '成績', 
primary key(id, course) -- id和course為復(fù)合主鍵 -> );

也會(huì)出現(xiàn)主鍵沖突。

自增長

auto_increment:當(dāng)對應(yīng)的字段,不給值,會(huì)自動(dòng)的被系統(tǒng)觸發(fā),系統(tǒng)會(huì)從當(dāng)前字段中已經(jīng)有的最大值+1操作,得到一個(gè)新的不同的值。通常和主鍵搭配使用,作為邏輯主鍵。

id會(huì)自動(dòng)增長。

它就會(huì)從字段中最大值+1.

自增長特點(diǎn):

  • 任何一個(gè)字段要做自增長,前提是本身是一個(gè)索引(key一欄有值)
  • 自增長字段必須是整數(shù)
  • 一張表最多只能有一個(gè)自增長

唯一鍵

一張表中有往往有很多字段需要唯一性,數(shù)據(jù)不能重復(fù),但是一張表中只能有一個(gè)主鍵:唯一鍵就可以解決表中有多個(gè)字段需要唯一性約束的問題。

唯一鍵和主鍵的區(qū)別:

  • 唯一鍵的本質(zhì)和主鍵差不多,唯一鍵允許為空,而且可以多個(gè)為空,空字段不做唯一性比較。
  • 主鍵更多的是標(biāo)識(shí)唯一性的。而唯一鍵更多的是保證在業(yè)務(wù)上,不要和別的信息出現(xiàn)重復(fù)。

實(shí)例:

在公司中,需要一個(gè)員工管理系統(tǒng),員工表中有2條信息,一個(gè)是身份證,一個(gè)是員工號(hào),選擇身份證作為主鍵,設(shè)計(jì)員工工號(hào)時(shí)不能有重復(fù)的,所以需要唯一鍵。注意:一般建議把主鍵設(shè)計(jì)成和當(dāng)前的業(yè)務(wù)無關(guān)的字段,當(dāng)需要調(diào)整業(yè)務(wù)時(shí),不需要對主鍵做大的調(diào)整。

create table student ( 
id char(10) unique comment '學(xué)號(hào),不能重復(fù),但可以為空', 
name varchar(10) 
 );

唯一鍵不能重復(fù),但是可以為空。

外鍵

外鍵用于定義主表和從表之間的關(guān)系:外鍵約束主要定義在從表上,主表則必須是有主鍵約束或unique約束。當(dāng)定義外鍵后,要求外鍵列數(shù)據(jù)必須在主表的主鍵列存在或?yàn)閚ull。

主表

create table myclass ( 
id int primary key, 
name varchar(30) not null comment'班級名' 
);

從表

create table stu ( 
id int primary key,
name varchar(30) not null comment '學(xué)生名', 
class_id int, 
foreign key (class_id) references myclass(id) 
);

正常插入數(shù)據(jù):

插入一個(gè)班級30的學(xué)生

就會(huì)報(bào)錯(cuò)。

結(jié)論:

理論上,上面的例子,我們不創(chuàng)建外鍵約束,就正常建立學(xué)生表,以及班級表,該有的字段我們都有。 此時(shí),在實(shí)際使用的時(shí)候,可能會(huì)出現(xiàn)什么問題? 有沒有可能插入的學(xué)生信息中有具體的班級,但是該班級卻沒有在班級表中?出現(xiàn)了103的班級,解決方案就是通過外鍵完成的。建立外鍵的本質(zhì)其實(shí)就是把相關(guān)性交給mysql去審核了,提前告訴mysql表之間的約束關(guān) 系,那么當(dāng)用戶插入不符合業(yè)務(wù)邏輯的數(shù)據(jù)的時(shí)候,mysql不允許你插入。

到此這篇關(guān)于Mysql表的約束超詳細(xì)講解的文章就介紹到這了,更多相關(guān)Mysql表的約束內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • session 加入mysql庫的方法

    session 加入mysql庫的方法

    本篇文章主要介紹了 session 加入mysql的方法,大家在開發(fā)過程中會(huì)遇到對數(shù)據(jù)庫的操作,有時(shí)會(huì)遇到Session加入mysql,這里給大家提供了方法,
    2016-07-07
  • mysql缺少my.ini文件的解決方法

    mysql缺少my.ini文件的解決方法

    使用的這么長時(shí)間的mysql,有一天我突然需要使用mysql?的配置文件my.ini時(shí)發(fā)現(xiàn)沒有這個(gè)文件并且這個(gè)文件不是被隱藏了,所以本文給大家介紹了mysql缺少my.ini文件的解決方法,需要的朋友可以參考下
    2023-12-12
  • 兩大步驟教您開啟MySQL 數(shù)據(jù)庫遠(yuǎn)程登陸帳號(hào)的方法

    兩大步驟教您開啟MySQL 數(shù)據(jù)庫遠(yuǎn)程登陸帳號(hào)的方法

    在工作實(shí)踐和學(xué)習(xí)中,如何開啟 MySQL 數(shù)據(jù)庫的遠(yuǎn)程登陸帳號(hào)算是一個(gè)難點(diǎn)的問題,以下內(nèi)容便是在工作和實(shí)踐中總結(jié)出來的兩大步驟,能幫助DBA們順利的完成開啟 MySQL 數(shù)據(jù)庫的遠(yuǎn)程登陸帳號(hào)。
    2011-03-03
  • mysql?binlog?回滾示例解析

    mysql?binlog?回滾示例解析

    嚴(yán)格來說mysqlbinlog 不能算回滾,他只是將過去的數(shù)據(jù)修改記錄 重新執(zhí)行一遍,但是從結(jié)果上來看,他也算把數(shù)據(jù)恢復(fù)到任意時(shí)間點(diǎn)了,這篇文章主要介紹了mysql?binlog回滾示例解析,需要的朋友可以參考下
    2023-08-08
  • MySQL之復(fù)雜查詢的實(shí)現(xiàn)

    MySQL之復(fù)雜查詢的實(shí)現(xiàn)

    本文主要介紹了MySQL之復(fù)雜查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • mysql Community Server 5.7.19安裝指南(詳細(xì))

    mysql Community Server 5.7.19安裝指南(詳細(xì))

    這篇文章主要介紹了mysql Community Server 5.7.19安裝指南(詳細(xì)),需要的朋友可以參考下
    2017-10-10
  • CMS不要讓MySQL為你流淚

    CMS不要讓MySQL為你流淚

    MySQL是中小型網(wǎng)站普遍使用的數(shù)據(jù)庫之一,然而,很多人并不清楚MySQL到底能支持多大的數(shù)據(jù)量,再加上某些國內(nèi)CMS廠商把數(shù)據(jù)承載量的責(zé)任推給它,導(dǎo)致很多不了解MySQL的站長對它產(chǎn)生了很多誤解
    2008-12-12
  • MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析

    MySQL因大事務(wù)導(dǎo)致的Insert慢實(shí)例分析

    這篇文章主要給大家介紹了關(guān)于MySQL因大事務(wù)導(dǎo)致Insert慢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Mac操作系統(tǒng)下MySQL密碼忘記后重置密碼的方法

    Mac操作系統(tǒng)下MySQL密碼忘記后重置密碼的方法

    本文給大家介紹Mac下忘記MySQL密碼后重置密碼的方法,下面通過關(guān)閉mysql服務(wù)器,配置短命令相關(guān)操作,完成重置密碼功能,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友可以參考下
    2016-06-06
  • 解決xmapp啟動(dòng)mysql出現(xiàn)Error: MySQL shutdown unexpectedly.問題

    解決xmapp啟動(dòng)mysql出現(xiàn)Error: MySQL shutdown unexpec

    這篇文章主要介紹了解決xmapp啟動(dòng)mysql出現(xiàn)Error: MySQL shutdown unexpectedly.問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論