【數(shù)據(jù)庫(kù)】MySQL 基本操作

1.數(shù)據(jù)庫(kù)操作

/* 數(shù)據(jù)庫(kù)操作 */ ------------------
-- 查看當(dāng)前數(shù)據(jù)庫(kù)
    SELECT DATABASE();
-- 顯示當(dāng)前時(shí)間、用戶名、數(shù)據(jù)庫(kù)版本
    SELECT now(), user(), version();
-- 創(chuàng)建庫(kù)
    CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫(kù)名 數(shù)據(jù)庫(kù)選項(xiàng)
    數(shù)據(jù)庫(kù)選項(xiàng):
        CHARACTER SET charset_name
        COLLATE collation_name
-- 查看已有庫(kù)
    SHOW DATABASES [LIKE 'PATTERN']
-- 查看當(dāng)前庫(kù)信息
    SHOW CREATE DATABASE 數(shù)據(jù)庫(kù)名
-- 修改庫(kù)的選項(xiàng)信息
    ALTER DATABASE 庫(kù)名 選項(xiàng)信息
-- 刪除庫(kù)
    DROP DATABASE [IF EXISTS] 數(shù)據(jù)庫(kù)名
        同時(shí)刪除該數(shù)據(jù)庫(kù)相關(guān)的目錄及其目錄內(nèi)容

2.表操作

-- 創(chuàng)建表
    CREATE [TEMPORARY] TABLE [IF NOT EXISTS] [庫(kù)名.]表名 ( 表的結(jié)構(gòu)定義 ) [表選項(xiàng)]
        每個(gè)字段必須有數(shù)據(jù)類型
        最后一個(gè)字段后不能有逗號(hào)
        TEMPORARY 臨時(shí)表,會(huì)話結(jié)束時(shí)表自動(dòng)消失
        對(duì)于字段的定義:
            字段名 數(shù)據(jù)類型 [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string']
-- 表選項(xiàng)
    -- 字符集
        CHARSET = charset_name
        如果表沒(méi)有設(shè)定,則使用數(shù)據(jù)庫(kù)字符集
    -- 存儲(chǔ)引擎
        ENGINE = engine_name
        表在管理數(shù)據(jù)時(shí)采用的不同的數(shù)據(jù)結(jié)構(gòu),結(jié)構(gòu)不同會(huì)導(dǎo)致處理方式、提供的特性操作等不同
        常見(jiàn)的引擎:InnoDB MyISAM Memory/Heap BDB Merge Example CSV MaxDB Archive
        不同的引擎在保存表的結(jié)構(gòu)和數(shù)據(jù)時(shí)采用不同的方式
        MyISAM表文件含義:.frm表定義,.MYD表數(shù)據(jù),.MYI表索引
        InnoDB表文件含義:.frm表定義,表空間數(shù)據(jù)和日志文件
        SHOW ENGINES -- 顯示存儲(chǔ)引擎的狀態(tài)信息
        SHOW ENGINE 引擎名 {LOGS|STATUS} -- 顯示存儲(chǔ)引擎的日志或狀態(tài)信息
    -- 自增起始數(shù)
        AUTO_INCREMENT = 行數(shù)
    -- 數(shù)據(jù)文件目錄
        DATA DIRECTORY = '目錄'
    -- 索引文件目錄
        INDEX DIRECTORY = '目錄'
    -- 表注釋
        COMMENT = 'string'
    -- 分區(qū)選項(xiàng)
        PARTITION BY ... (詳細(xì)見(jiàn)手冊(cè))
-- 查看所有表
    SHOW TABLES [LIKE 'pattern']
    SHOW TABLES FROM  庫(kù)名
-- 查看表結(jié)構(gòu)
    SHOW CREATE TABLE 表名 (信息更詳細(xì))
    DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN']
    SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
-- 修改表
    -- 修改表本身的選項(xiàng)
        ALTER TABLE 表名 表的選項(xiàng)
        eg: ALTER TABLE 表名 ENGINE=MYISAM;
    -- 對(duì)表進(jìn)行重命名
        RENAME TABLE 原表名 TO 新表名
        RENAME TABLE 原表名 TO 庫(kù)名.表名 (可將表移動(dòng)到另一個(gè)數(shù)據(jù)庫(kù))
        -- RENAME可以交換兩個(gè)表名
    -- 修改表的字段機(jī)構(gòu)(13.1.2. ALTER TABLE語(yǔ)法)
        ALTER TABLE 表名 操作名
        -- 操作名
            ADD [COLUMN] 字段定義       -- 增加字段
                AFTER 字段名          -- 表示增加在該字段名后面
                FIRST               -- 表示增加在第一個(gè)
            ADD PRIMARY KEY(字段名)   -- 創(chuàng)建主鍵
            ADD UNIQUE [索引名] (字段名)-- 創(chuàng)建唯一索引
            ADD INDEX [索引名] (字段名) -- 創(chuàng)建普通索引
            DROP [COLUMN] 字段名      -- 刪除字段
            MODIFY [COLUMN] 字段名 字段屬性     -- 支持對(duì)字段屬性進(jìn)行修改,不能修改字段名(所有原有屬性也需寫(xiě)上)
            CHANGE [COLUMN] 原字段名 新字段名 字段屬性      -- 支持對(duì)字段名修改
            DROP PRIMARY KEY    -- 刪除主鍵(刪除主鍵前需刪除其AUTO_INCREMENT屬性)
            DROP INDEX 索引名 -- 刪除索引
            DROP FOREIGN KEY 外鍵    -- 刪除外鍵
-- 刪除表
    DROP TABLE [IF EXISTS] 表名 ...
-- 清空表數(shù)據(jù)
    TRUNCATE [TABLE] 表名
-- 復(fù)制表結(jié)構(gòu)
    CREATE TABLE 表名 LIKE 要復(fù)制的表名
-- 復(fù)制表結(jié)構(gòu)和數(shù)據(jù)
    CREATE TABLE 表名 [AS] SELECT * FROM 要復(fù)制的表名
-- 檢查表是否有錯(cuò)誤
    CHECK TABLE tbl_name [, tbl_name] ... [option] ...
-- 優(yōu)化表
    OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...
-- 修復(fù)表
    REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]
-- 分析表
    ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...

3.數(shù)據(jù)操作

-- 增
    INSERT [INTO] 表名 [(字段列表)] VALUES (值列表)[, (值列表), ...]
        -- 如果要插入的值列表包含所有字段并且順序一致,則可以省略字段列表。
        -- 可同時(shí)插入多條數(shù)據(jù)記錄!
        REPLACE 與 INSERT 完全一樣,可互換。
    INSERT [INTO] 表名 SET 字段名=值[, 字段名=值, ...]
-- 查
    SELECT 字段列表 FROM 表名[ 其他子句]
        -- 可來(lái)自多個(gè)表的多個(gè)字段
        -- 其他子句可以不使用
        -- 字段列表可以用*代替,表示所有字段
-- 刪
    DELETE FROM 表名[ 刪除條件子句]
        沒(méi)有條件子句,則會(huì)刪除全部
-- 改
    UPDATE 表名 SET 字段名=新值[, 字段名=新值] [更新條件]

/* SELECT */ ------------------
SELECT [ALL|DISTINCT] select_expr FROM -> WHERE -> GROUP BY [合計(jì)函數(shù)] -> HAVING -> ORDER BY -> LIMIT
① select_expr
    -- 可以用 * 表示所有字段。
        select * from tb;
    -- 可以使用表達(dá)式(計(jì)算公式、函數(shù)調(diào)用、字段也是個(gè)表達(dá)式)
        select stu, 29+25, now() from tb;
    -- 可以為每個(gè)列使用別名。適用于簡(jiǎn)化列標(biāo)識(shí),避免多個(gè)列標(biāo)識(shí)符重復(fù)。
        - 使用 as 關(guān)鍵字,也可省略 as.
        select stu+10 as add10 from tb;
② FROM 子句
    用于標(biāo)識(shí)查詢來(lái)源。
    -- 可以為表起別名。使用as關(guān)鍵字。
        SELECT * FROM tb1 AS tt, tb2 AS bb;
    -- from子句后,可以同時(shí)出現(xiàn)多個(gè)表。
        -- 多個(gè)表會(huì)橫向疊加到一起,而數(shù)據(jù)會(huì)形成一個(gè)笛卡爾積。
        SELECT * FROM tb1, tb2;
    -- 向優(yōu)化符提示如何選擇索引
        USE INDEX、IGNORE INDEX、FORCE INDEX
        SELECT * FROM table1 USE INDEX (key1,key2) WHERE key1=1 AND key2=2 AND key3=3;
        SELECT * FROM table1 IGNORE INDEX (key3) WHERE key1=1 AND key2=2 AND key3=3;
③ WHERE 子句
    -- 從from獲得的數(shù)據(jù)源中進(jìn)行篩選。
    -- 整型1表示真,0表示假。
    -- 表達(dá)式由運(yùn)算符和運(yùn)算數(shù)組成。
        -- 運(yùn)算數(shù):變量(字段)、值、函數(shù)返回值
        -- 運(yùn)算符:
            =, <=>, <>, !=, <=, <, >=, >, !, &&, ||,
            in (not) null, (not) like, (not) in, (not) between and, is (not), and, or, not, xor
            is/is not 加上ture/false/unknown,檢驗(yàn)?zāi)硞€(gè)值的真假
            <=>與<>功能相同,<=>可用于null比較
④ GROUP BY 子句, 分組子句
    GROUP BY 字段/別名 [排序方式]
    分組后會(huì)進(jìn)行排序。升序:ASC,降序:DESC
    以下[合計(jì)函數(shù)]需配合 GROUP BY 使用:
    count 返回不同的非NULL值數(shù)目  count(*)、count(字段)
    sum 求和
    max 求最大值
    min 求最小值
    avg 求平均值
    group_concat 返回帶有來(lái)自一個(gè)組的連接的非NULL值的字符串結(jié)果。組內(nèi)字符串連接。
⑤ HAVING 子句,條件子句
    與 where 功能、用法相同,執(zhí)行時(shí)機(jī)不同。
    where 在開(kāi)始時(shí)執(zhí)行檢測(cè)數(shù)據(jù),對(duì)原數(shù)據(jù)進(jìn)行過(guò)濾。
    having 對(duì)篩選出的結(jié)果再次進(jìn)行過(guò)濾。
    having 字段必須是查詢出來(lái)的,where 字段必須是數(shù)據(jù)表存在的。
    where 不可以使用字段的別名,having 可以。因?yàn)閳?zhí)行WHERE代碼時(shí),可能尚未確定列值。
    where 不可以使用合計(jì)函數(shù)。一般需用合計(jì)函數(shù)才會(huì)用 having
    SQL標(biāo)準(zhǔn)要求HAVING必須引用GROUP BY子句中的列或用于合計(jì)函數(shù)中的列。
⑥ ORDER BY 子句,排序子句
    order by 排序字段/別名 排序方式 [,排序字段/別名 排序方式]...
    升序:ASC,降序:DESC
    支持多個(gè)字段的排序。
⑦ LIMIT 子句,限制結(jié)果數(shù)量子句
    僅對(duì)處理好的結(jié)果進(jìn)行數(shù)量限制。將處理好的結(jié)果的看作是一個(gè)集合,按照記錄出現(xiàn)的順序,索引從0開(kāi)始。
    limit 起始位置, 獲取條數(shù)
    省略第一個(gè)參數(shù),表示從索引0開(kāi)始。limit 獲取條數(shù)
⑧ DISTINCT, ALL 選項(xiàng)
    distinct 去除重復(fù)記錄
    默認(rèn)為 all, 全部記錄

/* JOIN  */ ------------------
    將多個(gè)表的字段進(jìn)行連接,可以指定連接條件。
-- 內(nèi)連接(inner join)
    - 默認(rèn)就是內(nèi)連接,可省略inner。
    - 只有數(shù)據(jù)存在時(shí)才能發(fā)送連接。即連接結(jié)果不能出現(xiàn)空行。
    on 表示連接條件。其條件表達(dá)式與where類似。也可以省略條件(表示條件永遠(yuǎn)為真)
    也可用where表示連接條件。
    還有 using, 但需字段名相同。 using(字段名)
    -- 交叉連接 cross join
        即,沒(méi)有條件的內(nèi)連接。
        select * from tb1 cross join tb2;
-- 外連接(outer join)
    - 如果數(shù)據(jù)不存在,也會(huì)出現(xiàn)在連接結(jié)果中。
    -- 左外連接 left join
        如果數(shù)據(jù)不存在,左表記錄會(huì)出現(xiàn),而右表為null填充
    -- 右外連接 right join
        如果數(shù)據(jù)不存在,右表記錄會(huì)出現(xiàn),而左表為null填充
-- 自然連接(natural join)
    自動(dòng)判斷連接條件完成連接。
    相當(dāng)于省略了using,會(huì)自動(dòng)查找相同字段名。
    natural join
    natural left join
    natural right join
select info.id, info.name, info.stu_num, extra_info.hobby, extra_info.sex from info, extra_info where info.stu_num = extra_info.stu_id;

4.數(shù)據(jù)類型

/* 數(shù)據(jù)類型(列類型) */ ------------------
1. 數(shù)值類型
-- ① 整型 ----------
    類型         字節(jié)     范圍(有符號(hào)位)
    tinyint     1字節(jié)    -128 ~ 127      無(wú)符號(hào)位:0 ~ 255
    smallint    2字節(jié)    -32768 ~ 32767
    mediumint   3字節(jié)    -8388608 ~ 8388607
    int         4字節(jié)
    bigint      8字節(jié)
    int(M)  M表示總位數(shù)
    - 默認(rèn)存在符號(hào)位,unsigned 屬性修改
    - 顯示寬度,如果某個(gè)數(shù)不夠定義字段時(shí)設(shè)置的位數(shù),則前面以0補(bǔ)填,zerofill 屬性修改
        例:int(5)   插入一個(gè)數(shù)'123',補(bǔ)填后為'00123'
    - 在滿足要求的情況下,越小越好。
    - 1表示bool值真,0表示bool值假。MySQL沒(méi)有布爾類型,通過(guò)整型0和1表示。常用tinyint(1)表示布爾型。
-- ② 浮點(diǎn)型 ----------
    類型             字節(jié)     范圍
    float(單精度)     4字節(jié)
    double(雙精度)    8字節(jié)
    浮點(diǎn)型既支持符號(hào)位 unsigned 屬性,也支持顯示寬度 zerofill 屬性。
        不同于整型,前后均會(huì)補(bǔ)填0.
    定義浮點(diǎn)型時(shí),需指定總位數(shù)和小數(shù)位數(shù)。
        float(M, D)     double(M, D)
        M表示總位數(shù),D表示小數(shù)位數(shù)。
        M和D的大小會(huì)決定浮點(diǎn)數(shù)的范圍。不同于整型的固定范圍。
        M既表示總位數(shù)(不包括小數(shù)點(diǎn)和正負(fù)號(hào)),也表示顯示寬度(所有顯示符號(hào)均包括)。
        支持科學(xué)計(jì)數(shù)法表示。
        浮點(diǎn)數(shù)表示近似值。
-- ③ 定點(diǎn)數(shù) ----------
    decimal -- 可變長(zhǎng)度
    decimal(M, D)   M也表示總位數(shù),D表示小數(shù)位數(shù)。
    保存一個(gè)精確的數(shù)值,不會(huì)發(fā)生數(shù)據(jù)的改變,不同于浮點(diǎn)數(shù)的四舍五入。
    將浮點(diǎn)數(shù)轉(zhuǎn)換為字符串來(lái)保存,每9位數(shù)字保存為4個(gè)字節(jié)。
2. 字符串類型
-- ① char, varchar ----------
    char    定長(zhǎng)字符串,速度快,但浪費(fèi)空間
    varchar 變長(zhǎng)字符串,速度慢,但節(jié)省空間
    M表示能存儲(chǔ)的最大長(zhǎng)度,此長(zhǎng)度是字符數(shù),非字節(jié)數(shù)。
    不同的編碼,所占用的空間不同。
    char,最多255個(gè)字符,與編碼無(wú)關(guān)。
    varchar,最多65535字符,與編碼有關(guān)。
    一條有效記錄最大不能超過(guò)65535個(gè)字節(jié)。
        utf8 最大為21844個(gè)字符,gbk 最大為32766個(gè)字符,latin1 最大為65532個(gè)字符
    varchar 是變長(zhǎng)的,需要利用存儲(chǔ)空間保存 varchar 的長(zhǎng)度,如果數(shù)據(jù)小于255個(gè)字節(jié),則采用一個(gè)字節(jié)來(lái)保存長(zhǎng)度,反之需要兩個(gè)字節(jié)來(lái)保存。
    varchar 的最大有效長(zhǎng)度由最大行大小和使用的字符集確定。
    最大有效長(zhǎng)度是65532字節(jié),因?yàn)樵趘archar存字符串時(shí),第一個(gè)字節(jié)是空的,不存在任何數(shù)據(jù),然后還需兩個(gè)字節(jié)來(lái)存放字符串的長(zhǎng)度,所以有效長(zhǎng)度是65535-1-2=65532字節(jié)。
    例:若一個(gè)表定義為 CREATE TABLE tb(c1 int, c2 char(30), c3 varchar(N)) charset=utf8; 問(wèn)N的最大值是多少? 答:(65535-1-2-4-30*3)/3
-- ② blob, text ----------
    blob 二進(jìn)制字符串(字節(jié)字符串)
        tinyblob, blob, mediumblob, longblob
    text 非二進(jìn)制字符串(字符字符串)
        tinytext, text, mediumtext, longtext
    text 在定義時(shí),不需要定義長(zhǎng)度,也不會(huì)計(jì)算總長(zhǎng)度。
    text 類型在定義時(shí),不可給default值
-- ③ binary, varbinary ----------
    類似于char和varchar,用于保存二進(jìn)制字符串,也就是保存字節(jié)字符串而非字符字符串。
    char, varchar, text 對(duì)應(yīng) binary, varbinary, blob.
3. 日期時(shí)間類型
    一般用整型保存時(shí)間戳,因?yàn)镻HP可以很方便的將時(shí)間戳進(jìn)行格式化。
    datetime    8字節(jié)    日期及時(shí)間     1000-01-01 00:00:00 到 9999-12-31 23:59:59
    date        3字節(jié)    日期         1000-01-01 到 9999-12-31
    timestamp   4字節(jié)    時(shí)間戳        19700101000000 到 2038-01-19 03:14:07
    time        3字節(jié)    時(shí)間         -838:59:59 到 838:59:59
    year        1字節(jié)    年份         1901 - 2155
datetime    YYYY-MM-DD hh:mm:ss
timestamp   YY-MM-DD hh:mm:ss
            YYYYMMDDhhmmss
            YYMMDDhhmmss
            YYYYMMDDhhmmss
            YYMMDDhhmmss
date        YYYY-MM-DD
            YY-MM-DD
            YYYYMMDD
            YYMMDD
            YYYYMMDD
            YYMMDD
time        hh:mm:ss
            hhmmss
            hhmmss
year        YYYY
            YY
            YYYY
            YY
4. 枚舉和集合
-- 枚舉(enum) ----------
enum(val1, val2, val3...)
    在已知的值中進(jìn)行單選。最大數(shù)量為65535.
    枚舉值在保存時(shí),以2個(gè)字節(jié)的整型(smallint)保存。每個(gè)枚舉值,按保存的位置順序,從1開(kāi)始逐一遞增。
    表現(xiàn)為字符串類型,存儲(chǔ)卻是整型。
    NULL值的索引是NULL。
    空字符串錯(cuò)誤值的索引值是0。
-- 集合(set) ----------
set(val1, val2, val3...)
    create table tab ( gender set('男', '女', '無(wú)') );
    insert into tab values ('男, 女');
    最多可以有64個(gè)不同的成員。以bigint存儲(chǔ),共8個(gè)字節(jié)。采取位運(yùn)算的形式。
    當(dāng)創(chuàng)建表時(shí),SET成員值的尾部空格將自動(dòng)被刪除。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計(jì)算機(jī)誕生后,數(shù)據(jù)開(kāi)始在計(jì)算機(jī)中存儲(chǔ)并計(jì)算,并設(shè)計(jì)出了數(shù)據(jù)庫(kù)系統(tǒng),數(shù)據(jù)庫(kù)系統(tǒng)解決的問(wèn)題:持久化存儲(chǔ),優(yōu)化讀寫(xiě),保證...
    LittlePy閱讀 846評(píng)論 0 0
  • 一. MySQL事務(wù) 事務(wù):將數(shù)據(jù)庫(kù)從一種一致性狀態(tài)轉(zhuǎn)到另一種一致性狀態(tài) 1.事務(wù)的特性 原子性:事務(wù)中的所有操作...
    月亮是我踢彎得閱讀 528評(píng)論 0 2
  • 一、數(shù)據(jù)庫(kù)存儲(chǔ)引擎(擴(kuò)展) 數(shù)據(jù)庫(kù)存儲(chǔ)引擎是數(shù)據(jù)庫(kù)底層軟件組織,數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)使用數(shù)據(jù)引擎進(jìn)行創(chuàng)建、查...
    Habit_1027閱讀 376評(píng)論 0 3
  • 一、創(chuàng)建數(shù)據(jù)庫(kù) 現(xiàn)在介紹一些創(chuàng)建數(shù)據(jù)庫(kù)的基礎(chǔ)語(yǔ)句: 二、創(chuàng)建表 首先進(jìn)入數(shù)據(jù)庫(kù)容器 創(chuàng)建一個(gè)student表 當(dāng)我...
    小雨Coding閱讀 641評(píng)論 0 1
  • 史上最簡(jiǎn)單的 MySQL 教程>>>MySQL運(yùn)行機(jī)制原理&架構(gòu)>>>觸發(fā)器視圖(上)視圖(下)數(shù)據(jù)備份與還原(上...
    月亮是我踢彎得閱讀 355評(píng)論 0 1

友情鏈接更多精彩內(nèi)容