筆記9 資料型別 表定義語句 檢視

2022-12-31 22:45:05 字數 5319 閱讀 2850

昨日回顧 2

資料型別 4

概覽 4

整數型別 4

範圍 5

通用設定形式 5

小數型別 6

時間日期型別 6

字串型別 6

最基本最重要的2個: 6

2個二進位制文字: 6

2個大文字型別: 6

2個有關「選項」的文字儲存形式: 7

表定義語句 8

建立表: 8

基本形式 8

字段屬性設定 8

索引設定 9

約束設定 9

表選項 10

修改表: 11

一般概述 11

修改表的基本形式: 12

刪除表: 12

表的其他操作: 12

檢視 12

什麼是檢視: 13

檢視建立形式: 13

檢視的使用 13

修改檢視: 13

刪除檢視: 14

資料庫(資料表)的設計思想介紹 14

資料庫設計3正規化(3nf): 14

第一正規化(1nf),原子性 14

第二正規化(2nf)唯一性 15

第三正規化(3nf):獨立性,消除傳遞依賴 17

最後的總結 19

分為:tinyint(1位元組), smallint(2位元組), mediumint(3位元組),int(4位元組), bigint(8位元組)

1位元組=8位(8個燈泡)

乙個燈泡只能表達2個意思(2個數字)

2個燈泡可以表達4個意思

3個燈泡可以表達8個意思

。。。。。

8個燈泡(1個位元組)可以表達256個數字。

預設情況下,這些整數型別都是可正可負的,那麼:

tinyint就只能儲存: -128--127這些數

定義乙個欄位的時候的型別的寫法。

比如:create table tab1 (f1 資料型別 );

資料型別: 型別名[(長度n)] [unsigned] [zerofill]

長度n: 表示的意思是該數字的「顯示形式上的長度」,

unsigned:設定為「無符號」數,則此時不能儲存負數,正數幾乎加倍。

zerofill:填充0,是指如果乙個數字的長度不夠指定長度的時候,可以在左邊填充0以補到該長度。

注意: 如果設定了zerofill,則自動也就表示同時具備了unsigned修飾的含義

可以分為:

單精度浮點型: float,非精確數,通常不設定長度

雙精度浮點:double,非精確數,通常不設定長度

定點型:decimal,精確數,通常,定點型需要設定長度,形式為:decimal(總長, 小數字數)

有如下:

date, time, datetime, year, timestamp

注意:寫入資料庫時,直接的時間日期資料,應該用單引號引起了。

year型別可以是4位整數或4位純數字字串,也可以是2位整數或2位純數字字串

timestamp表示的含義是「時間戳」,其實就是指「當前時刻」,本質上是乙個數字,代表從2023年1月1日0點0分0秒到某個時間之間的秒數數值。該型別的字段值無需賦值,而是會自動取得當前時間值。

varchar型別:可變長度字串型別。最多能儲存65532個位元組的字串——也還要考慮字元編碼。設定的長度只是最長長度,但可以不存滿,則實際長度以資料長度為準。

char型別:定長字串型別。最多能儲存256個字元。如果儲存的資料不足設定的長度,則會自動補空格填滿。

設定時都需要給定長度,比如:varchar(20), char(6);

mysql,一行的所有內容的總的儲存長度也有個限制,約65535個。

binary: 類似char,只是裡面不存「文字」,而是存「文字的二進位制資料」

varbinary: ,類似varchar,同樣,不存「文字」,而是存「文字的二進位制資料」

text: 可以儲存「超大文字」,且其實際的長度並不占用一行的長度。相對char和varchar,效率低。

blob: 可以儲存「超大二進位制文字」,通常用於儲存**這種「二進位制資料」

enum:

專門用於方便儲存類似表單中的「單選項」的值。

形式:enum(『選項1』,『選項2』,『選項3』,......)

這些選項的值雖然是字串,但其資料庫內部儲存其實是數字(效率高),他們的數字值是:1, 2, 3,4, 5,。。。。。最多6萬多個。

結果:set:專門用於方便儲存類似表單中的「多選項」的值。

形式:set (『選項1』,『選項2』,『選項3』,......)

這些選項的值雖然是字串,但其資料庫內部儲存其實是數字(效率高),他們對應的數字值是:1, 2,4, 8, 16,。。。。。最多6萬多個

在看不存在的資料的情形:

可見,enum,set型別的字段,限制的「字串」資料值。

create table [if not exists] 表名(字段列表, [約束或索引列表]) [表選項列表];

說明:列表都是表示「多個」,相互之間用逗號分開。

字段基本形式: 欄位名型別 [字段修飾屬性];

not null: 不為空,表示該欄位不能放「null」這個值。不寫,則預設是可以為空

auto_increment: 設定int型別欄位的值可以「自增長」,即其值無需「寫入」,而會自動獲得並增加

此屬性必須隨同 primary key 或 unique key 一起使用。

[primary] key: 設定為主鍵。是唯一鍵「加強」:

也不能重複並且不能使用null,並且可以作為確定任意一行資料的「關鍵值」,最常見的類似:where id= 8; 或 where user_name = 『zhangsan』;

通常,每個表都應該有個主鍵,而且大多數表,喜歡使用乙個id並自增長型別作為主鍵。

但:乙個表只能設定乙個主鍵。

unique [key] : 設定為唯一鍵:表示該字段的所有行的值不可以重複(唯一性)。

default 『預設值』: 設定乙個欄位在沒有插入資料的時候自動使用的值。

comment 『字段注釋』:

舉例:什麼是索引:

索引是乙個「內建表」,該錶的資料是對某個真實表的某個(些)欄位的資料做了「排序」之後的儲存形式。

其作用是:極大提高表查詢資料的速度!——其效率(速度)可以匹敵二分查詢。

注意:索引在提供查詢速度的同時,降低增刪改的速度。

對建立(設計)表來說,建立索引是非常簡單的事,形式如下:

索引型別 (欄位名1,欄位名2可以使用多個字段建立索引,但通常是乙個

有以下幾種索引:

普通索引:key(欄位名1,欄位名2, .... ):它只具有索引的基本功能——提速

唯一索引:unique key (欄位名1,欄位名2, .... )

主鍵索引:primary key (欄位名1,欄位名2, .... )

全文索引:fulltext (欄位名1,欄位名2, .... )

舉例:什麼叫約束:約束就是一種限定資料以符合某種要求的形式(機制)

約束主要有:

主鍵約束:primary key (欄位名1,欄位名2, .... )

其實就是主鍵索引,也是主鍵屬性。即primary key有3個角度的理解(說法):字段屬性設定為主鍵,或建立的主鍵索引,或設定乙個主鍵約束,但他們的本質是一樣

唯一約束:unique key (欄位名1,欄位名2, .... ),其實也是「3體合一」(類似primary key)

外來鍵約束:

什麼叫外來鍵:就是設定乙個表中的某個欄位的值,必須「**於」另乙個表的某個主鍵欄位的值。

語法形式:

foreign key (欄位名1,欄位名2, .... ) references 表名2(欄位名1,欄位名2, .... )

說明:對某個(些)字段設定外來鍵,則其相對應的其他表的對應字段需要設定為主鍵。

非空約束:就是要求該字段的值不能為空,其只能在字段上當作字段屬性來設定。

預設約束:就是要求該字段的值在「空」的時候會自動填充該設定的預設值,也只能欄位上設定。

檢查約束:就是使用乙個表示式(邏輯判斷)來決定資料是否有效,比如年齡字段,可以使用

tinyint,則可能會超過127就不合適了。

tinynit unsigned,則0-255是可以的。

但:如果考慮現實情況,假設某保險公司只作150歲以下的人的保險。則我們就可以繼續對該字段可能儲存的資料進行「約束」。比如類似:if(age > 150)

可惜的是:mysql不支援檢查約束的語法和功能。

表選項就是對乙個表的有關屬性的設定,通常都不需要。如果不設定,則有其預設值。

有以下幾個可用:

comment = 『表的注釋』;

charset = 字元編碼名稱; //跟資料的字元編碼設定乙個意思。

字元編碼設定的範圍及繼承關係:

系統級設定:安裝時確定了。

庫級設定:建庫時設定;

表級設定:就是這裡的charset = 字元編碼名稱

字段級設定:作為字段屬性出現。

他們都只對「字元型別」的字段有效。每一級如果沒有設定,就會「繼承使用」其上一級的設定。

auto_increment = 起始整數; //自增長型別值的初值,預設是1

engine = 「表的儲存引擎名」; //

儲存引擎就是將資料存入硬碟(或其他媒介)的方式方法。通常就幾個可用,預設是innodb

儲存引擎決定乙個資料表的各方面的資訊:功能和效能。

總的示例:

通常,建立乙個表,能搞定(做到)的事情,修改表也能做到。大體來說,就可以做到:

增刪改欄位:

增:alter table 表名 add [column] 欄位名字段型別字段屬性;

刪: alter table 表名 drop 欄位名

改:alter table 表名 change 原欄位名新欄位名新字段型別新字段屬性;

增刪索引:

增刪約束:

修改表選項:

alter table 表名修改語句1,修改語句2, ..... ;

drop table [if exists] 表名;

顯示所有表show tables:

顯示表結構desc 表名;

顯示表的建立語句: show create table 表名;。

從已有表複製表結構:create table [if not exists] 新錶名 like 原表名;

資料型別整合

oracle與db2資料型別的分類對應說明 number oracle中的number型別可以對應db2 400中的很多態別,這種對應關係要依賴於oracle中number將用於儲存何種型別的資料,是整型還是帶有小數字的實型資料,另外還要考慮型別所占用的儲存空間,例如 samllint佔2 byte...

MySQL資料型別

mysql的基本資料型別 檢視文章 mysql的基本資料型別2008 06 05 10 18 數值型別 mysql的數值資料型別可以大致劃分為兩個類別,乙個是整數,另乙個是浮點數或小數。mysql允許我們指定數值字段中的值是否有正負之分或者用零填補。表列出了各種數值型別以及它們的允許範圍和占用的記憶...

MySQL資料型別

mysql支援所有標準sql數值資料型別。這些型別包括嚴格數值資料型別 integer smallint decimal和numeric 以及近似數值資料型別 float real和double precision 關鍵字int是integer的同義詞,關鍵字dec是decimal的同義詞。bit資...