mysql中数据定义语言_SQL数据定义语言(DDL)
數(shù)據(jù)庫(kù)模式定義語(yǔ)言DDL(DataDefinition Language),是用于描述數(shù)據(jù)庫(kù)中要存儲(chǔ)的現(xiàn)實(shí)世界實(shí)體的語(yǔ)言。一個(gè)數(shù)據(jù)庫(kù)模式包含該數(shù)據(jù)庫(kù)中所有實(shí)體的描述定義。這些定義包括結(jié)構(gòu)定義、操作方法定義等。
DDL描述的模式,必須由計(jì)算機(jī)軟件進(jìn)行編譯,轉(zhuǎn)換為便于計(jì)算機(jī)存儲(chǔ)、查詢和操縱的格式,完成這個(gè)轉(zhuǎn)換工作的程序稱為模式編譯器。
模式編譯器處理模式定義主要產(chǎn)生兩種類型的數(shù)據(jù):數(shù)據(jù)字典以及數(shù)據(jù)類型和結(jié)構(gòu)定義。
數(shù)據(jù)字典和數(shù)據(jù)庫(kù)內(nèi)部結(jié)構(gòu)信息是創(chuàng)建該模式所對(duì)應(yīng)的數(shù)據(jù)庫(kù)的依據(jù),根據(jù)這些信息創(chuàng)建每個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)的邏輯結(jié)構(gòu);對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的訪問(wèn)、查詢也根據(jù)模式信息決定數(shù)據(jù)存取的方式和類型,以及數(shù)據(jù)之間的關(guān)系和對(duì)數(shù)據(jù)的完整性約束。
數(shù)據(jù)字典是模式的內(nèi)部信息表示,數(shù)據(jù)字典的存儲(chǔ)方式對(duì)不同的DBMS各不相同。
數(shù)據(jù)類型和結(jié)構(gòu)的定義,是指當(dāng)應(yīng)用程序與數(shù)據(jù)庫(kù)連接操作時(shí),應(yīng)用程序需要了解產(chǎn)生和提取的數(shù)據(jù)類型和結(jié)構(gòu)。是為各種宿主語(yǔ)言提供的用戶工作區(qū)的數(shù)據(jù)類型和結(jié)構(gòu)定義,使用戶工作區(qū)和數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)相一致,減少數(shù)據(jù)的轉(zhuǎn)換過(guò)程,這種數(shù)據(jù)類型和結(jié)構(gòu)的定義通常用一個(gè)頭文件來(lái)實(shí)現(xiàn)。
數(shù)據(jù)庫(kù)模式的定義通常有兩種方式: 交互方式定義模式和通過(guò)數(shù)據(jù)描述語(yǔ)言 DDL 描述文本定義模式。
數(shù)據(jù)庫(kù)模式定義語(yǔ)言DDL(DataDefinition Language),是用于描述數(shù)據(jù)庫(kù)中要存儲(chǔ)的現(xiàn)實(shí)世界實(shí)體的語(yǔ)言。
DDL主要用于創(chuàng)建和刪除數(shù)據(jù)庫(kù),表和索引。
一,基本的數(shù)據(jù)庫(kù)操作:
1,創(chuàng)建(create)、修改(alter)、刪除(drop)
2,數(shù)據(jù)庫(kù)包括:
系統(tǒng)數(shù)據(jù)庫(kù)
master:記錄系統(tǒng)級(jí)的信息。
model:為用戶創(chuàng)建數(shù)據(jù)庫(kù)提供模板。
msdb:代理調(diào)度警報(bào)作業(yè)、記錄操作。
tempdb:臨時(shí)表、臨時(shí)數(shù)據(jù)庫(kù)。
用戶數(shù)據(jù)庫(kù)
二,詳解:
1,表的創(chuàng)建:
建立一個(gè)“學(xué)生選課”表SC,它由學(xué)號(hào)Sno、課程號(hào)Cno,修課成績(jī)Grade課程名Cname組成,其中(Sno, Cno)為主碼。
CREATETABLE
SC(
SnoCHAR(7),
CnoCHAR(4),
Gradeint,
CnameCHAR(10),?NOTNULLUNIQUE
Primarykey?(Sno,Cno)
Foreignkey?(Sno)?Referencesstudent(Sno).
Foreignkey?(Cno)?ReferencesCourse?(Cno)
);
基本表的創(chuàng)建-說(shuō)明
1、建表的同時(shí)可以定義與該表有關(guān)的完整性約束,這些約束條件被存入系統(tǒng)的數(shù)據(jù)字典中,當(dāng)用戶操作表時(shí),DBMS會(huì)自動(dòng)檢查該操作是否有違背完整約束條件.
2、建立約束的考慮:如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級(jí)上;否則既可以定義在列級(jí)上也可以定義在表級(jí)上。
3、表名、列名是不區(qū)分大小寫的。
4、對(duì)一個(gè)用戶而言,表名必須唯一;一個(gè)表中,列名必須唯一。
5、表名、列名必須以字母開頭,長(zhǎng)度不超過(guò)30個(gè)字符。
常用完整性約束
1、主碼約束:??? PRIMARY?KEY
2、唯一性約束:UNIQUE
3、非空值約束:NOTNULL
4、參照完整性約束:FOREIGNKEY
常用數(shù)據(jù)類型:(不同DBMS數(shù)據(jù)類型不完全相同)
T-SQL數(shù)據(jù)類型:(SQL 程式設(shè)計(jì)語(yǔ)言的增強(qiáng)版,它是用來(lái)讓應(yīng)用程式與SQL Server 溝通的主要語(yǔ)言。T-SQL提供標(biāo)準(zhǔn) SQL的DDL 和 DML 功能,加上延伸的函數(shù)、系統(tǒng)預(yù)存程序以及程式設(shè)計(jì)結(jié)構(gòu)(例如 IF 和 WHILE)讓程式設(shè)計(jì)更有彈性。)
2,刪除基本表:
DROPTABLEtable_name
3,修改基本表——添加列:
ALTERTABLEtable_name
ADDnew_column_name?datatype
[constraints]
例:向Student表增加“入學(xué)時(shí)間”(SCome),數(shù)據(jù)類型為日期型。
ALTERTABLEstudent
ADDScomeDATE
4,修改基本表——改變列的數(shù)據(jù)類型:
ALTERTABLEtable_name
ALTERCOLUMNcolumn_name?new_datatype
例:將年齡的數(shù)據(jù)類型改為半字長(zhǎng)整數(shù)。
ALTERTABLEStudent
ALTERCOLUMNSageSMALLINT
5,修改基本表——?jiǎng)h除完整性約束
ALTERTABLEtable_name
DROPconstraint
例:刪除學(xué)生姓名必須取唯一值的約束。
ALTERTABLEstudent
DROPunique(sname)
6,建立索引:
CREATEINDEXindex_nameONtable_name(column_name)
7,將某個(gè)字段設(shè)為主鍵:
ALTERTABLEtable_nameADDPRIMARYKEY(column_name)
8,將某個(gè)字段的主鍵定義取消:
ALTERTABLEtable_nameDROPPRIMARYKEY(column_name)
約束是為了數(shù)據(jù)的完整性而存在的,而數(shù)據(jù)的完整性是指數(shù)據(jù)的可靠性和準(zhǔn)確性。
根據(jù)數(shù)據(jù)完整性大致可以分為四種:
1.實(shí)體完整性
就是說(shuō)每個(gè)表代表一個(gè)實(shí)體,每個(gè)表與他所代表的實(shí)體一致,特定表的唯一實(shí)體。
實(shí)現(xiàn)實(shí)體完整性的的方法:索引(index),唯一約束(unique),主鍵約束(primarykey),標(biāo)識(shí)列屬性
2.域完整性
給每個(gè)列定義輸入的有效性
實(shí)現(xiàn)域完整性的的方法: 限制數(shù)據(jù)類型,格式,外鍵約束(foreign key references),檢查約束(check(? between? and )),默認(rèn)值定義(default ' '),非空(not null)約束。
3.引用完整性
在輸入或刪除記錄時(shí),表與表之間已定義的關(guān)系
實(shí)現(xiàn)域完整性的的方法: 通過(guò)外鍵與主鍵的關(guān)系,外鍵與唯一鍵之間的關(guān)系,外鍵與檢查約束
4.用戶自定義完整性
所有的完整性都支持用戶自定義完整性
注意:
1.在SQL中有個(gè)自動(dòng)增長(zhǎng)的自動(dòng)編號(hào)列identity
2. MySQL不支持檢查約束
3.索引就像字典的目錄,把索引加在頻繁的以某個(gè)字符段查詢的的上面,在表上創(chuàng)建索引雖然會(huì)提高select語(yǔ)句的速度,但也會(huì)降低delete,update,insert語(yǔ)句執(zhí)行的速度,如果一個(gè)表中太多的索引會(huì)降低數(shù)據(jù)庫(kù)的整體性能
4.primary key = unique+not null(加primary key 要比加unique和not null效率膏,因?yàn)榧觩rimarykey時(shí)會(huì)自動(dòng)加索引,加快了效率)
5.在SQL server中正在實(shí)用的數(shù)據(jù)庫(kù)不能被刪除(除非切換數(shù)據(jù)庫(kù)才能被刪除),mySQl中可以刪除正在實(shí)用的數(shù)據(jù)庫(kù)
總結(jié)
以上是生活随笔為你收集整理的mysql中数据定义语言_SQL数据定义语言(DDL)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 144. 二叉树的前序
- 下一篇: POJ 1804 逆序数 解题(归并排序