(三)操作數據表


1、概述

數據表,或簡稱為表,是數據庫最重要的組成部分之一,是其他對象的基礎,可以理解為類似于Excel表格,有多行多列,示例如下:
  假設要存儲通訊錄信息,對于數據庫而言,是用表來進行存儲,首先要根據實際需求確定關于通訊錄要存儲哪些數據。本例中要存儲“姓名”、“性別”及“聯系方式”,這種限定每一列的存儲內容的值稱為字段,同時還要確定好該字段所屬的數據類型


  當存儲了全部信息后,會發現實際上每一行就是一個用戶完整的通訊錄信息,因此像這樣的一行就被稱為一條記錄。


2、創建數據表

在登錄到MySQL之后,首先查看現已存在的數據庫有哪些,假設本次要在“test”數據庫中存儲數據,則選擇使用該數據庫,并用“SELECT”驗證當前使用的確實為“test”數據庫(該部分語句可參見初涉MySQL)。

創建表的語法結構如下:

CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type,
column_name data_type,
……
)
其中“[IF NOT EXISTS]”在之前已經介紹過,而“column_name”指的是字段的名稱,“data_type”則是數據類型;“,”是字段之間的分隔符,最后一個字段后不需要添加“,”。

采用這種輸入方式可以使代碼看起來更簡潔明了
采用這種輸入方式可以使代碼看起來更簡潔明了

根據語法創建該表,其中:

  • “username”即用戶名稱,數據類型為VARCHAR,最多存儲20個字節;
  • “age”即用戶年齡,數據類型為TINYINT,UNSIGNED指的是無符號,即非負;
  • “birthday”即用戶出生日期,數據類型為DATE;
  • “salary”即用戶收入,數據類型為FLOAT,最多存儲8位數,小數點后2位數;
  • “resume”即用戶信息摘要,數據類型為TEXT。

3、查看數據表

語法結構如下:

SHOE TABLES [FROM db_name]
[LIKE 'pattern' | WHERE expr]

示例如下:

添加“[FROM db_name]”之后,可以查看其他數據庫下含有的數據表,例如查看mysql數據庫下的數據表:


4、查看數據表結構

對于已創建成功的數據表,若想查看其結構是否與輸入的相一致,可使用如下語句:

SHOE COLUMNS FROM tbl_name

DESC tbl_name

SHOW CREATE TABLE tbl_name

示例如下:

SHOE COLUMNS FROM tbl_name
SHOE COLUMNS FROM tbl_name
DESC tbl_name
DESC tbl_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TABLE tbl_name

  這種模式會將數據表創建時的源碼、使用的儲存引擎及編碼都顯示出來,但是格式會比較亂,可以在末尾添加“\G”進行格式化處理,便于查看:


SHOW CREATE TABLE tbl_name\G
SHOW CREATE TABLE tbl_name\G

5、記錄的插入與查找

如果用Excel表格來舉例,那么之前僅僅是完成了“列”的創建,現在要來填充“行”的內容,也就是記錄,語句如下:

INSERT [INTO] tbl_name [(col_name,……)] VALUES(val,……)

語法中字段名加上了中括號,意味著可以省略,如果省略字段稱,就要為所有的字段都賦值,示例如下:

如果在省略字段名的情況下,有的字段沒有賦值,系統就會報錯,提示字段名與值不匹配:

當然也可以對指定的字段名進行賦值,例如只對“用戶名稱”與“用戶收入”進行賦值:

注意:

  1. 字段名與賦值的類型、個數、順序始終能一一對應;
  2. 賦值時不要超過字段所定義的長度;
  3. 如果需要插入空值,使用null;
  4. 插入日期或字符時,使用單引號(‘’)包圍。

若要驗證記錄是否已被寫入數據表,可以使用“SELECT expr,… FROM tbl_name”,來查看,關于“SELECT”的詳細語法,日后會介紹到,此處先簡單的使用一下:

此處的 * 是指字段的過濾
此處的 * 是指字段的過濾

6、空值與非空

當用戶在網站注冊賬戶時,可能會遇到一些必填的選項,那么對于數據表而已,同樣可以設置某些字段可以為空或禁止為空,例如:

其中“NULL”表示該字段值允許為空
其中“NULL”表示該字段值允許為空

創建的數據表“tb2”,用于空值與非空的測試,其中“NULL”,代表該字段值允許為空;“NOT NULL”,則表示該字段值禁止為空:

查看數據表的基本結構,可見對于字段值是否允許為空,用戶名是不允許,而用戶年齡允許為空。


之后分別輸入兩條字段互相為空的記錄:

第一條記錄中對于用戶年齡設為空值,成功計入了數據表,但是第二條用戶名設為空,系統提示錯誤,顯示“用戶名”字段不允許為空。查看表中數據發現,只有第一條記錄被寫入:


7、自動編號

在數據儲存的過程中,有時需要保證某條記錄的唯一性,此時可以為該字段添加“AUTO_INCREMENT”屬性,即自動編號,默認情況下,起始值為1,每次的增量為1,即1、2、3、……,且必須與主鍵組合使用;自動編號的數據類型一定是數值型,如果使用小數類型,則必須保證小數點后的位數為0。

主鍵約束即“PRIMARY KEY”,可以保證數據的唯一性,每張數據表只能存在一個主鍵,且自動設置為“NOT NULL”。

創建數據表“tb3”,用于自動編號的測試:

之后查看“tb3”的基本結構:


  可見“id”字段的主鍵自動設為“NOT NULL”,且自動編號,意味著之后只需要向數據表中輸入“用戶名”即可:

由于只輸入用戶姓名,因此必須標明字段“(username)”,在輸入了4條記錄后,查看該數據表,證明“id”字段的確自動賦值為1、2、3、4。

注意:
自動編號必須與主鍵一同使用,但主鍵并不是必須與自動編號一同使用,雖然二者都可以保證數據的唯一性。

創建數據表“tb4”,用于測試主鍵賦值的唯一性:


主鍵寫“PRIMARY KEY”或“KEY”都可以
主鍵寫“PRIMARY KEY”或“KEY”都可以

此時向表中寫入記錄,注意沒有自動賦值,所有字段都需要寫入數據:



  可見當“id”為6或第一次為32時,記錄都被寫入數據表,但第二次重復寫入32時,系統提示出錯,因此保證了數據的唯一性。


8、唯一約束

唯一約束即“UNIQUE KEY”,同樣可以保證記錄的唯一性,與主鍵約束不同的是:每張數據表可以存在多個唯一約束;唯一約束的字段值可以為空。

此時可能會有疑問:既然數據表中允許存在多個唯一約束,唯一約束又允許為空,相當于數據表中存在多個空值,豈不是互相矛盾?
要注意數據在存儲時,即使有多個值,但最終保留的空值只有一個,因此也符合了唯一性。

創建數據表“tb5”,用于測試唯一約束的實際效果:

再輸入第二次“Tom”時,系統提示錯誤,證明其具有唯一性:


9、默認約束

默認約束即“DEFAULT”,當插入記錄時,如果沒有明確為字段賦值,系統則會自動賦予其默認值。
  創建數據表“tb6”,用于演示默認值的實際效果:

ENUM即枚舉值,詳細可參見[數據類型](http://www.lxweimin.com/p/d4324057b548)
ENUM即枚舉值,詳細可參見[數據類型](http://www.lxweimin.com/p/d4324057b548)

其中對于“性別”字段設計了“男性”、“女性”、“保密”三種可選項,其中默認是“保密”。

在輸入記錄時,只寫入了用戶名為“Tom”,因此性別為默認自動添加的“保密”。


10、操作數據表的SQL語句匯總:

  • 創建數據表
    CREATE TABLE [IF NOT EXISTS] table_name(
    column_name data_type,
    column_name data_type,
    ……
    );

  • 查看數據表
    SHOE TABLES [FROM db_name]
    [LIKE 'pattern' | WHERE expr]

  • 查看數據表結構
    SHOE COLUMNS FROM tbl_name;

    DESC tbl_name;

    SHOW CREATE TABLE tbl_name\G;

  • 插入記錄
    INSERT [INTO] tbl_name [(col_name,……)] VALUES(val,……);

  • 查看記錄
    SELECT expr,… FROM tbl_name;


版權聲明:歡迎轉載,歡迎擴散,但轉載時請標明作者以及原文出處,謝謝合作!             ↓↓↓
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1、MySQL啟動和關閉(安裝及配置請參照百度經驗,這里不再記錄。MySQL默認端口號:3306;默認數據類型格式...
    強壯de西蘭花閱讀 676評論 0 1
  • 什么是數據庫? 數據庫是存儲數據的集合的單獨的應用程序。每個數據庫具有一個或多個不同的API,用于創建,訪問,管理...
    chen_000閱讀 4,055評論 0 19
  • .數據庫 數據庫的發展: 文件系統(使用磁盤文件來存儲數據)=>第一代數據庫(出現了網狀模型,層次模型的數據庫)=...
    小Q逛逛閱讀 1,001評論 0 2
  • 回顧和概述 數據類型 整型 浮點型 字符型 日期時間型 數據表操作 如何創建數據表 PRIMARY KEY(主鍵約...
    齊天大圣李圣杰閱讀 717評論 0 0
  • 總是每天清晨,在人還沒有徹底醒來的時候,就習慣瞇著眼睛透過窗子看看天空。總是每天清晨,在人還沒有徹底醒來的時候,就...
    依蘭襲香閱讀 924評論 0 1