![MySQL數(shù)據(jù)庫教程課件_第1頁](http://file4.renrendoc.com/view11/M00/0C/1A/wKhkGWeAvAmAVmNsAACQ-NFy9Ho473.jpg)
![MySQL數(shù)據(jù)庫教程課件_第2頁](http://file4.renrendoc.com/view11/M00/0C/1A/wKhkGWeAvAmAVmNsAACQ-NFy9Ho4732.jpg)
![MySQL數(shù)據(jù)庫教程課件_第3頁](http://file4.renrendoc.com/view11/M00/0C/1A/wKhkGWeAvAmAVmNsAACQ-NFy9Ho4733.jpg)
![MySQL數(shù)據(jù)庫教程課件_第4頁](http://file4.renrendoc.com/view11/M00/0C/1A/wKhkGWeAvAmAVmNsAACQ-NFy9Ho4734.jpg)
![MySQL數(shù)據(jù)庫教程課件_第5頁](http://file4.renrendoc.com/view11/M00/0C/1A/wKhkGWeAvAmAVmNsAACQ-NFy9Ho4735.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第3章數(shù)據(jù)定義學(xué)習(xí)目標(biāo)掌握創(chuàng)建和管理數(shù)據(jù)庫的相關(guān)語句。掌握創(chuàng)建和管理數(shù)據(jù)表的相關(guān)語句。了解數(shù)據(jù)完整性約束的功能和作用。掌握建立數(shù)據(jù)完整性約束的方法。3.1創(chuàng)建和管理數(shù)據(jù)庫安裝MySQL時自動生成了系統(tǒng)使用的數(shù)據(jù)庫,但是設(shè)計人員設(shè)計的數(shù)據(jù)庫需要單獨(dú)創(chuàng)建。MySQL中的數(shù)據(jù)庫可以采用命令行或者通過圖形化的數(shù)據(jù)庫工具(如NavicatforMySQL)來創(chuàng)建和管理。3.1.1創(chuàng)建數(shù)據(jù)庫1.創(chuàng)建數(shù)據(jù)庫的語句CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名[[DEFAULT]CHARACTERSET字符集][[DEFAULT]COLLATE字符集的校對規(guī)則];(1)“{}”為必選項;“[]”為可選項;“|”分隔各個參數(shù)項,表示只能選擇其中一項。(2)IFNOTEXISTS:只有目前不存在該數(shù)據(jù)庫才創(chuàng)建。(3)DEFAULT:指定默認(rèn)值。(4)CHARACTERSET子句:指定數(shù)據(jù)庫的字符集。(5)COLLATE子句:指定字符集的校對規(guī)則。(6)語句可以分行,以英文分號“;”結(jié)束。3.1.1創(chuàng)建數(shù)據(jù)庫2.MySQL數(shù)據(jù)庫中的字符集和校對規(guī)則字符集是一套符號和編碼。校對規(guī)則是在字符集上用于比較字符大小的一套規(guī)則。例如英文字符集的校對規(guī)則就是遵循ASCII碼值的大小。MySQL8.0默認(rèn)使用的字符集是utf8mb4,校對規(guī)則是utf8mb4_0900_ai_ci。創(chuàng)建數(shù)據(jù)庫舉例【例3-1】創(chuàng)建一個名為scoredb的學(xué)生成績管理數(shù)據(jù)庫,采用MySQL數(shù)據(jù)庫默認(rèn)的字符集和校對規(guī)則。創(chuàng)建數(shù)據(jù)庫的語句:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名[[DEFAULT]CHARACTERSET字符集][[DEFAULT]COLLATE字符集的校對規(guī)則];CREATEDATABASEscoredb;mysql>CREATEDATABASEscoredb;QueryOK,1rowaffected(0.01sec)創(chuàng)建數(shù)據(jù)庫舉例【例3-2】創(chuàng)建一個名為mytestdb的數(shù)據(jù)庫,采用字符集GB2312和校對規(guī)則gb2312_chinese_ci。創(chuàng)建數(shù)據(jù)庫的語句:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名[[DEFAULT]CHARACTERSET字符集][[DEFAULT]COLLATE字符集的校對規(guī)則];CREATEDATABASEmytestdbCHARACTERSETGB2312COLLATEgb2312_chinese_ci;mysql>CREATEDATABASEmytestdb->CHARACTERSETGB2312->COLLATEgb2312_chinese_ci;QueryOK,1rowaffected(0.01sec)創(chuàng)建數(shù)據(jù)庫舉例【例3-3】如果不存在數(shù)據(jù)庫mytestdb,則創(chuàng)建該數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫的語句:CREATE{DATABASE|SCHEMA}[IFNOTEXISTS]數(shù)據(jù)庫名CREATEDATABASEIFNOTEXISTSmytestdb;mysql>CREATEDATABASEIFNOTEXISTSmytestdb;QueryOK,1rowaffected,1warning(0.01sec)mysql>SHOWWARNINGS;+-------+------+---------------------------------------------------+|Level|Code|Message|+-------+------+---------------------------------------------------+|Error|1007|Can'tcreatedatabase'mytestdb';databaseexists|+-------+------+---------------------------------------------------+3.1.2管理數(shù)據(jù)庫1.顯示數(shù)據(jù)庫2.選擇數(shù)據(jù)庫3.修改數(shù)據(jù)庫4.刪除數(shù)據(jù)庫1.顯示數(shù)據(jù)庫顯示MySQL中的所有數(shù)據(jù)庫的語句:SHOWDATABASES;4個系統(tǒng)數(shù)據(jù)庫(1)information_schema:主要保存MySQL的系統(tǒng)信息。(2)mysql:主要存儲MySQL的用戶及其訪問權(quán)限等信息。(3)performance_schema:主要收集MySQL的性能數(shù)據(jù)。(4)sys:包含一系列的存儲過程、存儲函數(shù)和視圖,主要作用是展示MySQL的各類性能指標(biāo)。mysql>SHOWDATABASES;+--------------------+|Database|+--------------------+|information_schema||mysql||mytestdb||performance_schema||scoredb||sys|+--------------------+2.選擇數(shù)據(jù)庫在使用數(shù)據(jù)庫之前必須告訴MySQL要使用哪個數(shù)據(jù)庫,使其成為當(dāng)前默認(rèn)的數(shù)據(jù)庫。選擇數(shù)據(jù)庫的語句:USE數(shù)據(jù)庫名;【例3-5】選擇數(shù)據(jù)庫scoredb作為當(dāng)前數(shù)據(jù)庫。
USEscoredb;mysql>USEscoredb;Databasechanged3.修改數(shù)據(jù)庫修改數(shù)據(jù)庫的語句:ALTER{DATABASE|SCHEMA}[數(shù)據(jù)庫名][[DEFAULT]CHARACTERSET字符集][[DEFAULT]COLLATE字符集的校對規(guī)則];【例3-6】修改數(shù)據(jù)庫mytestdb的字符集為GBK,校對規(guī)則為gbk_chinese_ci。ALTERDATABASEmytestdbCHARACTERSETGBKCOLLATEgbk_chinese_ci;mysql>ALTERDATABASEmytestdb->CHARACTERSETGBK->COLLATEgbk_chinese_ci;QueryOK,1rowaffected(0.00sec)4.刪除數(shù)據(jù)庫刪除數(shù)據(jù)庫的語句:DROP{DATABASE|SCHEMA}[IFEXISTS]數(shù)據(jù)庫名;【例3-7】刪除數(shù)據(jù)庫mytestdb。
DROPDATABASEmytestdb;mysql>DROPDATABASEmytestdb;QueryOK,0rowaffected(0.02sec)3.2創(chuàng)建和管理數(shù)據(jù)表數(shù)據(jù)表是數(shù)據(jù)庫中最重要和最基本的對象,是數(shù)據(jù)庫中組織和存儲數(shù)據(jù)的基本單位。建立數(shù)據(jù)庫后,需要在數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表。3.2.1創(chuàng)建數(shù)據(jù)表1.MySQL支持的數(shù)據(jù)類型MySQL支持的數(shù)據(jù)類型非常豐富,這里主要介紹常用的3種:(1)數(shù)值型(2)日期和時間型(3)字符串型(1)數(shù)值型數(shù)值型數(shù)據(jù)可以分為整數(shù)和實(shí)數(shù)兩類。整數(shù)主要有TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT,其中,n表示整數(shù)的顯示位數(shù)。無論n設(shè)置為多少,其存儲數(shù)據(jù)的取值范圍都不會發(fā)生改變。(1)數(shù)值型實(shí)數(shù)主要有單精度浮點(diǎn)數(shù)FLOAT、雙精度浮點(diǎn)數(shù)DOUBLE和定點(diǎn)數(shù)DECIMAL。其中,m表示顯示位數(shù),d表示小數(shù)位數(shù),且“顯示位數(shù)m=整數(shù)位數(shù)+小數(shù)位數(shù)d”。定點(diǎn)數(shù)的優(yōu)點(diǎn)是不存在誤差,適合對精度要求極高的場景。(2)日期和時間型日期和時間型數(shù)據(jù)主要有DATE、TIME、YEAR、DATETIME和TIMESTAMP。不同類型表示的時間內(nèi)容不同,取值范圍也不同,而且占用的字節(jié)數(shù)也不一樣(3)字符串型有文本字符串和二進(jìn)制字符串兩種類型。文本字符串主要包括CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。其中,n表示可存儲字符的個數(shù),并且不區(qū)分英文還是中文。CHAR是固定長度,在不指定“(n)”時,默認(rèn)是CHAR(1)。VARCHAR是可變長度,必須指定“(n)”,n只是限制最多能存儲的字符數(shù),如果實(shí)際字符數(shù)小于n,則按實(shí)際存儲。(3)字符串型二進(jìn)制字符串主要包括BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB。其中,m表示可存儲的字節(jié)數(shù)。BINARY是固定長度,在不指定“(m)”時,默認(rèn)占用1字節(jié)。VARBINARY是可變長度,必須指定“(m)”。m只是限制最多能存儲的字節(jié)數(shù),如果實(shí)際存儲的字節(jié)數(shù)小于m,則按實(shí)際存儲。2.設(shè)計數(shù)據(jù)表(1)確定數(shù)據(jù)表的名稱(2)確定各個字段的字段名稱、數(shù)據(jù)類型、顯示位數(shù)或字符串長度、小數(shù)位數(shù)、是否允許空值、默認(rèn)值和主鍵等。3.創(chuàng)建數(shù)據(jù)表創(chuàng)建數(shù)據(jù)表的語句:CREATETABLE[IFNOTEXISTS]表名(字段名稱1數(shù)據(jù)類型[約束條件][,字段名稱2
數(shù)據(jù)類型[約束條件]…]);其中,約束條件包括是否允許空值、默認(rèn)值、自增屬性、主鍵、唯一約束等,具體參數(shù)如下。[NULL|NOTNULL][DEFAULT默認(rèn)值][AUTO_INCREMENT][PRIMARYKEY][UNIQUE](1)NULL|NOTNULL:指定該字段是否允許空值。如果不指定,默認(rèn)允許空值。(2)DEFAULT子句:指定該字段的默認(rèn)值。如果不指定,默認(rèn)值為NULL。(3)AUTO_INCREMENT:設(shè)置整數(shù)類型的自增屬性。每插入一條記錄,該字段的值自動增加1。(4)PRIMARYKEY:設(shè)置該字段為主鍵。主鍵既不允許空值,也不允許重復(fù)。(5)UNIQUE:設(shè)置該字段為唯一約束。唯一約束允許空值,但不允許重復(fù)。創(chuàng)建數(shù)據(jù)表舉例【例3-8】在數(shù)據(jù)庫scoredb中創(chuàng)建院系表department。創(chuàng)建數(shù)據(jù)表的語句:CREATETABLE[IFNOTEXISTS]表名(字段名稱1數(shù)據(jù)類型[約束條件][,字段名稱2數(shù)據(jù)類型[約束條件]…]);CREATETABLEdepartment(deptnoCHAR(3)NOTNULLPRIMARYKEY,deptnameVARCHAR(50)UNIQUE,directorVARCHAR(50)DEFAULT"院長");mysql>USEscoredb;Databasechangedmysql>CREATETABLEdepartment
->(->deptnoCHAR(3)NOTNULLPRIMARYKEY,->deptnameVARCHAR(50)UNIQUE,->directorVARCHAR(50)DEFAULT"院長"->);QueryOK,0rowsaffected(0.01sec)創(chuàng)建數(shù)據(jù)表舉例【例3-9】創(chuàng)建學(xué)生家庭情況表familyinfo。
CREATETABLEfamilyinfo
(
snoCHAR(12)NOTNULLPRIMARYKEY,
addressVARCHAR(50),
telephoneCHAR(11),
incomeDECIMAL(10,2)
);mysql>CREATETABLEfamilyinfo->(->snoCHAR(12)NOTNULLPRIMARYKEY,->addressVARCHAR(50),->telephoneCHAR(11),->incomeDECIMAL(10,2)->);QueryOK,0rowsaffected(0.02sec)3.2.2管理數(shù)據(jù)表1.查看數(shù)據(jù)表2.修改數(shù)據(jù)表3.復(fù)制數(shù)據(jù)表4.刪除數(shù)據(jù)表1.查看數(shù)據(jù)表(1)查看數(shù)據(jù)表的名稱SHOWTABLES[{FROM|IN}數(shù)據(jù)庫名];不指定數(shù)據(jù)庫名時,默認(rèn)顯示當(dāng)前數(shù)據(jù)庫中數(shù)據(jù)表的名稱?!纠?-10】在數(shù)據(jù)庫scoredb中查看已經(jīng)創(chuàng)建好的數(shù)據(jù)表的名稱。
SHOWTABLESFROMscoredb;或
SHOWTABLES;mysql>SHOWTABLES;+-------------------+|Tables_in_scoredb|+-------------------+|department||familyinfo|+-------------------+1.查看數(shù)據(jù)表(2)查看數(shù)據(jù)表的基本結(jié)構(gòu)SHOWCOLUMNS語句:SHOWCOLUMNS{FROM|IN}表名[{FROM|IN}數(shù)據(jù)庫名];DESCRIBE語句:{DESCRIBE|DESC}表名;【例3-11】查看院系表department的基本結(jié)構(gòu)。SHOWCOLUMNSFROMdepartment;或DESCdepartment;
mysql>DESCdepartment;+----------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+----------+-------------+------+-----+---------+-------+|deptno|char(3)|NO|PRI|NULL|||deptname|varchar(50)|YES|UNI|NULL|||director|varchar(50)|YES||院長
||+----------+-------------+------+-----+---------+-------+3rowsinset(0.01sec)1.查看數(shù)據(jù)表(3)查看數(shù)據(jù)表的詳細(xì)結(jié)構(gòu)SHOWCREATETABLE表名;【例3-12】查看院系表department的詳細(xì)結(jié)構(gòu)。SHOWCREATETABLEdepartment;mysql>SHOWCREATETABLEdepartment;+------------+--------------------------------------------------------+|Table|CreateTable|+------------+--------------------------------------------------------+|department|CREATETABLE`department`(`deptno`char(3)NOTNULL,`deptname`varchar(50)DEFAULTNULL,`director`varchar(50)DEFAULT'院長',PRIMARYKEY(`deptno`),UNIQUEKEY`deptname`(`deptname`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci|+------------+--------------------------------------------------------+1rowinset(0.02sec)2.修改數(shù)據(jù)表(1)修改數(shù)據(jù)表的名稱ALTERTABLE原表名RENAME[TO]新表名;【例3-13】將學(xué)生家庭情況表familyinfo的名稱修改為sfamily。
ALTERTABLEfamilyinfoRENAMEsfamily;mysql>ALTERTABLEfamilyinfoRENAMEsfamily;QueryOK,0rowsaffected(0.01sec)mysql>SHOWTABLES;+-------------------+|Tables_in_scoredb|+-------------------+|department||sfamily|+-------------------+2rowsinset(0.04sec)2.修改數(shù)據(jù)表(2)修改字段的數(shù)據(jù)類型ALTERTABLE表名MODIFY[COLUMN]字段名稱新的數(shù)據(jù)類型;【例3-14】將學(xué)生家庭情況表sfamily中的聯(lián)系電話telephone字段的數(shù)據(jù)類型由CHAR(11)修改為VARCHAR(20)。ALTERTABLEsfamilyMODIFYtelephoneVARCHAR(20);mysql>DESCsfamily;+-----------+---------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+---------------+------+-----+---------+-------+|sno|char(12)|NO|PRI|NULL|||address|varchar(50)|YES||NULL|||telephone|varchar(20)|YES||NULL|||income|decimal(10,2)|YES||NULL||+-----------+---------------+------+-----+---------+-------+2.修改數(shù)據(jù)表(3)修改字段的名稱和數(shù)據(jù)類型ALTERTABLE表名CHANGE[COLUMN原字段名稱新字段名稱新數(shù)據(jù)類型;【例3-15】將學(xué)生家庭情況表sfamily中的家庭年收入字段的名稱由income修改為annincome,數(shù)據(jù)類型修改為INT。
ALTERTABLEsfamilyCHANGEincomeannincomeINT;mysql>DESCsfamily;+-----------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+-------------+------+-----+---------+-------+|sno|char(12)|NO|PRI|NULL|||address|varchar(50)|YES||NULL|||telephone|varchar(20)|YES||NULL|||annincome|int|YES||NULL||+-----------+-------------+------+-----+---------+-------+2.修改數(shù)據(jù)表(4)添加字段ALTERTABLE表名ADD[COLUMN]新字段名稱數(shù)據(jù)類型[約束條件][FIRST|AFTER已存在的字段名稱];默認(rèn)在最后面添加,F(xiàn)IRST指定為第一個字段,AFTER指定在某個字段之后添加?!纠?-16】在學(xué)生家庭情況表sfamily中添加字段sid(作為第一個字段),數(shù)據(jù)類型為INT,不允許為空值,取值唯一且自動遞增。ALTERTABLEsfamilyADDsidINTNOTNULLUNIQUE
AUTO_INCREMENTFIRST;mysql>DESCsfamily;+-----------+-------------+------+-----+---------+----------------+|Field|Type|Null|Key|Default|Extra|+-----------+-------------+------+-----+---------+----------------+|sid|int|NO|UNI|NULL|auto_increment||sno|char(12)|NO|PRI|NULL|||address|varchar(50)|YES||NULL|||telephone|varchar(20)|YES||NULL|||annincome|int|YES||NULL||+-----------+-------------+------+-----+---------+----------------+2.修改數(shù)據(jù)表(5)刪除字段ALTERTABLE表名DROP字段名稱;【例3-17】將學(xué)生家庭情況表sfamily中的sid字段刪除。
ALTERTABLEsfamilyDROPsid;3.復(fù)制數(shù)據(jù)表(1)將查詢到的原表中的所有數(shù)據(jù)復(fù)制到新表中CREATETABLE新表名SELECT*FROM原表名;
不會復(fù)制原表的主鍵設(shè)置,因此在新表中需要單獨(dú)設(shè)置主鍵?!纠?-18】將學(xué)生家庭情況表sfamily的結(jié)構(gòu)和數(shù)據(jù)復(fù)制到新表newfamily1中。
CREATETABLEnewfamily1SELECT*FROMsfamily;
mysql>CREATETABLEnewfamily1SELECT*FROMsfamily;QueryOK,0rowsaffected(0.01sec)Records:0Duplicates:0Warnings:0mysql>DESCnewfamily1;+-----------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+-------------+------+-----+---------+-------+|sno|char(12)|NO||NULL|||address|varchar(50)|YES||NULL|||telephone|varchar(20)|YES||NULL|||annincome|int|YES||NULL||+-----------+-------------+------+-----+---------+-------+3.復(fù)制數(shù)據(jù)表(2)完整地復(fù)制原表的結(jié)構(gòu)(包括主鍵)到新表CREATETABLE新表名LIKE原表名;【例3-19】將學(xué)生家庭情況表sfamily的結(jié)構(gòu)完整地復(fù)制到新表newfamily2中。CREATETABLEnewfamily2LIKEsfamily;mysql>CREATETABLEnewfamily2LIKEsfamily;QueryOK,0rowsaffected(0.01sec)mysql>DESCnewfamily2;+-----------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-----------+-------------+------+-----+---------+-------+|sno|char(12)|NO|PRI|NULL|||address|varchar(50)|YES||NULL|||telephone|varchar(20)|YES||NULL|||annincome|int|YES||NULL||+-----------+-------------+------+-----+---------+-------+4.刪除數(shù)據(jù)表刪除數(shù)據(jù)表的語句:
DROPTABLE[IFEXISTS]表名1[,表名2…];【例3-20】將數(shù)據(jù)表newfamily1和newfamily2刪除。DROPTABLEnewfamily1,newfamily2;3.3數(shù)據(jù)完整性約束(1)域完整性:數(shù)據(jù)表中各個字段的取值必須滿足某種特定的數(shù)據(jù)類型約束。例如,如果字段的數(shù)據(jù)類型是整型,那么該字段就不能存儲任何實(shí)數(shù)。(2)實(shí)體完整性:數(shù)據(jù)表中的每一條記錄都必須是唯一的,即數(shù)據(jù)表的主鍵既不能重復(fù)也不能取空值,因此組成主鍵的每一個字段都不允許為空值。(3)參照完整性:兩張相關(guān)聯(lián)的數(shù)據(jù)表的主鍵和外鍵字段的數(shù)據(jù)必須一致,即一張表中外鍵字段的值要么為空值,要么是另一張表的主鍵字段中已經(jīng)存在的值。(4)用戶定義完整性:根據(jù)應(yīng)用環(huán)境的要求和實(shí)際需要,對某一具體應(yīng)用涉及的數(shù)據(jù)提出的約束條件。例如,學(xué)生表中性別字段的值只能是“男”或“女”3.3.2主鍵約束1.在創(chuàng)建數(shù)據(jù)表時指定主鍵約束(1)在定義字段的同時指定單字段主鍵約束字段名稱數(shù)據(jù)類型PRIMARYKEY【例3-21】創(chuàng)建數(shù)據(jù)表department1,在定義院系代碼deptno字段的同時指定其為主鍵約束,并且忽略其他約束條件。
CREATETABLEdepartment1(deptnoCHAR(3)PRIMARYKEY,deptnameVARCHAR(50),direcotrVARCHAR(50));3.3.2主鍵約束1.在創(chuàng)建數(shù)據(jù)表時指定主鍵約束(2)在定義完所有字段后指定單字段主鍵約束PRIMARYKEY(字段名稱)【例3-22】創(chuàng)建數(shù)據(jù)表department2,在定義完所有字段后指定院系代碼deptno為主鍵約束,并且忽略其他約束條件。CREATETABLEdepartment2(deptnoCHAR(3),deptnameVARCHAR(50),direcotrVARCHAR(50),PRIMARYKEY(deptno));3.3.2主鍵約束1.在創(chuàng)建數(shù)據(jù)表時指定主鍵約束(3)在定義完所有字段后指定多字段組合主鍵約束PRIMARYKEY(字段名稱1,字段名稱2…)【例3-23】創(chuàng)建數(shù)據(jù)表department3,指定主鍵約束為deptno和deptname的組合,并且忽略其他約束條件。CREATETABLEdepartment3(deptnoCHAR(3),deptnameVARCHAR(50),direcotrVARCHAR(50),PRIMARYKEY(deptno,deptname));3.3.2主鍵約束2.在修改數(shù)據(jù)表時指定主鍵約束ALTERTABLE表名ADDPRIMARYKEY(字段名稱1[,字段名稱2…]);【例3-24】先忽略所有約束條件創(chuàng)建數(shù)據(jù)表department4,然后在修改數(shù)據(jù)表department4時指定主鍵約束為deptno。CREATETABLEdepartment4(deptnoCHAR(3),deptnameVARCHAR(50),direcotrVARCHAR(50));ALTERTABLEdepartment4
ADDPRIMARYKEY(deptno);3.3.3唯一約束(1)一張表只能有一個主鍵約束,但可以有多個唯一約束。(2)主鍵約束不允許為空值,唯一約束允許為空值,但只能出現(xiàn)一個空值。3.3.3唯一約束1.在創(chuàng)建數(shù)據(jù)表時指定唯一約束(1)在定義字段的同時指定唯一約束
字段名稱數(shù)據(jù)類型UNIQUE【例3-25】創(chuàng)建數(shù)據(jù)表department5,在定義字段的同時指定院系代碼deptno為主鍵約束,指定院系名稱deptname為唯一約束,并且忽略其他約束條件。CREATETABLEdepartment5
(
deptnoCHAR(3)PRIMARYKEY,
deptnameVARCHAR(50)UNIQUE,
direcotrVARCHAR(50)
);3.3.3唯一約束1.在創(chuàng)建數(shù)據(jù)表時指定唯一約束(2)在定義完所有字段后指定唯一約束[CONSTRAINT約束名]UNIQUE(字段名稱)【例3-26】創(chuàng)建數(shù)據(jù)表department6,在定義完所有字段后指定院系代碼deptno為主鍵約束,院系名稱deptname為唯一約束,并且忽略其他約束條件。
CREATETABLEdepartment6
(
deptnoCHAR(3),
deptnameVARCHAR(50),
direcotrVARCHAR(50),
PRIMARYKEY(deptno),
UNIQUE(deptname)
);3.3.3唯一約束1.在創(chuàng)建數(shù)據(jù)表時指定唯一約束(2)在定義完所有字段后指定唯一約束[CONSTRAINT約束名]UNIQUE(字段名稱)【例3-27】創(chuàng)建數(shù)據(jù)表department7,在定義完所有字段后指定院系代碼deptno為主鍵約束,院系名稱deptname為唯一約束,并且將唯一約束命名為constr1。CREATETABLEdepartment7
(
deptnoCHAR(3),
deptnameVARCHAR(50),
direcotrVARCHAR(50),
PRIMARYKEY(deptno),
CONSTRAINTconstr1UNIQUE(deptname)
);3.3.4外鍵約束外鍵約束用于讓兩張相關(guān)聯(lián)的數(shù)據(jù)表之間保持?jǐn)?shù)據(jù)的一致性,即參照完整性。當(dāng)插入、修改、刪除一張表中的數(shù)據(jù)時,參照引用相關(guān)聯(lián)的另一張表中的數(shù)據(jù)來檢查對表中的數(shù)據(jù)操作是否正確。簡單來說,就是要求子表(一對多關(guān)系中的“n”端)中每一條記錄的外鍵值要么為空值,要么是父表(一對多關(guān)系中的“1”端)中已經(jīng)存在的主鍵值。例如,學(xué)生表student和院系表department之間存在一對多聯(lián)系,父表是department,子表是student,因此student表中的院系代碼要么為空值,要么是department表中已經(jīng)存在的主鍵值。3.3.4外鍵約束在指定外鍵約束時,需要滿足下列條件。(1)父表必須是已經(jīng)創(chuàng)建的數(shù)據(jù)表。(2)子表中外鍵的字段個數(shù)必須和父表中主鍵的字段個數(shù)相同。(3)子表中外鍵字段的數(shù)據(jù)類型必須和父表中主鍵字段的數(shù)據(jù)類型相同。(4)父表和子表必須使用存儲引擎InnoDB。3.3.4外鍵約束1.在創(chuàng)建數(shù)據(jù)表時指定外鍵約束[CONSTRAINT約束名]FOREIGNKEY(字段名稱1[,字段名稱2…])REFERENCES父表名(父表字段名稱1[,父表字段名稱2…])[ONDELETE{RESTRICT|CASCADE|SETNULL|NOACTION|SETDEFAULT}][ONUPDATE{RESTRICT|CASCADE|SETNULL|NOACTION|SETDEFAULT}];(1)ONDELETE子句:為外鍵定義父表執(zhí)行DELETE(刪除)語句時的參照動作。(2)ONUPDATE子句:為外鍵定義父表執(zhí)行UPDATE(修改)語句時的參照動作。(3)RESTRICT:限制。刪除或修改父表主鍵值時,如果子表存在該值,則拒絕刪除或修改。(4)CASCADE:級聯(lián)。刪除或修改父表主鍵值時,如果子表存在該值,則自動刪除或修改子表中的值。(5)SETNULL:設(shè)置為空值。刪除或修改父表主鍵值時,如果子表存在該值,則設(shè)置子表中的值為空值。(6)NOACTION:不采取動作。其作用和RESTRICT一樣。(7)SETDEFAULT:設(shè)置為默認(rèn)值。其作用是將子表中與之對應(yīng)的外鍵字段值設(shè)置為默認(rèn)值。外鍵約束舉例【例3-29】創(chuàng)建學(xué)生表student,在定義完所有字段后指定主鍵約束和外鍵約束,并且忽略其他約束條件。CREATETABLEstudent(snoCHAR(12),snameVARCHAR(50),sexCHAR(1),birthdateDATE,partyVARCHAR(50),classnoVARCHAR(20),deptnoCHAR(3),enterscoreINT,awardsTEXT,PRIMARYKEY(sno),FOREIGNKEY(deptno)REFERENCESdepartment(deptno));外鍵約束舉例【例3-29】創(chuàng)建學(xué)生表student,在定義完所有字段后指定主鍵約束和外鍵約束,并且忽略其他約束條件。CREATETABLEstudent(snoCHAR(12),snameVARCHAR(50),sexCHAR(1),birthdateDATE,partyVARCHAR(50),classnoVARCHAR(20),deptnoCHAR(3),enterscoreINT,awardsTEXT,PRIMARYKEY(sno),FOREIGNKEY(deptno)REFERENCESdepartment(deptno));這里沒有指定外鍵的參照動作,默認(rèn)情況下:(1)不能在子表的外鍵字段中輸入父表的主鍵字段中不存在的值。(2)如果子表中存在匹配的外鍵字段值,則不能從父表中刪除該主鍵字段值。(3)如果子表中存在匹配的外鍵字段值,則不能在父表中修改該主鍵字段值。3.3.4外鍵約束2.在修改數(shù)據(jù)表時指定外鍵約束ALTERTABLE表名ADD外鍵約束;【例3-30】創(chuàng)建數(shù)據(jù)表student1,只考慮學(xué)號sno(指定主鍵約束)、姓名sname、性別sex和院系代碼deptno字段,然后在修改該數(shù)據(jù)表時指定外鍵約束。
CREATETABLEstudent1
(snoCHAR(12)PRIMARYKEY,snameVARCHAR(50),sexCHAR(1),
deptnoCHAR(3)
);ALTERTABLEstudent1ADDFOREIGNKEY(deptno)REFERENCESdepartment(deptno)ONDELETESETNULLONUPDATECASCADE;3.3.5檢查約束1.在創(chuàng)建數(shù)據(jù)表時指定檢查約束(1)在定義字段的同時指定檢查約束
字段名稱數(shù)據(jù)類型CHECK(表達(dá)式)【例3-31】創(chuàng)建數(shù)據(jù)表student2,只考慮學(xué)號sno(指定主鍵約束)、姓名sname、性別sex字段,并在定義字段的同時指定檢查約束為“性別只能是‘男’或‘女’”。
CREATETABLEstudent2
(
snoCHAR(12)PRIMARYKEY,
snameVARCHAR(50),
sexCHAR(1)CHECK(sexIN("男","女"))
);3.3.5檢查約束1.在創(chuàng)建數(shù)據(jù)表時指定檢查約束(2)在定義完所有字段后指定檢查約束
[CONSTRAINT
約束名]CHECK(表達(dá)式)【例3-32】創(chuàng)建數(shù)據(jù)表student3,只考慮學(xué)號sno(指定主鍵約束)、姓名sname、性別sex和出生日期birthdate字段,并在定義完所有字段后指定檢查約束為“性別只能是‘男’或‘女’,出生日期為2000年1月1日及以后”。CREATETABLEstudent3
(
snoCHAR(12)PRIMARYKEY,
snameVARCHAR(50),
sexCHAR(1),
birthdateDATE,
CHECK(sexIN("男","女")),
CHECK(birthdate>="2000-01-01")
);3.3.5檢查約束2.在修改數(shù)據(jù)表時指定檢查約束ALTERTABLE表名ADDCHECK(表達(dá)式);【例3-33】針對已經(jīng)創(chuàng)建的student1表,指定檢查約束為“性別sex只能是‘男’或‘女’”。ALTERTABLEstudent1ADDCHECK(sexIN("男","女"));3.3.6非空約束1.在創(chuàng)建數(shù)據(jù)表時指定非空約束
字段名稱數(shù)據(jù)類型NOTNULL【例3-34】創(chuàng)建數(shù)據(jù)表student4,只考慮學(xué)號sno(指定主鍵約束)、姓名sname、性別sex、出生日期birthdate字段,并指定非空約束為“姓名sname不能為空值”。CREATETABLEstudent4
(
snoCHAR(12)PRIMARYKEY,
snameVARCHAR(50)NOTNULL,
sexCHAR(1),
birthdateDATE
);3.3.6非空約束2.在修改數(shù)據(jù)表時指定非空約束ALTERTABLE表名MODIFY[COLUMN]字段名稱數(shù)據(jù)類型NOTNULL;【例3-35】修改數(shù)據(jù)表student4,指定非空約束為“性別sex不能為空值”。ALTERTABLEstudent4MODIFYsexCHAR(1)NOTNULL;3.3.7默認(rèn)值約束1.在創(chuàng)建數(shù)據(jù)表時指定默認(rèn)值約束字段名稱數(shù)據(jù)類型DEFAULT默認(rèn)值【例3-36】創(chuàng)建數(shù)據(jù)表student5,只考慮學(xué)號sno(指定主鍵約束)、姓名sname、性別sex、入學(xué)總分enterscore字段,并指定性別sex的默認(rèn)值約束為“男”。CREATETABLEstudent5
(
snoCHAR(12)PRIMARYKEY,
snameVARCHAR(50),
sexCHAR(1)DEFAULT"男",
enterscoreINT
);3.3.7默認(rèn)值約束2.在修改數(shù)據(jù)表時指定默認(rèn)值約束ALTERTABLE表名MODIFY[COLUMN]字段名稱數(shù)據(jù)類型DEFAULT默認(rèn)值;【例3-37】修改數(shù)據(jù)表student5,指定入學(xué)總分enterscore的默認(rèn)值約束為600。ALTERTABLEstudent5MODIFYenterscoreINTDEFAULT600;3.3.8刪除數(shù)據(jù)完整性約束刪除不同的數(shù)據(jù)完整性約束的語法格式。(1)刪除主鍵約束:ALTERTABLE表名DROPPRIMARYKEY。(2)刪除外鍵約束:ALTERTABLE表名DROPFOREIGNKEY約束名。(3)刪除唯一約束:ALTERTABLE表名DROPUNIQUE約束名。(4)刪除檢查約束:ALTERTABLE表名DROPCHECK約束名。使用SHOWCREATETABLE語句查看并確定具體的約束名。刪除數(shù)據(jù)完整性約束舉例【例3-38】針對已經(jīng)創(chuàng)建好的數(shù)據(jù)表student1,刪除其中的檢查約束。(1)查看檢查約束名稱
SHOWCREATETABLEstudent1;mysql>SHOWCREATETABLEstudent1;+----------+-----------------------------------------------------------------+|Table|CreateTable|+----------+-----------------------------------------------------------------+|student1|CREATETABLE`student1`(`sno`char(12)NOTNULL,`sname`varchar(50)DEFAULTNULL,`sex`char(1)DEFAULTNULL,`deptno`char(3)DEFAULTNULL,PRIMARYKEY(`sno`),KEY`deptno`(`deptno`),CONSTRAINT`student1_ibfk_1`FOREIGNKEY(`deptno`)REFERENCES`department`
(`deptno`)ONDELETESETNULLONUPDATECASCADE,CONSTRAINT`student1_chk_1`CHECK((`sex`in('男','女'))))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_0900_ai_ci|+----------+-----------------------------------------------------------------+刪除數(shù)據(jù)完整性約束舉例【例3-38】針對已經(jīng)創(chuàng)建好的數(shù)據(jù)表student1,刪除其中的檢查約束。(1)查看檢查約束名稱
SHOWCREATETABLEstudent1;(2)刪除“student1_chk_1”檢查約束ALTERTABLEstudent1DROPCHECKstudent1_chk_1;3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(1)院系表department3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(2)學(xué)生表student3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(3)課程表course3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(4)教師表teacher3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(5)選修成績表score3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義1.表結(jié)構(gòu)設(shè)計(6)講授安排表teaching3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義2.創(chuàng)建數(shù)據(jù)庫創(chuàng)建學(xué)生成績管理數(shù)據(jù)庫scoredb,如果前面已經(jīng)創(chuàng)建,先使用DROPDATABASE語句刪除該數(shù)據(jù)庫后再創(chuàng)建。DROPDATABASEIFEXISTSscoredb;CREATEDATABASEscoredb;USEscoredb;3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義3.創(chuàng)建表(1)創(chuàng)建院系表department,只要求同時創(chuàng)建主鍵和唯一約束。CREATETABLEdepartment
(
deptnoCHAR(3)NOTNULLPRIMARYKEY,
deptnameVARCHAR(50)UNIQUE,
directorVARCHAR(50)
);3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義3.創(chuàng)建表(2)創(chuàng)建學(xué)生表student,只要求同時創(chuàng)建主鍵和默認(rèn)值約束,不必創(chuàng)建外鍵。CREATETABLEstudent
(
snoCHAR(12)NOTNULLPRIMARYKEY,
snameVARCHAR(50),
sexCHAR(1)DEFAULT"男",
birthdateDATE,
partyVARCHAR(50),
classnoVARCHAR(20),
deptnoCHAR(3)
enterscoreINT,
awardsTEXT);3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義3.創(chuàng)建表(3)創(chuàng)建課程表course,要求同時創(chuàng)建主鍵。CREATETABLEcourse
(
cnoCHAR(8)NOTNULLPRIMARYKEY,
cnameVARCHAR(50),
hoursTINYINT);3.4課堂案例:學(xué)生成績管理的數(shù)據(jù)定義3.創(chuàng)建表(4)創(chuàng)建教師表teacher,只要求同時創(chuàng)建主鍵,不必創(chuàng)建
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高效照明電器產(chǎn)品項目提案報告
- 2025年住宅用地購買與建設(shè)合同
- 2025年汽車尾氣凈化三效催化劑項目規(guī)劃申請報告
- 2025年個人對公商業(yè)租賃協(xié)議分析與
- 2025年債轉(zhuǎn)股增資擴(kuò)股項目協(xié)議書
- 2025年離婚雙方權(quán)益平衡協(xié)議策劃
- 2025年住宅消防設(shè)施建設(shè)協(xié)議范本
- 2025年企業(yè)投資策劃合作合同協(xié)議范本
- 職業(yè)技能培訓(xùn)管理協(xié)議書
- 2025年終止軟件工程師職業(yè)勞動合同協(xié)議
- 2023年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫含答案解析
- GB/T 13088-2006飼料中鉻的測定
- 大學(xué)生返家鄉(xiāng)志愿服務(wù)證明
- 經(jīng)顱磁刺激的基礎(chǔ)知識及臨床應(yīng)用參考教學(xué)課件
- 小學(xué)語文人教四年級上冊第四單元群文閱讀“神話故事之人物形象”PPT
- 鄉(xiāng)村振興匯報課件
- 紅色記憶模板課件
- 麗聲三葉草分級讀物第四級A Friend for Little White Rabbit課件
- DBJ61_T 179-2021 房屋建筑與市政基礎(chǔ)設(shè)施工程專業(yè)人員配備標(biāo)準(zhǔn)
- 三年級下冊脫式計算題
- 廣東省部分軍隊退役人員登記審核表
評論
0/150
提交評論