SQL語法修改資料庫 - ALTER TABLE(變更資料表)

更新於 2024/08/17閱讀時間約 5 分鐘
  • ALTER TABLE: 這個命令是用來修改資料表的結構,例如新增、修改或刪除欄位。它針對的是資料表(table)本身的結構,而不是具體的記錄(record)。
  • INSERT 和 UPDATE: 這兩個命令是用來操作具體的記錄(record)。INSERT 用於新增記錄,而 UPDATE 用於修改現有的記錄。
  • ALTER TABLE 常見的使用情境:

新增欄位:

當需要在現有的資料表中新增一個欄位來儲存新的資訊時,例如新增 city 欄位來記錄使用者的居住地。

修改欄位名稱或型別:

當需要修改欄位的名稱或資料型別時,例如將 last_login 欄位的型別從 DATE 改為 TIMESTAMP 以提高精確度。

刪除欄位:

當某個欄位不再需要時,可以刪除該欄位以節省空間。

修改資料表名稱:

當需要修改資料表的名稱時,可以使用 ALTER TABLE 語法。

※ 新增 Column

語法

raw-image
  • ALTER TABLE table:宣告ALTER TABLE語法後,接指定要修改的資料表。
  • ADD [COLUMN] column_name column_definition:新增一個名為 column_name 的欄位,並定義其資料類型(型別)和屬性(例如 VARCHAR(255) 或 INT)。
  • [FIRST|AFTER existing_column]:選擇性參數,決定新欄位的位置。FIRST 表示將新欄位放在第一個位置,AFTER existing_column 表示將新欄位放在指定欄位之後。若不指定,預設會新增在最後面。

實例

raw-image
raw-image


※ 修改 Column DEFINITION(屬性和資料型別)

語法

raw-image
  • ALTER TABLE table_name:要修改名為 table_name 的資料表。
  • MODIFY column_name column_definition [FIRST | AFTER column_name]:要修改名為 column_name 的欄位,並重新定義其資料類型和屬性(例如 VARCHAR(255) 或 INT)。[FIRST | AFTER column_name] 這是選擇性參數,表示要將修改後的欄位放在資料表中的特定位置。FIRST 表示將欄位放在資料表的第一個位置,而 AFTER column_name 表示將欄位放在指定欄位之後。
  • 這段語法可以包含多個 MODIFY 語句,每個語句用逗號分隔。

實例

raw-image
raw-image



※ 修改 COLUMN 名字

語法

raw-image
  • ALTER TABLE table_name:要修改名為 table_name 的資料表。
  • CHANGE COLUMN original_name new_name column_definition:要將名為 original_name 的欄位改名為 new_name,並重新定義其資料類型和屬性(例如 VARCHAR(255) 或 INT)。
  • [FIRST | AFTER column_name]:這是選擇性參數,表示要將修改後的欄位放在資料表中的特定位置。FIRST 表示將欄位放在資料表的第一個位置,而 AFTER column_name 表示將欄位放在指定欄位之後。

實例

raw-image



※ 刪除 COLUMN

語法

raw-image
  • ALTER TABLE table_name:要修改名為 table_name 的資料表。
  • DROP COLUMN column_name:要刪除名為 column_name 的欄位。

實例

raw-image


※ 改 Table 名字

語法

raw-image
ALTER TABLE table_name
RENAME TO new_table_name
  • ALTER TABLE table_name:要修改名為 table_name 的資料表。
  • RENAME TO new_table_name:要將資料表重新命名為 new_table_name

實例

raw-image


※ MYSQL 和 SQLite 在 ALTER TABLE 的差異

raw-image


SQLite 不支援的指令和功能:

  1. 完整的 ALTER TABLE 支援
    • 只能支援 RENAME TABLE、ADD COLUMN、RENAME COLUMN 和 DROP COLUMN。
    • 不支援 ALTER COLUMN、ADD CONSTRAINT 等其他變更操作。
  2. 修改欄位的資料類型或名稱
    • 無法直接修改欄位的資料類型或名稱。需要通過創建新表、複製數據、刪除舊表並重命名新表來實現。
  3. 刪除欄位
    • 無法直接刪除欄位。需要通過創建新表、複製數據、刪除舊表並重命名新表來實現。
  4. 指定欄位為 PRIMARY KEY 或 UNIQUE
    • 無法在新增欄位時指定該欄位為 PRIMARY KEY 或 UNIQUE。
  5. 完整的觸發器支援
    • 支援 FOR EACH ROW 觸發器,但不支援 FOR EACH STATEMENT 觸發器。
  6. 對 VIEW 的寫操作
    • VIEW 在 SQLite 中是唯讀的,無法執行 DELETE、INSERT 或 UPDATE 操作
  7. GRANT 和 REVOKE
    • 由於 SQLite 是嵌入式資料庫引擎,無法實現 GRANT 和 REVOKE 指令


※ 解決⽅案

創建新 Table :將 Schema 的規格重新定義,再重新創建一個表格。

• 從舊 Table 複製資料 使用 INSERT INTO new_table SELECT … FROM old_table 將資料從舊表複製到新表。

• 刪掉舊 Table

• 把新 Table 改名成原本 Table 的名字

• 萬⼀途中有些指令失敗? 利用Transaction將舊資料救回來!

    全端網頁開發專業知識分享
    留言0
    查看全部
    avatar-img
    發表第一個留言支持創作者!
    ※ 功能: 刪除表格中的資料。 ※ 語法: DELETE ON DELETE CASCADE DELETE JOIN ※ DELETE • 語法 : DELETE FROM table_name WHERE condition FROM 後面接上表格的名字:這是想要刪除資料的表
    ※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
    已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    ※ CTE是什麼? 在 SQL 中,我們經常需要從多個表中提取數據,因此會使用子查詢 (subquery)。為了讓子查詢更易讀並實現遞迴查詢,我們可以使用 Common Table Expression (CTE)。 CTE 是一個「暫存」且「具名」的結果集合,透過 AS 關鍵字將查詢結果暫時儲
    ※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
    ※ 功能: 刪除表格中的資料。 ※ 語法: DELETE ON DELETE CASCADE DELETE JOIN ※ DELETE • 語法 : DELETE FROM table_name WHERE condition FROM 後面接上表格的名字:這是想要刪除資料的表
    ※ 為什麼我們需要 Transaction? 當我們談到 Transaction(交易)時,指的是一組不可分割的 SQL 操作。這些操作結果只能成功或失敗,以確保資料庫的一致性和完整性。Transaction 是資料庫操作中的一個「邏輯單位」,包含多個操作步驟。如果其中任何一個步驟失敗,整個 Tr
    已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    ※ CTE是什麼? 在 SQL 中,我們經常需要從多個表中提取數據,因此會使用子查詢 (subquery)。為了讓子查詢更易讀並實現遞迴查詢,我們可以使用 Common Table Expression (CTE)。 CTE 是一個「暫存」且「具名」的結果集合,透過 AS 關鍵字將查詢結果暫時儲
    ※ 為什麼需要 Subquery? 當⼀個任務需要多個 Query 完成任務,可以使⽤ Subquery 把多個 Query 合併成⼀個 Query。 當我們在進行SQL查詢時,每次查詢都需要在Web Server和資料庫之間來回傳遞資料。這個過程會產生網路延遲,特別是當兩者之間的物理距離較遠時
    你可能也想看
    Google News 追蹤
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
    Thumbnail
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    Thumbnail
    ※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
    Thumbnail
    ※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
    Thumbnail
    ※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
    Thumbnail
    這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
    Thumbnail
    在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
    Thumbnail
    在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
    Thumbnail
    Select the datastore you want to RENAME\rename\Input a new name\done
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為
    Thumbnail
    *合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
    Thumbnail
    已經存在在table裡面的那些record做更新。 ※ 語法 UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, … [WHERE
    Thumbnail
    ※ 把record加到table有兩種方式: VALUES • SELECT ※ 語法 INSERT INTO VALUES 語法: Record 代表一組值的集合,每個值對應到表格中的一個欄位(column)。 INSERT INTO 語法用來指定要插入資料的表格。 需要提供一個
    Thumbnail
    ※ 別名: 目的在於提高SQL查詢的可讀性和簡潔性。 ※ 別名有兩種: Column Alias(列別名):在查詢結果中的某一列,取一個臨時的新名字。 Table Alias(表別名):給查詢中的表取一個短暫的新名字。 ※ Column Alias ※ 為什麼需要 Column A
    Thumbnail
    ※ 什麼是WHERE? 使用 WHERE來設定條件,可以幫助我們縮小查詢結果的範圍,取得想要的結果。 ※ 語法: ※ 解析順序: From:先看是哪一張table→table裡面符合Where指定條件的record→再看Select指定的是那些欄位→再根據那個欄位進行排序。 ※ 使⽤⽅
    Thumbnail
    ※ 語法 SELECT select_list FROM table_name​ ※ 解析順序 From:從哪裡拿? SELECT:要 "拿什麼" 資料? ※ 使用場景: Single column(單一欄位): Multiple column(多個欄位): All colu
    Thumbnail
    這篇文章主要是介紹了SQL查詢效能調校的方法,針對索引最佳化做了整理和分享,並提供了一些注意事項和建議。
    Thumbnail
    在進行SQL查詢邏輯更改時,需要適當地使用SubQuery和join來達到新的排序需求。本文將介紹原本的撈取邏輯、需求以及如何使用SubQuery來解決新的排序需求。
    Thumbnail
    在工作情境中手動執行SQL語法更新中文字時,有時會遇到中文字顯示問號(?)的情況。這篇文章將介紹如何解決手動執行SQL語法時造成中文顯示問號(?)的方法。
    Thumbnail
    Select the datastore you want to RENAME\rename\Input a new name\done
    Thumbnail
    ※ 基本操作:SQL 語法,SELECT, WHERE, CREATE, UPDATE, DELETE。 SELECT:從資料庫中或資料表中指定要選擇的欄位中取得資料,稱之為查詢 (query)。 ※ 語法:要由兩部分構成,第一部分是要 "拿什麼" 資料 (若有多項用逗號隔開);第二部分則為