国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mysql列的完整性約束最詳細(xì)教程之一——詳解

這篇具有很好參考價值的文章主要介紹了Mysql列的完整性約束最詳細(xì)教程之一——詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

一、主鍵約束

1.設(shè)置字段的主鍵約束(PRIMARY KEY,PK)

1.單字段主鍵

2.多字段主鍵

二、設(shè)置表字段的外鍵約束

1.簡介

2.語句格式

三、設(shè)置表字段的非空約束(NOT NULL, NK)

1.簡介

2.語句格式

四、設(shè)置字段值自動增加(AUTO_INCREMENT)

?1.語句格式

? 2.實際應(yīng)用

五、設(shè)置表字段的默認(rèn)值(DEFAULT)

六、調(diào)整列的完整性約束

1.?主鍵PK、外鍵FK和 唯一鍵UK

(1).新增

alter table [table_name] add constraint [constraint_name] [unique key| primary key|foreign key] ([column_name])

(2).刪除

(3).修改

(4).修改默認(rèn)值DEFAULT、自增長和非空NK


???大家好,我是會飛的魚-blog,今天我來給大家介紹一下Mysql,有不足之處,請大家多多指教。感謝大家支持?。。?/strong>

Mysql列的完整性約束最詳細(xì)教程之一——詳解

?

前言

????????完整性約束條件是對字段進(jìn)行限制,要求用戶對該屬性進(jìn)行的操作符合特定的要求。如果不滿足完整性約束條件,數(shù)據(jù)庫系統(tǒng)將不再執(zhí)行用戶的操作。MySQL中基本的完整性約束條件如表3-11所示。下表是完整性約束條件:

Mysql列的完整性約束最詳細(xì)教程之一——詳解


一、主鍵約束

1.設(shè)置字段的主鍵約束(PRIMARY KEY,PK)

????????主鍵是表的一個特殊字段,能唯一標(biāo)識該表中的每條信息。主鍵和記錄的關(guān)系,如同身份證和人的關(guān)系。主鍵用來標(biāo)識每個記錄,每個記錄的主鍵值都不同。身份證用來表明人的身份,每個人都具有唯一的身份證號。設(shè)置表的主鍵是指在創(chuàng)建表時設(shè)置表的某個字段為該表的主鍵。

????????主鍵的主要目的是幫助數(shù)據(jù)庫管理系統(tǒng)以最快的速度查找到表的某一條信息。主鍵必須滿足的條件就是主鍵必須是唯一的,表中任意兩條記錄的主鍵字段的值不能相同,并且是非空值。主鍵可以是單一的字段,也可以是多個字段的組合。

1.單字段主鍵

????????單字段主鍵的語法規(guī)則如下:

CREATE TABLE tablename(

??? propName propType PRIMARY KEY, ......

);

CREATE TABLE tablename(

??? propName propType , ......

PRIMARY KEY(propType)

);

????????創(chuàng)建表school,設(shè)置id字段為PK約束,再查看class表信息,SQL語句如下

mysql> create database school;?? #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;?? #選擇數(shù)據(jù)庫school

mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64));???????? #創(chuàng)建表class

mysql> desc class ;? #查詢表class 的定義, describe class 效果等同

mysql> show create table class ;? #同樣可以實現(xiàn)查詢表class 的定義

mysql> insert into class VALUES(1,'一班','martin');? #插入成功

mysql> insert into class VALUES(1,'二班','rock');??? #因主鍵約束,插入失敗

Mysql 支持給主鍵設(shè)置名字:

CREATE TABLE tablename(

??? propName propType , ......

CONSTRAINT pk_name PRIMARY KEY(propType)

);

給id字段的PK約束設(shè)置一個名字,可以執(zhí)行SQL語句CONSTRAINT。創(chuàng)建表class:

mysql> create database school;?? #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;?? #選擇數(shù)據(jù)庫school

mysql> create table class(id int , name varchar(128), teacher varchar(64), CONSTRAINT id_pk PRIMARY KEY (id));???????? #創(chuàng)建表class

mysql> desc class ;? #查詢表class 的定義, describe class 效果等同

mysql> show create table class ;? #同樣可以實現(xiàn)查詢表class 的定義

mysql> insert into class VALUES(1,'一班','martin');? #插入成功

mysql> insert into class VALUES(1,'二班','rock');?? ?#因主鍵約束,插入失敗

2.多字段主鍵

主鍵是由多個屬性組合而成時,在屬性定義完之后統(tǒng)一設(shè)置主鍵。語法規(guī)則如下:

CREATE TABLE tablename(?

??? propName1 propType ,

??? propName2 propType ,

??? ......????????????????????

[CONSTRAINT pk_name]PRIMARY KEY(propName1, propName2)

);

多字段主鍵的設(shè)置。

mysql> create database school;?? #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;?? #選擇數(shù)據(jù)庫school

mysql> create table class3(id int, name varchar(128), teacher varchar(64), CONSTRAINT id_pk PRIMARY KEY(id,name));???????? #創(chuàng)建表class3,設(shè)置聯(lián)合主鍵

mysql> desc class3 ;? #查詢表class3 的定義, describe class3 效果等同

mysql> insert into class VALUES(1,'一班','martin');? #插入成功

mysql> insert into class VALUES(1,'一班','rock');??? #因聯(lián)合主鍵約束,插入失敗

二、設(shè)置表字段的外鍵約束

1.簡介

????????外鍵是表的一個特殊字段,外鍵約束是為了保證多個表(通常為兩個表)之間的參照完整性,即構(gòu)建兩個表的字段之間的參照關(guān)系。

? ? ? ? 設(shè)置外鍵約束的兩個表之間具有父子關(guān)系,即子表中某個字段的取值范圍由父表決定。例如,表示一個班級和學(xué)生關(guān)系,即每個班級有多個學(xué)生。首先應(yīng)該有兩個表:班級表和學(xué)生表,然后學(xué)生表有一個表示班級編號的字段no,其依賴于班級表的主鍵,這樣字段no就是學(xué)生表的外鍵,通過該字段班級表和學(xué)生表建立了關(guān)系。

  • 一個班級表:

ID

名稱

班主任

101

六年級一班

tiger老師

102

六年級二班

王老師

班級表主鍵 <ID>

每一行對應(yīng)著一個班級,而一個班級對應(yīng)著多個學(xué)生,所以班級表和學(xué)生表的關(guān)系就是“一對多”:

ID

姓名

班級ID

性別

年齡

1

小花

101

M

9

2

小紅

102

F

8

3

小軍

102

M

8

4

小白

101

F

9

班級表<ID> 為學(xué)生表<班級ID >的外鍵

????????在具體設(shè)置FK約束時,設(shè)置FK約束的字段必須依賴于數(shù)據(jù)庫中已經(jīng)存在的父表的主鍵,同時外鍵可以為空(NULL)。

2.語句格式

????????設(shè)置表中某字段的FK約束非常簡單,可以在MySQL數(shù)據(jù)庫管理系統(tǒng)中通過SQL語句FOREIGN KEY來實現(xiàn),其語法形式如下:

CREATE TABLE tablename_1( 

    propName1 propType ,

    propName2 propType ,

    ......                    

[CONSTRAINT fk_name] FOREIGN KEY(propName1) REFERENCES table2_name(table2_column)

);

????????其中,tablename_1參數(shù)是要設(shè)置外鍵的表名,propName1參數(shù)是要設(shè)置外鍵的字段,table2_name是父表的名稱,table2_column是父表中設(shè)置主鍵約束的字段名。

mysql> use school; ? #選擇數(shù)據(jù)庫school

mysql> create table class(id int PRIMARY KEY, name varchar(128), teacher varchar(64)); ? ? ? ? #創(chuàng)建表class

mysql> desc class ; ?#查詢表class 的定義, describe class 效果等同

mysql> create table student (id int PRIMARY KEY AUTO_INCREMENT, name varchar(64) NOT NULL, class_id int, sex enum('M','F'), FOREIGN KEY(class_id) REFERENCES class(id) ); ?#創(chuàng)建表student, class_id 為表class id 字段的外鍵

mysql> insert into student(name, class_id, sex) values('小紅', 2, 'M'); ? #插入記錄,主鍵自增長

mysql> insert into student(name, sex) values('小軍', 'M'); ? #插入記錄,允許外鍵為空

三、設(shè)置表字段的非空約束(NOT NULL, NK)

1.簡介

????????當(dāng)數(shù)據(jù)庫表中的某個字段上的內(nèi)容不希望設(shè)置為NULL時,可以使用NK約束進(jìn)行設(shè)置。NK約束在創(chuàng)建數(shù)據(jù)庫表時為某些字段上加上“NOT NULL”約束條件,保證所有記錄中的該字段都有值。如果在用戶插入的記錄中該字段為空值,那么數(shù)據(jù)庫管理系統(tǒng)會報錯。

2.語句格式

????????設(shè)置表中某字段的NK約束非常簡單,查看幫助文檔可以發(fā)現(xiàn),在MySQL數(shù)據(jù)庫管理系統(tǒng)中是通過SQL語句NOT NULL來實現(xiàn)的,其語法形式如下:

CREATE TABLE tablename(

    propName propType NOT NULL , ......

);

如:

mysql> create database school;   #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;   #選擇數(shù)據(jù)庫school

mysql> create table class(id int, name varchar(128) NOT NULL, teacher varchar(64));         #創(chuàng)建表class

mysql> desc class ;  #查詢表class 的定義, describe class 效果等同

mysql> show create table class ;  #同樣可以實現(xiàn)查詢表class 的定義

????????檢驗數(shù)據(jù)庫school中的class表中字段classno是否被設(shè)置為NK約束,執(zhí)行SQL語句DESCRIBE,具體如下:

Mysql列的完整性約束最詳細(xì)教程之一——詳解

四、設(shè)置字段值自動增加(AUTO_INCREMENT)

????????AUTO_INCREMENT是MySQL唯一擴展的完整性約束,當(dāng)向數(shù)據(jù)庫表中插入新記錄時,字段上的值會自動生成唯一的ID。在具體設(shè)置AUTO_INCREMENT約束時,一個數(shù)據(jù)庫表中只能有一個字段使用該約束,該字段的數(shù)據(jù)類型必須是整數(shù)類型。由于設(shè)置AUTO_INCREMENT約束后的字段會生成唯一的ID,因此該字段也經(jīng)常會同時設(shè)置成PK主鍵。

?1.語句格式

????????設(shè)置表中某字段值的自動增加約束非常簡單,可以在MySQL數(shù)據(jù)庫管理系統(tǒng)中通過SQL語句AUTO_INCREMENT來實現(xiàn),其語法形式如下:

CREATE TABLE tablename(

    propName propType AUTO_INCREMENT, ......

);

????????在上述語句中,tablename參數(shù)表示所要設(shè)置非空約束的字段名字,propName參數(shù)為屬性名,propType為屬性類型,propName字段要設(shè)置自動增加約束。默認(rèn)情況下,字段propName的值從1開始增加,每增加一條記錄,記錄中該字段的值就會在前一條記錄(或已存在的最大值(包括曾經(jīng)存在的))的基礎(chǔ)上加1。
?

? 2.實際應(yīng)用

mysql> create database school;   #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;   #選擇數(shù)據(jù)庫school

mysql> create table class(id int PRIMARY KEY AUTO_INCREMENT, name varchar(128) UNIQUE, teacher varchar(64));         #創(chuàng)建表class,設(shè)置字段id為自增長

mysql> show create table class ;  #查詢表class 的定義

注意:?mysql8?中,AUTO_INCREMENT 必須設(shè)為鍵(主鍵、外鍵和唯一鍵均可)! 否則會報錯!

五、設(shè)置表字段的默認(rèn)值(DEFAULT)

????????當(dāng)為數(shù)據(jù)庫表中插入一條新記錄時,如果沒有為某個字段賦值,數(shù)據(jù)庫系統(tǒng)就會自動為這個字段插入默認(rèn)值。為了達(dá)到這種效果,可通過SQL語句關(guān)鍵字DEFAULT來設(shè)置。

????????設(shè)置數(shù)據(jù)庫表中某字段的默認(rèn)值非常簡單,可以在MySQL數(shù)據(jù)庫管理系統(tǒng)中通過SQL語句DEFAULT來實現(xiàn),其語法形式如下:

CREATE TABLE tablename(

    propName propType DEFAULT defaultvalue, ......

);

六、調(diào)整列的完整性約束

1.?主鍵PK、外鍵FK和 唯一鍵UK

(1).新增

alter table [table_name] add constraint [constraint_name] [unique key| primary key|foreign key] ([column_name])

(2).刪除

?????????通過如下命令查詢鍵值的約束名:

?show?index或keys?from?表名;????

????????執(zhí)行如下命令刪除:

主鍵:alter table?表名 drop primary key;

外鍵或唯一鍵:??alter table?表名 drop index 約束名;

(3).修改

????????按照上述步驟 先執(zhí)行?刪除?然后再?新增?即可!

(4).修改默認(rèn)值DEFAULT、自增長和非空NK

????????使用如下語法重新定義列即可:

alter table?表名 modify 列名 類定義;

mysql> create database school;   #創(chuàng)建數(shù)據(jù)庫school

mysql> use school;   #選擇數(shù)據(jù)庫school

mysql> create table class(id int PRIMARY KEY AUTO_INCREMENT, name varchar(128) UNIQUE, teacher varchar(64));         #創(chuàng)建表class,設(shè)置字段id為自增長

mysql> alter table class modify teacher varchar(64) DEFAULT ‘Martin’ NOT NULL ;  #設(shè)置默認(rèn)值和非空

mysql> alter table class modify teacher varchar(64) ; #取消默認(rèn)值和非空

總結(jié)

???????????以上就是我學(xué)習(xí)的總結(jié),希望大家一起探討、探討,一起加油,邁向更好的明天?。?!文章來源地址http://www.zghlxwxcb.cn/news/detail-442452.html


到了這里,關(guān)于Mysql列的完整性約束最詳細(xì)教程之一——詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 軟件測試|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    軟件測試|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    簡介 主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了便于 DBMS 更快的查找到表中的記錄,都會在表中設(shè)置一個主鍵。 MySQL是一種廣泛使用的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其支持多種數(shù)據(jù)約束,其中主鍵約束是其中最重要的之一

    2024年02月02日
    瀏覽(25)
  • 軟件測試/測試開發(fā)/全日制|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    軟件測試/測試開發(fā)/全日制|MySQL主鍵約束詳解:保障數(shù)據(jù)完整性與性能優(yōu)化

    簡介 主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了便于 DBMS 更快的查找到表中的記錄,都會在表中設(shè)置一個主鍵。 MySQL是一種廣泛使用的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),其支持多種數(shù)據(jù)約束,其中主鍵約束是其中最重要的之一

    2024年02月19日
    瀏覽(61)
  • 5.4 完整性約束命名子句

    5.4 完整性約束命名子句

    ? 定義 : 完整性約束是在 CREATE TABLE 語句中定義的。 SQL為 CREATE TABLE 語句提供了 CONSTRAINT 子句,用于對完整性約束進(jìn)行命名。 命名的目的是方便增加或刪除約束。 基本結(jié)構(gòu) : 其中,完整性約束條件可以是NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK等。 示例 : 學(xué)生登記表 Student

    2024年02月06日
    瀏覽(21)
  • MySQL數(shù)據(jù)庫完整性

    數(shù)據(jù)庫的完整性是指數(shù)據(jù)的正確性和相容性。 數(shù)據(jù)的正確性是指數(shù)據(jù)符合現(xiàn)實世界語義,反映當(dāng)前實際情況;數(shù)據(jù)的相容性是指數(shù)據(jù)庫在同一對象的不同關(guān)系表中的數(shù)據(jù)是符合邏輯的。 數(shù)據(jù)的完整性:為了防止數(shù)據(jù)庫中存在不和語義的數(shù)據(jù) 數(shù)據(jù)的安全性:為了保護(hù)數(shù)據(jù)庫防

    2024年02月15日
    瀏覽(28)
  • MySQL開發(fā)技巧——查詢、索引和完整性

    MySQL開發(fā)技巧——查詢、索引和完整性

    ?目錄 第1關(guān) 基本查詢的學(xué)習(xí) 查詢語句SELECT 頭歌實驗 查詢語句SELECT 第2關(guān) 深入學(xué)習(xí)查詢語句 MySQL聚集函數(shù) 頭歌實驗 MySQL聚集函數(shù) 第3關(guān) 視圖的創(chuàng)建和使用 查看數(shù)據(jù)庫中表的情況: 頭歌實驗 第4關(guān) 索引和完整性 索引 頭歌實驗 索引 數(shù)據(jù)完整性 域完整性 實體完整性 參照完整

    2024年02月08日
    瀏覽(19)
  • 【MySQL事務(wù)】保證數(shù)據(jù)完整性的利器

    【MySQL事務(wù)】保證數(shù)據(jù)完整性的利器

    事務(wù): 事務(wù)就是將多個SQL給打包在一起,組成一個整體。組成這個整體的各個SQL,要么全部成功,要么全部失敗。 舉例說明: 情人節(jié)到了,滑稽老鐵打算給他女朋友小美發(fā)給紅包,但是他又害怕小美不收,于是他想到了一個辦法就是通過銀行卡進(jìn)行轉(zhuǎn)賬。他給小美轉(zhuǎn)賬了

    2024年02月08日
    瀏覽(31)
  • 【MySQL】數(shù)據(jù)庫完整性和安全性

    【MySQL】數(shù)據(jù)庫完整性和安全性

    目錄 ? 一、完整性 1.概念 2.sql語言支持的兩種約束 ? ??2.1靜態(tài)約束 ? ? ? ? ?撤銷追加約束 ? ? ? ? ?斷言 ? ??2.3動態(tài)約束 ? ? ? ? ??觸發(fā)器 二、安全性 用DBMS對數(shù)據(jù)庫實現(xiàn)的兩個特性? 1.概念 指dbms保證的db的一種特性,在任何情況下的正確性、有效性、一致性 原理圖

    2023年04月24日
    瀏覽(30)
  • MySQL修煉手冊11:事務(wù)處理:確保數(shù)據(jù)的一致性與完整性

    在探索數(shù)據(jù)管理的世界中,理解如何在數(shù)據(jù)庫中使用事務(wù)處理,無疑是一項關(guān)鍵的能力。在處理復(fù)雜的數(shù)據(jù)庫操作,尤其是在你試圖在多個表或數(shù)據(jù)庫中更新數(shù)據(jù)時,事務(wù)可以確保這些更改具有原子性、一致性、隔離性和持久性,即ACID。因此,掌握事務(wù)對任何數(shù)據(jù)庫專業(yè)人員

    2024年01月21日
    瀏覽(25)
  • 信號完整性(SI)電源完整性(PI)學(xué)習(xí)筆記(一)信號完整性分析概論

    信號完整性分析概論 1.信號完整性(SI):指在高速產(chǎn)品中由互聯(lián)線引起的所有問題;研究當(dāng)互聯(lián)線與數(shù)字信號的電壓電流波形相互作用時,其電氣特性如何影響產(chǎn)品的性能,SI又叫信號波形失真。 2.電源完整性(PI):指為有源器件供電的互聯(lián)線及各相關(guān)元件上的噪聲;PDN(

    2024年02月04日
    瀏覽(42)
  • 信號完整性與電源完整性分析-Eric Bogatin

    信號完整性與電源完整性分析-Eric Bogatin

    第一章 信號完整性概論 1-任何一段互聯(lián),無論線長和形狀,也無論信號的上升邊如何,都是一個由信號路徑和返回路徑構(gòu)成的傳輸線。信號在互聯(lián)前進(jìn)的每一步,都會感受到瞬時阻抗。若阻抗恒為常量,信號質(zhì)量就會優(yōu)良 2-信號網(wǎng)絡(luò)不僅包括信號路徑,還包括信號電流的返回

    2024年02月06日
    瀏覽(39)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包