隨著時間推移,系統需求會發生變化。這可能需要建立新的資料庫、資料表和欄,以及修改現有的資料表結構。根據來源和目標資料類型以及欄中包含的資料,變更欄的資料類型可能是一項簡單的操作,也可能是一項困難的操作。本篇文章將介紹在變更欄資料類型時遇到的一些常見挑戰,以及你可以用來促進此過程的策略。
ALTER TABLE 陳述式
我們可以使用 ALTER TABLE 陳述式變更現有資料表的結構(結構描述)。它是一個資料定義語言(Data Definition Language,DDL)陳述式,就像 CREATE TABLE、DROP 函式和 GRANT 一樣。它的基本語法是:
ALTER TABLE table_to_change what_to_change (additional_arguments)
ALTER TABLE 陳述式可用於變更各種資料表內容,從變更資料表名稱到加入、刪除和修改欄。
一句陳述式,不同的語法
你可能已經注意到,在第一行之後,ALTER TABLE 陳述式的語法變得非常模糊。這是因為它因供應商而異。例如:
在 SQL Server 中
ALTER TABLE table_name ALTER COLUMN column_name column_type;
在 PostgreSQL 中
ALTER TABLE table_name ALTER COLUMN column_name TYPE column_definition;
在 Oracle、MySQL 和 MariaDB 中
ALTER TABLE table_name MODIFY column_name column_type;
一個簡單的範例
有些資料庫(如 Oracle)不允許對包含資料的資料表執行 ALTER 査詢。如果執行此操作,將出現如下錯誤:
Error report: SQL Error: ORA-01439: column to be modified must be empty to change datatype 01439. 00000 – “column to be modified must be empty to change datatype”
但是,大多數資料庫類型都允許你變更已填入資料的資料表。
以下是 Navicat Premium 資料表設計器,顯示了一個 MySQL 資料表的欄定義:
我們可以執行 ALTER TABLE 陳述式,將 name (VARCHAR) 列的容量增加至 255 個字元:
將欄從 VARCHAR 轉換為 INT
看到包含數字資料的 VARCHAR 欄並不罕見。在某些情況下,將其類型變更為數字類型可能是有利的。在 Navicat 中,我們可以從下拉式清單中選擇來設定欄的類型:
按一下「儲存」按鈕後將儲存變更。如果你忘記了,Navicat 將在你關閉資料表設計器時提示你儲保變更。
資料截斷錯誤
你應該盡可能避免減少欄資料類型的大小;否則,將出現資料截斷錯誤,例如:
#1265 - Data truncated for column 'name' at row 2
處理此錯誤沒有硬性的規則,但通常,你可以自己更新有問題的值,然後重新執行 ALTER TABLE 陳述式。例如,以下陳述式將所有 name 值截斷為 10 個字元:
總結
本文概述了在變更欄資料類型方面的一些常見挑戰,以及你可以用來促進此過程的策略。
如果你對 Navicat Premium 感興趣,可以免費試用 14 天!
Rob Gravelle 居住於加拿大渥太華,是一名有 20 多年經驗的 IT 專家。過住,Rob 曾為情報相關的組織(如加拿大邊境服務局和各種商業組織)建置系統。在業餘時間,Rob 是一名出色的吉他演奏家,並擁有多張 CD和數位發行。