天天看點

Python資料庫操作 中的資料類型#學習猿地

### 一,MySQL的資料類型

資料類型是定義列中可以存儲什麼類型的資料以及該資料實際怎樣存儲的基本規則

資料類型限制存儲在資料列列中的資料。例如,數值資料類型列隻能接受數值類型的的資料

在設計表時,應該特别重視所用的資料類型。使用錯誤的資料類型可能會嚴重地影響應用程式的功能和性能。

更改包含資料的列不是一件小事(而且這樣做可能會導緻資料丢失)。

資料類型:整型、浮點型、字元串、日期等

------------------------------------

#### 1、字元串資料類型

最常用的資料類型是串資料類型。它們存儲串,如名字、位址、電

話号碼、郵政編碼等。

不管使用何種形式的串資料類型,串值都必須括在引号内

有兩種基本的串類型,分别為定長串和變長串

- 定長串:char

1. 接受長度固定的字元串,其長度是在建立表時指定的。

  定長列不允許存儲多于指定長度字元的資料。

2. 指定長度後,就會配置設定固定的存儲空間用于存放資料

```

char(7) 不管實際插入多少字元,它都會占用7個字元位置

```

- 變長串 varchar

存儲可變長度的字元串

    varchar(7) 如果實際插入4個字元, 那麼它隻占4個字元位置,當然插入的資料長度不能超過7個字元。

----------------------------------------------------

##### 注意

    既然變長資料類型這樣靈活,為什麼還要使用定長資料類型?

    回答:因為性能,MySQL處理定長列遠比處理變長列快得多。

+ Text  變長文本類型存儲

![image](./imgs/3232559721674152AA6C45916CE1C086.png)

---

#### 2、數值類型

數值資料類型存儲數值。MySQL支援多種數值資料類型,每種存儲的數值具有不同的取值範圍。支援的取值範圍越大,所需存儲空間越多

與字元串不一樣,數值不應該括在引号内

![image](./imgs/3D63395B658D42489CE95C2157C15213.png)

    decimal(5, 2) 表示數值總共5位, 小數占2位

    tinyint 1位元組(8位) 0-255。-128,127

    int    4位元組。    -21億,21億。0-42億

    float. 

    MySQL中沒有專門存儲貨币的資料類型,一般情況下使用DECIMAL(8, 2)

#### 有符号或無符号

所有數值資料類型(除BIT和BOOLEAN外)都可以有符号或無符号

- 有符号數值列可以存儲正或負的數值

- 無符号數值列隻能存儲正數。

- 預設情況為有符号,但如果你知道自己不需要存儲負值,可以使用UNSIGNED關鍵字

---

##### 注意

    如果将郵政編碼類似于01234存儲為數值類型,則儲存的将是數值1234,此時需要使用字元串類型

    手機号應該用什麼進行存儲呢?

---

#### 3、日期和時間類型

MySQL使用專門的資料類型來存儲日期和時間值

![image](./imgs/B493924B597B48D7AE436F5EFFB09DCC.png)

    datetime 8位元組1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

---

#### 4、二進制資料類型

二進制資料類型可存儲任何資料(甚至包括二進制資訊),如圖像、多媒體、字處理文檔等

![image](./imgs/B8CCF6C0BCA5402B907D02F8C415B019.png)

---

### 二、表的字段限制

- unsigned  無符号(給數值類型使用,表示為正數,不寫可以表示正負數都可以)

- 字段類型後面加括号限制寬度 

  - char(5). varchar(7) 在字元類型後面加限制 表示 字元串的長度

  - int(4) 沒有意義,預設無符号的int為int(11),有符号的int(10)

  - int(4) unsigned zerofill隻有當給int類型設定有前導零時,設定int的寬度才有意義。

- not null  不能為空,在操作資料庫時如果輸入該字段的資料為NULL ,就會報錯

- default 設定預設值

- primary key  主鍵不能為空,且唯一.一般和自動遞增一起配合使用。

- auto_increment  定義列為自增屬性,一般用于主鍵,數值會自動加1

- unique 唯一索引(資料不能重複:使用者名)可以增加查詢速度,但是會降低插入和更新速度

---

### 三、MySQL的運算符

- 算術運算符: +、 -、 *、 /、 %

- 比較運算符: =、 >、 <、 >=、 <=、!=

- 資料庫特有的比較: in、not in、is null、is not null、like、between、and

- 邏輯運算符: and、or、not

- like:  支援特殊符号%和_ ;

    其中%表示任意數量的任意字元,_表示任意一位字元

---

### 四、主鍵

1、**表中每一行都應該有可以唯一辨別自己的一列**,用于記錄兩條記錄不能重複,任意兩行都不具有相同的主鍵值

2、應該總是定義主鍵 雖然并不總是都需要主鍵,但大多數資料庫設計人員都應保證他們建立的每個表具有一個主鍵,以便于以後的資料操縱和管理。

#### 要求

- 記錄一旦插入到表中,主鍵最好不要再修改

- 不允許NULL

- 不在主鍵列中使用可能會更改的值。

    (例如,如果使用一個名字作為主鍵以辨別某個供應商,當該供應商合并和更改其名字時,必須更改這個主鍵。)

- 自增整數類型:資料庫會在插入資料時自動為每一條記錄配置設定一個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵

- 可以使用多個列作為聯合主鍵,但聯合主鍵并不常用。使用多列作為主鍵時,所有列值的組合必須是唯一的