MySQL的表定義語法

来源:https://www.cnblogs.com/gaoguowen/archive/2019/10/15/11676417.html
-Advertisement-
Play Games

表定義 只有成功創建資料庫後,才能創建數據表,數據表是欄位的集合,在表中數據按行和列的格式存儲 創建表 MySQL 使用 CREATE TABLE 創建表。其中有多個選擇,主要由表創建定義(create definition)、表選項定義(table options) 和區分選項(partition ...


表定義

只有成功創建資料庫後,才能創建數據表,數據表是欄位的集合,在表中數據按行和列的格式存儲

創建表

MySQL 使用 CREATE TABLE 創建表。其中有多個選擇,主要由表創建定義(create definition)、表選項定義(table options) 和區分選項(partition options)等內容構成。

表創建定義:由表列的名字、列的定義集可能的一個空值聲明、一個完整性約束或表索引項組成,表索引項主要定義表的索引、主鍵、外鍵等。

語法結構:

CREATE[TEMPORARY]TABLE tbl_name
(
    欄位名|數據類型[列級完整性約束條件][預設值]
    [,欄位名2 數據類型[列級完整性約束條件][預設值]]
    [,....]
    [,表級完整性約束條件]
)[ENGINE=引擎類型]

Example:
新建一個客戶信息

mysql> USE mysql_test
Database changed
mysql> CRATE TABLE customers
    ->(
    -> cust_id INT NOT NULL AUTO_INCREMENT,
    -> cust_name CHAR(50) NOT NULL,
    -> cust_sex CHAR(1) NOT NULL DEFAULT 0,
    -> cust_address CHAR(50) NULL
    -> cust_contact CHAR(50) NULL
    -> PRIMARY KEY(CUST_ID)
    ->)
Query OK, 0 rows affected(0.11 sec)

臨時表與持久表

TEMPORARY:表示臨時表,如果不選用則位持久表。
持久表一直存在,多個用戶或應用程式可同時使用持久表,如果只需臨時存放數據可添加 TEMPORARY 關鍵字
臨時表只能對創建它的用戶可見,斷開資料庫連接時,表會自動清除

數據類型

數據類型指系統中所允許的數據的類型。每列都應有適當的數據類型,來限制或允許該列的數據。 建表時必須為每列指定正確的數據類型及數據長度 (CHAR(50))

MySQL 主要數據類型:

  • 數值類型:整型 int、浮點 double、布爾 bool
  • 日期和時間類型:日期型、時間戳 timestamp、時間型 time
  • 字元串類型:定長字元類型char、可變長字元類型varchrar
  • 空間數據類型:單個幾何類型 GEOMETRY等

關鍵字 AUTO_INCREMENT

AUTO_INCREMENT: 表中數據類型為整型的列設置自增屬性 (++i),從當前指或 1 開始,表中只能有一個 AUTO_INCREMENT。

當一個表列被指定為 AUTO_INCREMENT 後,其值可被覆蓋,即可在表數據插入語句中為該列指定一個值(必須唯一),則該值將替換系統自動生成的值,後續增量基於該插入的值

指定預設值

DEFAULT:用於指定MySQL在未給值的情況下預設的值(DEFAULT 0)

如果未指定預設值,則自動為其分配一個值,如若該列可取值NULL,則預設NULL,若定義 NOT NULL,則預設取決於該列的類型:

  • 一個沒有聲明 AUTO_INCREMENT 列 為數字類型,預設 0
  • 一個 AUTO_INCREMENT 列 預設為順序中的下一個值
  • 對於除 TIMESTAMP 以外的日期和時間類型,預設為該類型適當的'零'值、
  • 對於表中第一個 TIMESTAMP 列,預設值為當前日期和時間

NULL值

NULL:沒有值或缺值,允許NULL的列,插入行時可以不給該列的值;不允許NULL值的列,則該列必須有數據
NULL''是不對等的 NOT NULL 列中允許'' 不允許 NULL

主鍵

PRIMARY KEY :指定主鍵,主鍵必須唯一且不能為NULL, 如果是單列,值必須唯一,如果是組合列,則其組合的值必須唯一

更新表

通過使用 ALTER TABLE 來修改資料庫

  • ADD[COLUMN]:新增表列,可增多列使用逗號分隔即可
    Example:
mysql> ALTER TABLE mysqle_test.customers
    -> ADD COLUMN cust_city char(10) NOT NULL DEFAULT'ShenZhen' AFTER cust_sex;
Query OK,0 rows affected(0.61 sec)
Records:0 Duplicates:0 Warning:0

AFTER:將新增的列添加到cut_sexl 列之後
FIRST:將新增的列添加到表的第一列

若使用上述關鍵字則將新增的列添加至表最後

類似的 可以使用 ADDPRIMARY KEY 、ADDFOREIGN KEY 、ADD INDEX 添加對應的 主鍵、外鍵、索引

  • CHANGE[COLUMN]: 修改表中列的名稱或數據類型,可修改多列使用逗號分隔即可
mysql> ALTER TABLE mysqle_test.customers
    -> CHANGE COLUMN cust_sex sex char(1) NULL DEFAULT 'M'
Query OK,0 rows affected(0.66 sec)
Records:0 Duplicates:0 Warning:0

如果將數據類型更換,可能會丟失該列原有的數據,如果視圖改變的數據類型於原有的數據類型不相容,則SQL命令不會執行,且拋出錯誤。
再相容的情況下,該列的數據可能會被截斷,如:一列的數據類型為 varchart(10),改為char(1),則該列中的數據'ShenZhen'會變為'S'

  • ALTER [COLUMN]: 修改或刪除指定列的預設值
mysql> ALTER TABLE mysqle_test.customers
    -> ALTER COLUMN cust_city SET  DEFAULT 'ShangHai'
Query OK,0 rows affected(0.36 sec)
Records:0 Duplicates:0 Warning:0
  • MODIFY [COLUMN]: 修改指定列的數據類型,通過 'FIRST' 或 'AFTER' 修改列的位置
mysql> ALTER TABLE mysqle_test.customers
    -> MODIFY COLUMN cust_name char(30)  FIRST
Query OK,0 rows affected(0.20 sec)
Records:0 Duplicates:0 Warning:0
  • DROP [COLUMN]: 刪除列,該列所有數據一併刪除
mysql> ALTER TABLE mysqle_test.customers
    -> DROP COLUMN cust_city
Query OK,0 rows affected(0.42 sec)
Records:0 Duplicates:0 Warning:0

同樣 可使用 DROP PRIMARY KEY 、DROP FOREIGN KEY、DROP INDEX 刪除對應的主鍵、外鍵、索引

  • RENAME[TO]:表重命名
mysql> ALTER TABLE mysqle_test.customers
    -> RENAME TO
Query OK,0 rows affected(0.42 sec)

重命名錶

除了 ALTER TABLE 中的 RENAME TO 修改表名,還可通過 RENAME TABLE 來修改單張和多張表(以逗號分隔)

mysql> RENAME TABLE mysql_test.back.customers TO mysqle_test.customers

刪除表

DROP[TEMPORARY]TABLE[IF EXISTS]刪除一個已存在的表,可以刪除多張表,前提操作人必須有許可權,但是操作人在該張表上的許可權不會被刪除

查看表

  • SHOW [FULL] TABLES [{FROM|IN}db_name] [LIKE'pattern'|WHERE expr]: 顯示指定資料庫中所有表名

Example:

mysql> USE mysql_test
Database changed
mysql> SHOW TABLES:
 Tables_in_mysql_test
 customers
 1 row in set <0.01 sec>
  • SHOW [FULL] COLUMNS {FROM|IN}tb_name[{FROM|IN}db_name] 或 {DESCRIBE|DESC} tbl_name[col_name|wild]: 顯示指定資料庫表結構。

MySQL 支持使用 DESCRIBE 代替 SHOW COLUMNS FROM 來查看表結構

Example:

mysql> DESC mysql_test.custormes
Field         Type       Null key  Default Extra
cust_id       int<11>    NO   PRI  NULL    auto_increment
cust_name     char<50>   NO        Null
cust_sex      int<1>     NO        0

3 row in set <1.56 sec>

Owen 的個人博客
博客園


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • FreeRTOS列表&列表項的源碼解讀 第一次看列表與列表項的時候,感覺很像是鏈表,雖然我自己的鏈表也不太會,但是就是感覺很像。 在 中,列表與列表項使用得非常多,是 的一個數據結構,學習過數據結構的同學都知道,數據結構能使我們處理數據更加方便快速,能快速找到數據,在 中,這種列表與列表項更是必不可 ...
  • 大家晚上好,我是傑傑,最近挺忙的,好久沒有更新了,今天周末就吐血更新一下吧! 前言 是一個是實時內核,任務是程式執行的最小單位,也是調度器處理的基本單位,移植了 ,則避免不了對任務的管理,在多個任務運行的時候,任務切換顯得尤為重要。而任務切換的效率會決定了系統的穩定性與效率。 的任務切換是幹嘛的呢, ...
  • 補充 開始今天的內容之前,先補充一下上篇文章 "從單片機到操作系統 1" 的一點點遺漏的知識點。 創建任務中的堆棧大小問題,在task.h中有這樣子的描述: 當任務創建時,內核會分為每個任務分配屬於任務自己的唯一堆棧。usStackDepth 值用於告訴內核為它應該分配多大的棧空間。 這個值指定的是 ...
  • 我們知道,(單核)單片機某一時刻只能幹一件事,會造成單片機資源的浪費,而且還有可能響應不夠及時,所以,在比較龐大的程式或者是要求實時性比較高的情況下,我們可以移植操作系統。因為這種情況下操作系統比裸機方便很多,效率也高。下麵,傑傑將帶你們走進FreeRTOS的世界隨便看看。 下麵正式開始本文內容。 ...
  • ls 列出目錄內容 pwd 顯示當前工作路徑 cd 進入其他目錄,改變你當前所在目錄 mkdir 創建一個新的目錄 touch 創建一個文件 man 幫助命令同 --help cp 複製文件 mv 移動 / 重命名 find 查找文件 grep 篩選 查看文件內容 kill 向進程發出一個信號 pa ...
  • Scrcpy 安裝 adb服務安裝 adb配置 查看手機的USB識別號 手機通過USB連接電腦 找打自己手機的識別號, 我是04e8:6860 創建設備文件 下麵所有的 改成自己的識別號, 文件名可自定義 在文件中輸入: 保存後修改文件許可權 啟動adb服務 有設備就說明成功了, 如果沒有看看自己手機 ...
  • Centos7啟動流程: 1.post(Power-On-Self-Test) 加電自檢 2. bootsequence(BIOS,選擇啟動設備) 3.bootloader(MBR) 4.kernel初始化 5.init管理用戶空間服務進程 編寫Nginx的systemd配置文件, 實現nginx進 ...
  • 1.訪問官網地址是:MongoDB Download Center | MongoDB,一般下載server的Community 版,對於一般開發人員來說已經夠用了。 2、點擊“DOWNLOAD(tgz)”按鈕,將解壓後的文件放入 /usr/local ,預設情況下在Finder中是看不到 /usr ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...