數據庫學習筆記之創建、約束和刪除
寒假自己看黑馬的視頻自學了MySQL數據庫,這學期學校也開了數據庫這門課,用的是SqlServer(這裏也同樣是使用SqlServer),由於疫情原因也沒有紙質版的書,本來是做了幾次手寫的筆記,但是手寫真的是很麻煩啊,所以還是決定通過寫博客的方式來總結一下,也順便可以和大家分享一下。
筆記絕大部分都是按照老師上課的PPT寫的,由於老師講課的時候有些例題只有代碼沒有代碼執行過後的結果,平常上課其實幹聽對於數據庫的學習還是有些模糊的,所以筆記裏我會再將執行的結果貼出來方便理解。
首先是創建數據庫
創建之前當然要了解一些基本的SQL的數據類型辣(數據類型有點多,什麼Smallint、Tinyint…各種…),這裏就用表格簡單總結一下吧
數值型
準確型(整數) | 所佔字節 |
---|---|
Bigint | 8 |
Int | 4 |
Smallint | 2 |
Tintint | 1 |
Bit | 1位,存儲1或0 |
準確型(小數) | 備註 |
---|---|
Numeric/Decimal (p,q) | p爲數字位長度,q爲小數位長度 |
近似型 | 所佔字節 |
---|---|
Float | 8 |
Real | 4 |
字符串型
普通編碼字符串類型 | 備註 |
---|---|
char(n) | 定長存儲,n<=8000 |
varchar(n) | 不定長存儲(按實際長度存儲),長度最大不超過n,n<=8000 |
text | 存儲大於8000字節的文本 |
統一字符編碼字符串類型 | 備註 |
---|---|
nchar(n) | 定長存儲,n<=4000 |
nvarchar(n) | 不定長存儲,長度最大不超過n,n<=4000 |
ntext | 存儲大於8000字節的文本 |
二進制字符串類型 | 備註 |
---|---|
binary(n) | 固定長度,n<=8000 |
varbinary(n) | 可變長度,n<=8000 |
image | 大容量、可變長二進制字符數據,可用於存儲文件 |
日期時間型
日期時間型 | 備註 |
---|---|
datetime | 8字節,年月日時分秒毫秒 |
smalldatetime | 4字節,年月日時分 |
說完數據類型,就可以開始着手定義表辣。
定義基本表
一般格式:
CREATE TABLE <表名> (
<列名> <數據類型> [列級完整性約束定義]
{,<列名> <數據類型> [列級完整性約束定義]…}
[,表級完整性約束定義] )
關於約束
約束 | 說明 |
---|---|
NOT NULL | 限制列取值非空 |
DEFAULT | 給定列的默認值 |
UNIQUE | 限制列取值不重複 |
CHECK | 限制列的取值範圍 |
PRIMARY KEY | 指定本列爲主碼 |
FOREIGN KEY | 定義本列爲引用其他表的外碼 |
其中FOREIGN KEY的使用形式爲:
[FOREIGN KEY(<外碼列名>)]
REFERENCES <外表名>(<外表列名>)
說明:
1、NOT NULL 和 DEFAULT只能是列級完整性約束
2、其他約束均可在表級完整性約束處定義
3、如果CHECK約束是定義多列之間的取值約束,則只能在表級完整性約束處定義
4、如果表的主碼由多個列組成,則也只能在表級完整性約束處定義,並將主碼列用括號括起來,即:PRIMARY KEY( 列1{ [,列2 ]…} )
5、如果在表級完整性約束處定義外碼,則“FOREING KEY ( <外碼列名> )”部分不能省略
幾個例子:
列取值非空約束:
用法:<列名> <類型> NOT NULL
例:sname char(10) NOT NULL
表主碼約束:
用法:列定義 PRIMARY KEY
1、在定義列是定義主碼(僅用於單列主碼)
例: Sno char(7) PRIMARY KEY
2、在定義完列時定義主碼(用於單列或多列主碼)
例:PRIMARY KEY(Sno)
PRIMARY KEY(Sno, Cno)
外碼引用約束:
用法:[ FOREIGN KEY ( <本表列名> ) ]
REFERENCES < 外表名 > ( <外表主碼列名>)
例:FOREIGN KEY (Sno)
REFERENCES 學生表(Sno)
創建幾個表並查看一下內容:
學生表:
課程表:
選課表:
表的刪除
語法:
DROP TABLE <表名> { [,<表名> ] … }
例:刪除test表:
DROP TABLE test
先這麼多吧。。。下次該寫表的修改了。。。看了一下,這部分其實還是概念多一點。。。。還是多記吧,之後的有關數據操作的部分的實操應該就會多一些辣。。。。