MySQL 經常使用命令

大學學的數據庫系統概論工做後幾年沒有使用都已忘了, 如今項目須要用到數據庫, 但來不及細看相關書籍了, 遂將一些經常使用的記錄下來.mysql

經常使用類型

MySQL 支持多種類型, 大體能夠分爲三類: 數值, 日期/時間和字符串(字符)類型, 大體以下:sql

  • 數值類型數據庫

    • 整數: tinyint, smallint, mediumint, int, bigint
    • 浮點數: float, double, decimal
  • 日期和時間

    date, time, datetime, timestamp, yearui

  • 字符串類型code

    • 字符串: char, varchar
    • 文本: tinytext, text, mediumtext, longtext
    • 二進制字符串: tinyblob, blob, mediumblob, longblob

下面將詳細給出每種類型的大小和描述.ci

數值類型

類型 字節 描述
tinyint 1 小整數值
smallint 2 大整數值
mediumint 3 大整數值
int 4 大整數值
bigint 8 極大整數值
float 4 單精度浮點數
double 8 雙精度浮點數
decimal decimal(M,D) 定點數

DECIMAL(M,D) 高精度的數據類型, 經常使用來存儲交易相關的數據字符串

M 表明總精度, N 表明小數點右側的位數. 1 < M < 254, 0 < N < 60, 存儲空間變長it

日期和時間

類型 字節 描述
date 3 精確到年月日, 如: 2016-09-01
time 3 精確到時分秒, 如: 09:10:11
datetime 8 精確到年月日時分秒, 如: 2016-09-01 09:10:11
timedtamp 8 精確到年月日時分秒, 如: 2016-09-01 09:10:11

MySQL 5.6.4 以後, datetimetimestamp 支持到微秒io

timestamp 會根據時區進行轉換, datetime 則不會table

timestamp 存儲範圍: 1970-01-01 00::00:01 ~ 2038-01-19 03:14:07

datetime 的存儲範圍: 1000-01-01 00:00:00 to 9999-12-31 23:59:59

通常使用 timestamp 國際化

如存時間戳使用數字類型 BIGINT

字符串類型

類型 大小 描述
char 最大爲255字符 存儲定長, 容易形成空間的浪費
varchar 能夠超過255個字符 存儲變長,節省存儲空間
text 總大小爲65535字節,約爲64KB 長文本數據

根據 MySQL 版本的不一樣, 類型的大小範圍可能會有改變.

經常使用命令

數據庫

  • 建立

    CREATE DATABASE <name>;

  • 刪除

    DROP DATABASE <name>;

  • 列出數據庫

    show databases;

  • 使用數據庫

    use <name>;

  • 修改 CHARSET

    ALTER DATABASE <name> DEFAULT CHARACTER SET <char name>;

  • 顯示建立類型

    show create database <name>

  • 建立

    CREATE TABLE <name>(`id` INT(11) AUTO_INCREMENT),`name` VARCHAR(64) NOT NULL,...)CHARACTER SET=utf8mb4;

  • 刪除

    DROP TABLE <name>;

  • 插入

    INSERT INTO <name>(filed1, filed2,...) VALUES (value1, value2,...),(value3,value4,...),...;

    可同時插入多條記錄

  • 查詢

    SELECT filed1,filed2,... FROM <name> WHERE <condition>

    多表查詢: SELECT t1.id,t1.name,t2.name AS desc FROM t1,t2 WHERE t1.t2_id=t2.id, 這將會返回兩個表的交集

    多表查詢也可以使用聯合查詢, 聯合查詢詳情見後文.

    使用 LIKE 能夠模糊查詢, % 來表示任意字符, 如: SELECT * FROM <name> WHERE name LIKE '%oy%';

  • 顯示錶

    • 顯示錶字段

      desc <name>

    • 顯示錶建立字段

      show create table <name>

  • 列出表

    show tables;

  • 修改值

    UPDATE <name> SET <filed1>=value1 WHERE <condition>

  • 添加列

    ALTER TABLE <name> ADD `filed1` <type>

  • 刪除列

    ALTER TABLE <name> DROP filed1

  • 修改列類型

    • ALTER TABLE <name> MODIFY filed1 <type>
    • ALTER TABLE <name> CHANGE `filed1` `filed1` <type> 能夠修改列名
  • 修改 CHARSET

    • 修改表的默認 CHARSET

      ALTER TABLE <name> DEFAULT CHARACTER SET utf8mb4

    • 修改表及因此列的字符

      ALTER TABLE <name> CONVERT TO CHARACTER SET utf8mb4

    • 修改列的字符集

      ALTER TABLE <name> CHANGE filed1 CHARACTER SET utf8mb4

備份/恢復

  • 備份

    mysqldump -h<address> --port <port> -u<username> -p<password> <datebase name> <table name> > bak.sql

    其中 table name 可選

  • 恢復

    mysql -h<address> --port <port> -u<username> -p<password> <datebase name> < bak.sql

    導入數據到指定的數據庫中

聯合查詢

假設存在表: user(id, name, email)user_profile(id,uid,avatar), 幾種聯合方式以下:

  • 左聯

    LEFT JOINLEFT OUTER JOIN 返回的結果包含左表中的全部行, 若左行在右行中匹配, 則在對應的右表中顯示爲 NULL

    SELECT * FROM user LEFT JOIN user_profile ON user.id=user_profile.uid

  • 右聯

    RIGHT JOINRIGHT OUTER JOIN 返回的結果包含右表中的全部行, 若左行在右行中匹配, 則在對應的左表中顯示爲 NULL

  • 全聯

    FULL JOINFULL OUTER JOIN 返回左右兩表中的全部行, 若是右表中某行在左表中沒有匹配, 則結果中對應行右表的部分所有爲 NULL;
    若是左表中某行在右表中沒有匹配, 則結果中對應行左表的部分所有爲空 NULL.

  • 內聯

    inner join 是比較運算符, 只返回符合條件的行, 如:

    SELECT * FROM user INNER JOIN user_profile ON user.id=user_profile.uid

    等同於 SELECT * FROM user,user_profile WHERE user.id=user_profile.uid

相關文章
相關標籤/搜索