場景 前些天遇到一個問題,要往線上資料庫中數據量比較大的表格裡添加新的欄位,以及賦上預設值, 執行的時間比較長,如果直接在原表格的基礎上直接執行sql,害怕會將表格甚至是資料庫弄成死鎖。 和團隊兄弟聊了聊找到了一種辦法,不知道的也可以借鑒一下。 解決辦法 複製表結構到臨時表 CREATE TABLE ...
場景
前些天遇到一個問題,要往線上資料庫中數據量比較大的表格裡添加新的欄位,以及賦上預設值,
執行的時間比較長,如果直接在原表格的基礎上直接執行sql,害怕會將表格甚至是資料庫弄成死鎖。
和團隊兄弟聊了聊找到了一種辦法,不知道的也可以借鑒一下。
解決辦法
複製表結構到臨時表
CREATE TABLE t_bdcards_temp LIKE t_bdcards;
給臨時表格添加一個欄位
ALTER TABLE t_bdcards_temp
ADD COLUMN bookId BIGINT (80) NULL
DEFAULT NULL
COMMENT '對應的書籍id' AFTER user_id;
將源表格的數據插入到臨時表格中
INSERT INTO t_bdcards_temp (
card_num,
STATUS,
ctime,
user_id,
bookId
) SELECT
card_num,
STATUS,
ctime,
user_id,
100031
FROM
t_bdcards;
驗證數據是否正確
SELECT
count(id)
FROM
t_bdcards_temp;
SELECT
count(id)
FROM
t_bdcards;
將源表名修改成另外一個名詞
RENAME TABLE t_bdcards TO t_bdcards_blank;
將臨時表格修改成源表格的名稱
RENAME TABLE t_bdcards_temp TO t_bdcards;