Jex’s Note

DB 相關

ACID

  • 原子性 (atomicity, 或稱不可分割性) : 一個交易(transaction)中的所有操作,要就全部完成,不然就全部不完成,不會結束在中間某個環節。事務執行過程中其中一個環境發生錯誤,會被回滾(Rollback)到一開始的狀態,就像事務從來沒有執行過一樣。
  • 一致性 (consistency) : 在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。
  • 隔離性 (isolation, 又稱獨立性) : 隔離性:當兩個或者多個事務並發訪問(此處訪問指查詢和修改的操作)資料庫的同一數據時所表現出的相互關係。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串列>化(Serializable)。
  • 持久性 (durability) : 持久性:在事務完成以後,該事務對資料庫所作的更改便持久地保存在資料庫之中,並且是完全的。

MySQL InnoDB vs MyIsam

  • InnoDB 支援 transaction
  • InnoDB 支援 row lock
  • InnoDB 不需要等 row 上的 lock 釋放就可以讀取 row 上的 snapshot

MySQL int length

型態                Byte(s)     預設長度    範圍                                        Unsigned
---------------------------------------------------------------------------------------------------------------
TINYINT[(長度)]     1           4           -128~127                                    0~255 (unisgned 的預設長度會是 3, 因為沒有負號, 最多就 3 位數)
SMALLINT[(長度)]    2           6           -32768~32767                                0~65535
MEDIUMINT[(長度)]   3           9           -8388608~8388607                            0~16777215
INT[(長度)]         4           11          -2147683648~2147683647                      0~4294967295
BIGINT[(長度)]      8           20          -9223372036854775808~9223372036854775807    0~18446744073709551615

MySQL Char vs Varchar 比較

官方詳細說明 : https://dev.mysql.com/doc/refman/5.7/en/char.html

如果字串長度都固定的話使用 char, mysql 會分配固定的 bytes 儲存它

如果字串長度不固定使用 varchar, mysql 會分配浮動的 bytes + 長度 byte 給它, 而長度 byte 有可能是 1 byte 或 2 bytes, 取決於儲存的 bytes 有沒有超過 255 bytes

e.g. 如果儲存 ‘abcd’ 會用到幾 bytes?

  • char : 4 bytes
  • varchar : 4 + 1 bytes

e.g. 如果儲存 ‘abcd..(略)…’, 假設共有256個字元, 會用到幾 bytes?

  • char : 256 bytes
  • varchar : 256 + 2 bytes

Comments