第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

如:想要建立 username 、password 、register name 要怎樣的代碼 ?

如:想要建立 username 、password 、register name 要怎樣的代碼 ?

紫衣仙女 2022-05-01 16:11:29
我用的是 MySQL 5.0 數(shù)據(jù)庫。請問怎么才能在MySQL 數(shù)據(jù)庫添加列 ?如: USERS 表我只能建立 username 列,別的列我不會建立。
查看完整描述

2 回答

?
眼眸繁星

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊

傳統(tǒng)情況

我們先回顧一下,在沒有 "立刻加列" 功能時(shí),加列操作是怎么完成的。我們也借此來熟悉一下本期的圖例:


  • 當(dāng)進(jìn)行 加列操作 時(shí),所有的數(shù)據(jù)行 都必須要 增加一段數(shù)據(jù)(圖中的 列 4 數(shù)據(jù))

  • 如上一期圖解所講,當(dāng)改變數(shù)據(jù)行的長度,就需要 重建表空間(圖中灰藍(lán)的部分為發(fā)生變更的部分)

  • 數(shù)據(jù)字典中的列定義也會被更新

  • 以上操作的問題在于 每次加列 操作都需要重建表空間,這就需要大量 IO以及大量的時(shí)間

    立刻加列

    "立刻加列" 的過程如下圖:

    請點(diǎn)擊輸入圖片描述

    請點(diǎn)擊輸入圖片描述

  • "立刻加列" 時(shí),只會變更數(shù)據(jù)字典中的內(nèi)容,包括:

  • 在列定義中增加 新列的定義

  • 增加 新列的默認(rèn)值

  • "立刻加列" 后,當(dāng)要讀取表中的數(shù)據(jù)時(shí):

  • 由于 "立刻加列" 沒有 變更行數(shù)據(jù),讀取的行數(shù)據(jù)只有 3 列

  • MySQL 會將 新增的第 4 列的默認(rèn)值,追加到 讀取的數(shù)據(jù)后

  • 以上過程描述了 如何讀取 在 "立刻加列" 之前寫入的數(shù)據(jù),其實(shí)質(zhì)是:在讀取數(shù)據(jù)的過程中,"偽造" 了一個(gè)新列出來

    那么如何讀取 在 "立刻加列" 之后 寫入的數(shù)據(jù)呢 ? 過程如下圖:

    當(dāng)讀取 行 4 時(shí):

    請點(diǎn)擊輸入圖片描述

    請點(diǎn)擊輸入圖片描述

  • 通過判斷 數(shù)據(jù)行的頭信息中的instant 標(biāo)志位,可以知道該行的格式是 "新格式":該行頭信息后有一個(gè)新字段 "列數(shù)"

  • 通過讀取 數(shù)據(jù)行的 "列數(shù)" 字段,可以知道 該行數(shù)據(jù)中多少列有 "真實(shí)" 的數(shù)據(jù),從而按列數(shù)讀取數(shù)據(jù)

  • 通過上圖可以看到:讀取 在"立刻加列" 前/后寫入的數(shù)據(jù)是不同的流程

    通過以上的討論,我們可以總結(jié) "立刻加列" 之所以高效的原因是:

  • 在執(zhí)行 "立刻加列" 時(shí),不變更數(shù)據(jù)行的結(jié)構(gòu)

  • 讀取 "舊" 數(shù)據(jù)時(shí),"偽造" 新增的列,使結(jié)果正確

  • 寫入 "新" 數(shù)據(jù)時(shí),使用了新的數(shù)據(jù)格式(增加了instant標(biāo)志位 和 "列數(shù)" 字段),以區(qū)分新舊數(shù)據(jù)

  • 讀取 "新" 數(shù)據(jù)時(shí),可以如實(shí)讀取數(shù)據(jù)

  • 那么 我們是否能一直 "偽造" 下去 ? "偽造" 何時(shí)會被拆穿 ?

    考慮以下場景:

  • 用 "立刻加列" 增加列 A

  • 寫入數(shù)據(jù)行 1

  • 用 "立刻加列" 增加列 B

  • 寫入數(shù)據(jù)行 2

  • 刪除列 B

  • 我們推測一下 "刪除列 B" 的最小代價(jià):需要修改 數(shù)據(jù)行中的instant標(biāo)志位或 "列數(shù)" 字段,這至少會影響到 "立刻加列" 之后寫入的數(shù)據(jù)行,成本類似于重建數(shù)據(jù)

    從以上推測可知:當(dāng)出現(xiàn) 與 "立刻加列" 操作不兼容 的 DDL 操作時(shí),數(shù)據(jù)表需要進(jìn)行重建,如下圖所示:

    請點(diǎn)擊輸入圖片描述

    請點(diǎn)擊輸入圖片描述

    擴(kuò)展思考題:是否能設(shè)計(jì)其他的數(shù)據(jù)格式,取代instant標(biāo)志位和 "列數(shù)" 字段,使得 加列/刪列 操作都能 "立刻完成" ?(提示:考慮 加列 - 刪列 - 再加列 的情況)

    使用限制

    在了解原理之后,我們來看看 "立刻加列" 的使用限制,就很容易能理解其中的前兩項(xiàng):

  • "立刻加列" 的加列位置只能在表的最后,而不能加在其他列之間
    在元數(shù)據(jù)中,只記錄了 數(shù)據(jù)行 應(yīng)有多少列,而沒有記錄 這些列 應(yīng)出現(xiàn)的位置。所以無法實(shí)現(xiàn)指定列的位置

  • "立刻加列" 不能添加主鍵列
    加列 不能涉及聚簇索引的變更,否則就變成了 "重建" 操作,不是 "立刻" 完成了

  • "立刻加列"不支持壓縮的表格式
    按照 WL 的說法:"COMPRESSED is no need to supported"(沒必要支持不怎么用的格式)

  • 總結(jié)回顧

    我們總結(jié)一下上面的討論:

  • "立刻加列" 之所以高效的原因是:

  • 在執(zhí)行 "立刻加列" 時(shí),不變更數(shù)據(jù)行的結(jié)構(gòu)

  • 讀取 "舊" 數(shù)據(jù)時(shí),"偽造" 新增的列,使結(jié)果正確

  • 寫入 "新" 數(shù)據(jù)時(shí),使用了新的數(shù)據(jù)格式 (增加了 instant 標(biāo)志位 和 "列數(shù)" 字段),以區(qū)分新舊數(shù)據(jù)

  • 讀取 "新" 數(shù)據(jù)時(shí),可以如實(shí)讀取數(shù)據(jù)

  • "立刻加列" 的 "偽造" 手法,不能一直維持下去。當(dāng)發(fā)生 與 "立刻加列" 操作不兼容 的 DDL 時(shí),表數(shù)據(jù)就會發(fā)生重建

  • 回到之前遺留的兩個(gè)問題:

  • "立刻加列" 是如何工作的 ?

    我們已經(jīng)解答了這個(gè)問題

  • 所謂 "立刻加列" 是否完全不影響業(yè)務(wù),是否是真正的 "立刻" 完成 ?

    可以看到:就算是 "立刻加列",也需要變更 數(shù)據(jù)字典,那么 該上的鎖還是逃不掉的。也就是說 這里的 "立刻" 指的是 "不變更數(shù)據(jù)行的結(jié)構(gòu)",而并非指 "零成本地完成任務(wù)"



查看完整回答
反對 回復(fù) 2022-05-04
?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊

ALTER TABLE `users` ADD `username` TEXT NOT NULL ,
ADD `password` TEXT NOT NULL ,
ADD `register_name ` TEXT NOT NULL
其中 TEXT 表示字段的數(shù)據(jù)類型是TEXT;
NOT NULL 表示字段不為空

查看完整回答
反對 回復(fù) 2022-05-04
  • 2 回答
  • 0 關(guān)注
  • 221 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號