MySQL基礎(chǔ)知識(shí)

1.數(shù)據(jù)庫(kù)術(shù)語(yǔ)
數(shù)據(jù)庫(kù)(database):保存有組織的數(shù)據(jù)的容器
數(shù)據(jù)表(table):某種特定類(lèi)型數(shù)據(jù)的結(jié)構(gòu)化清單
模式(schema):關(guān)于數(shù)據(jù)庫(kù)和表的布局及特性信息。模式定義了數(shù)據(jù)在表中如何存儲(chǔ),包含存儲(chǔ)什么樣的數(shù)據(jù),數(shù)據(jù)如何分解,各部分是信息如何命名等信息。數(shù)據(jù)庫(kù)和表都有模式。
列(column):表中的一個(gè)字段,所有表都是由一個(gè)或多個(gè)列組成。
行(row):表中的一個(gè)記錄。
主鍵(primary key):一列或一組列,其值能夠唯一區(qū)分表中每個(gè)行(主鍵列不允許Null)。

  1. SQL語(yǔ)法要點(diǎn)
    語(yǔ)句不區(qū)分大小寫(xiě),表名、列名、值是否區(qū)分,依賴具體的DBMS配置。
    多條語(yǔ)句以分號(hào)分隔。
    處理SQL語(yǔ)句時(shí),所有空格都被忽略。SQL語(yǔ)句可以寫(xiě)成一行,也可以寫(xiě)成多行。
    SQL支持3種注釋?zhuān)?# -- /*
  2. 數(shù)據(jù)定義語(yǔ)言(DDL)
    Data Definition Language是SQL中負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)定義與數(shù)據(jù)對(duì)象定義的語(yǔ)言,主要功能是定義數(shù)據(jù)庫(kù)對(duì)象,核心指令是CREATE、 ALTER、DROP
  3. 數(shù)據(jù)操縱語(yǔ)言(DML)
    Data Manipulation Language是用于數(shù)據(jù)庫(kù)操作,對(duì)數(shù)據(jù)庫(kù)其中的對(duì)象和數(shù)據(jù)運(yùn)行訪問(wèn)工作。主要功能是訪問(wèn)數(shù)據(jù),核心指令是INSERT、UPDATE、DELETE、SELECT。這四個(gè)指令合稱(chēng)CRUD(create,read,update,delete)。
  4. 事務(wù)控制語(yǔ)言(TCL)
    Transaction Control Language用于管理數(shù)據(jù)庫(kù)中的事務(wù),用于管理DML語(yǔ)句所做的更改,允許將語(yǔ)句分組為邏輯事務(wù),核心指令是COMMIT、ROLLBACK。
  5. 數(shù)據(jù)控制語(yǔ)言(DCL)
    Data Control Language是可對(duì)數(shù)據(jù)訪問(wèn)權(quán)進(jìn)行控制的指令,核心指令是GRANT、REVOKE??梢钥刂朴脩舻娜缦略L問(wèn)權(quán)限:CONNECT, SELECT, INSERT, UPDATE, DELETE, EXECUTE, USAGE, REFERENCES。
  6. 增刪改查
    插入數(shù)據(jù)
INSERT INTO user VALUES (10, 'root', 'root'); ## 插入完整的行
INSERT INTO user (username, password, email) VALUES ('admin', 'admin', 'xx@126.com'); ##插入行的一部分
INSERT INTO user(username) SELECT name FROM account;  ##插入查詢出來(lái)的數(shù)據(jù)

更新數(shù)據(jù)

UPDATE user SET username = 'robot', password = 'robot' where username = 'root';

刪除數(shù)據(jù)

DELETE FROM user WHERE username = 'robot';  ## 刪除指定數(shù)據(jù)
TRUNCATE TABLE user;  ## 清空所有行

查詢數(shù)據(jù)

SELECT prod_name FROM products;  ## 查詢單列
SELECT prod_id, prod_name, prod_price FROM products;  ## 查詢多列
SELECT * FROM products;  ## 查詢所有列
SELECT DISTINCT vend_id FROM products;  ## 查詢不同的值,distinct作用于所有列,所有列的值都相同才算相同
limit 5  ## 返回結(jié)果不多于5
limit 3,4  ## 返回從第3行開(kāi)始的4行(mysql檢索出的行數(shù)從0開(kāi)始)
limit 4 offset 3  ## 返回從第3行開(kāi)始的4行
  1. 子查詢
    子查詢可以用比較運(yùn)算符,如<,>,=。子查詢必須用圓括號(hào)()括起來(lái)。
    IN在WHERE子句中使用,作用是在指定的幾個(gè)特定值中任選一個(gè)值。
    BETWEEN在WHERE子句中使用,作用是取介于某范圍內(nèi)的值。
    AND、OR、NOT是用于對(duì)過(guò)濾條件的邏輯處理指令。AND優(yōu)先級(jí)高于OR。
    LIKE在WHERE子句中使用,用于確認(rèn)字符串是否匹配模式。只用文本值才能使用LIKE,支持%和通配符。通配符位于開(kāi)頭會(huì)匹配非常慢。%表示字符出現(xiàn)任意次數(shù),表示任何字符出現(xiàn)一次。
LIKE '[sad]%'  ## 以s, a, d開(kāi)頭
LIKE '[!sad]%'  ## 不以s, a, d開(kāi)頭
LIKE '[^sad]%'  ## 不以s, a, d開(kāi)頭
  1. 連接:連接可以替換子查詢,并且比子查詢效率一般要快。
    內(nèi)連接:使用INNER JOIN關(guān)鍵字,條件語(yǔ)句用ON,沒(méi)有條件語(yǔ)句的情況下返回笛卡爾積。
SELECT vend_name, prod_name, prod_price FROM vendors INNER JOIN products ON vendors.vend_id = products.vend_id;

自然連接:自動(dòng)連接所有同名列。

SELECT * FROM products NATURAL JOIN customers;

左連接:保留左表沒(méi)有關(guān)聯(lián)的行。

SELECT customers.cust_id, orders.order_num FROM customers LEFT JOIN orders ON customers.cust_id = orders.cust_id;

右連接:保留右表沒(méi)有關(guān)聯(lián)的行。

SELECT customers.cust_id, orders.order_num FROM customers RIGHT JOIN orders ON customers.cust_id = orders.cust_id;
  1. 組合(UNION)
    UNION運(yùn)算符將兩個(gè)或更多查詢的結(jié)果組合起來(lái)并生成一個(gè)結(jié)果集。
    基本規(guī)則:
    所有查詢的列數(shù)和列順序必須相同
    每個(gè)查詢中涉及表的列的數(shù)據(jù)類(lèi)型必須相同或兼容。
    通常返回的列名取自第一個(gè)查詢。
    默認(rèn)會(huì)去除相同行,如需保留相同行,使用UNION ALL。
    只能包含一個(gè)ORDER BY子句,并且必須位于語(yǔ)句的最后。
SELECT cust_name, cust_contact, cust_email
FROM customers
WHERE cust_state IN ('IL', 'IN', 'MI')
UNION
SELECT cust_name, cust_contact, cust_email
FROM customers
WHERE cust_name = 'Fun4All';

JOIN和UNION
JOIN中連接表的列可能不同,UNION所有查詢的列數(shù)和列順序必須相同。
UNION將查詢之后的行放在一起(垂直放置),JOIN將查詢之后的列放在一起(水平放置)。

  1. 函數(shù)
    | 函數(shù) | 說(shuō)明 |
    | ---- | ---- |
    | LEFT(), RIGHT() | 左邊或者右邊的字符 |
    | LOWER(), UPPER() | 轉(zhuǎn)換為小寫(xiě)或者大寫(xiě) |
    | LTRIM, RTIM() | 去除左邊或者右邊的空格 |
    | LENGTH() | 長(zhǎng)度 |
    | SOUNDEX() | 轉(zhuǎn)換為語(yǔ)音值 |
SELECT * FROM mytable WHERE SOUNDEX(col1) = SOUNDEX('apple')  ## 查詢col1列中有發(fā)音類(lèi)似apple的值
  1. 選擇數(shù)據(jù)庫(kù):USE database。
  2. 查看數(shù)據(jù)庫(kù):SHOW DATABASES。
  3. 查看表:SHOW TABLES。
  4. 查看表說(shuō)明
    SHOW COLUMNS FROM tablename;
    DESCRIBE tablename;
    DESC tablename;
  1. 空值檢查:使用is NULL,匹配條件過(guò)濾時(shí)不返回具有NULL值的行。
  2. 查詢語(yǔ)句中先分組還是先排序?
    先分組,Group By 和 Having, Where ,Order by這些關(guān)鍵字是按照如下順序進(jìn)行執(zhí)行的:Where, Group By, Having, Order by
最后編輯于
?著作權(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)容

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