1. 程式人生 > 其它 >MySQL-04-建立表

MySQL-04-建立表

目錄

1、建立資料庫並設定字符集

CREATE DATABASE mytest2 CHARACTER  SET utf8mb4 COLLATE utf8mb4_bin;

2、建立表-語法

CREATE TABLE 表名稱(
	欄位名1 欄位型別,
	欄位名2 欄位型別,
	欄位名3 欄位型別,
	...
) DEFAULT CHARSET=utf8mb4;
CREATE TABLE member(
	regName varchar(20),
	pwd varchar(6)
) DEFAULT CHARSET=utf8mb4

3、建立表-資料型別

MySQL中定義資料欄位的型別對你資料庫的優化是非常重要的。

MySQL支援多種型別,大致可以分為三類:數值、日期/時間和字串(字元)型別。

3.1、數值型別

3.2、日期和時間型別

3.2、字串型別

4、建立表-資料型別寬度說明

4.1、INT 型別

  • 指定一個欄位的型別為 INT(6),就可以保證所包含數字少於 6 個的值從資料庫中檢索出來時能夠自動地用空格填充。需要注意的是,使用一個寬度指示器不會影響欄位的大小和它可以儲存的值的範圍。
  • 我們需要對一個欄位儲存一個超出許可範圍的數字,MySQL 會根據允許範圍最接近它的一端截短後再進行儲存。還有一個比較特別的地方是,MySQL 會在不合規定的值插入表前自動修改為 0。
  • UNSIGNED 修飾符規定欄位只儲存正值。因為不需要儲存數字的正、負符號,可以在儲時節約一個“位”的空間。從而增大這個欄位可以儲存的值的範圍。
  • ZEROFILL 修飾符規定 0(不是空格)可以用來真補輸出的值。使用這個修飾符可以阻止 MySQL 資料庫儲存負值。

4.2、FLOAT、DOUBLE 和 DECIMAL 型別

  • MySQL 支援的三個浮點型別是 FLOAT、DOUBLE 和 DECIMAL 型別。FLOAT 數值型別用於表示單精度浮點數值,而 DOUBLE 數值型別用於表示雙精度浮點數值。
  • 與整數一樣,這些型別也帶有附加引數:一個顯示寬度指示器和一個小數點指示器。比如語句 FLOAT(7,3) 規定顯示的值不會超過 7 位數字,小數點後面帶有 3 位數字。
  • 對於小數點後面的位數超過允許範圍的值,MySQL 會自動將它四捨五入為最接近它的值,再插入它。
  • DECIMAL 資料型別用於精度要求非常高的計算中,這種型別允許指定數值的精度和計數方法作為選擇引數。精度在這裡指為這個值儲存的有效數字的總個數,而計數方法表示小數點後數字的位數。比如語句 DECIMAL(7,3) 規定了儲存的值不會超過 7 位數字,並且小數點後不超過 3 位。
  • 忽略 DECIMAL 資料型別的精度和計數方法修飾符將會使 MySQL 資料庫把所有標識為這個資料型別的欄位精度設定為 10,計算方法設定為 0。
  • UNSIGNED 和 ZEROFILL 修飾符也可以被 FLOAT、DOUBLE 和 DECIMAL 資料型別使用。並且效果與 INT 資料型別相同。

4.3、字串型別

  • CHAR 型別用於定長字串,必須在圓括號內用一個大小修飾符來定義,並且比指定長度大的值將被截短,而比指定長度小的值將會用空格作填補。
  • CHAR 型別可以使用 BINARY 修飾符。當用於比較運算時,這個修飾符使 CHAR 以二進位制方式參於運算,而不是以傳統的區分大小寫的方式。
  • VARCHAR 型別。它是一種可變長度的字串型別,必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。
  • CHAR 和 VARCHGAR 不同之處在於 :
    • MySQL 資料庫處理這個指示器的方式:
    • CHAR 型別把指示器的值視為欄位值的大小,長度不足的情況下就用空格補足。
    • VARCHAR 型別把指示器的值視為最大值,並且只使用儲存字串實際需要的長度來儲存值。所以短於指示器長度(圓括號內的值)的 VARCHAR 型別不會被空格填補,但長於指示器的值仍然會被截短。因為 VARCHAR 型別可以根據實際內容動態改變儲存值的長度(通過增加一個額外位元組來儲存字串本身的長度)
  • 所以在不能確定欄位需要多少字元時使 VARCHAR型別可以大大地節約磁碟空間、提高儲存效率。
  • VARCHAR 型別在使用 BINARY 修飾符時與 CHAR 型別完全相同。

4.4、日期和時間型別

  • DATE、TIME 和 TEAR 型別
    • MySQL 用 DATE 和 TEAR 型別儲存簡單的日期值,使用 TIME 型別儲存時間值。這些型別可以描述為字串或不帶分隔符的整數序列。如果描述為字串,DATE 型別的值應該使用連字號作為分隔符分開,而 TIME 型別的值應該使用冒號作為分隔符分開。
    • 需要注意的是,沒有冒號分隔符的 TIME 型別值,將會被 MySQL 理解為持續的時間,而不是時間戳。
    • MySQL 還對日期的年份中的兩個數字的值,或是 SQL 語句中為 TEAR 型別輸入的兩個數字進行最大限度的通譯。因為所有 TEAR 型別的值必須用 4 個數字儲存。MySQL 試圖將 2 個數字的年份轉換為 4 個數字的值。把在 00-69 範圍內的值轉換到 2000-2069 範圍內。把 70-99 範圍內的值轉換到 1970-1979 之內。如果 MySQL 自動轉換後的值並不符合我們的需要,請輸入 4 個數字表示的年份。
  • DATEYIME 和 TIMESTAMP 型別
    • 除了日期和時間資料型別,MySQL 還支援 DATEYIME 和 TIMESTAMP 這兩種混合型別。它們可以把日期和時間作為單個的值進行儲存。這兩種型別通常用於自動儲存包含當前日期和時間的時間戳,並可在需要執行大量資料庫事務和需要建立一個除錯和審查用途的審計跟蹤的應用程式中發揮良好作用。
    • 如果我們對 TIMESTAMP 型別的欄位沒有明確賦值,或是被賦與了 null 值。MySQL 會自動使用系統當前的日期和時間來填充它。

5、建立表-主鍵約束

  • PRIMARY KEY
    • 主鍵約束
    • 每張表只能存在一個主鍵
    • 主鍵保證記錄的唯一性
    • 主鍵自動為NOT NULL
CREATE TABLE student(
id int(100) PRIMARY KEY,
s_name varchar(4)
);

5、建立表-自增長

  • AUTO_INCREMENT 自動編號
    • 必須與主鍵組合使用,即自增長的欄位必須定義為主鍵
    • 預設情況下起始為1,每次增量為1
CREATE TABLE student(
id int(100) PRIMARY KEY AUTO_INCREMENT,
s_name varchar(4)
);
  • 重置自增初始值
    • ALTER TABLE student AUTO_INCREMENT=0;
    • TRUNCATE TABLE student;
    • 刪除表,重新建表;

5、建立表-備註與建立表細節

CREATE TABLE s_student(
id int(100) PRIMARY KEY AUTO_INCREMENT COMMENT '主鍵' ,
s_name varchar(4) COMMENT '姓名'
) COMMENT '會員表';