柚子快報激活碼778899分享:MySQL學(xué)習(xí)筆記—基礎(chǔ)篇
柚子快報激活碼778899分享:MySQL學(xué)習(xí)筆記—基礎(chǔ)篇
MySQL數(shù)據(jù)庫
關(guān)系型數(shù)據(jù)庫(RDBMS)
概念:建立在關(guān)系模型基礎(chǔ)上,由多張相互連接的二維表組成的數(shù)據(jù)庫
特點:
使用表存儲,格式統(tǒng)一,便于維護使用SQL語言操作,標(biāo)準(zhǔn)統(tǒng)一,使用方便
數(shù)據(jù)模型
安裝好MySQL數(shù)據(jù)庫之后,計算機就成了數(shù)據(jù)庫的服務(wù)器通過客戶端連接MySQL管理系統(tǒng)(DBMS)使用SQL語句通過數(shù)據(jù)庫管理系統(tǒng),創(chuàng)建數(shù)據(jù)庫也可以通過SQL語句,通過數(shù)據(jù)庫管理系統(tǒng),指定某一個數(shù)據(jù)庫,來創(chuàng)建表在一個數(shù)據(jù)庫服務(wù)器當(dāng)中是可以創(chuàng)建多個數(shù)據(jù)庫的在一個數(shù)據(jù)庫當(dāng)中又可以創(chuàng)建多張表
SQL語句
SQL通用語法
SQL語句可以單行或者多行書寫,以分號結(jié)尾SQL語句可以使用空格縮進來增強語句的可讀性MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫注釋:
單行注釋:-- 注釋內(nèi)容 或者 # 注釋內(nèi)容多行注釋:/* 注釋內(nèi)容 */
SQL分類
分類說明DDL (Data Definition Language)數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象(數(shù)據(jù)庫,表,字段)DML (Data Manipulation Language)數(shù)據(jù)操作語言,用來對數(shù)據(jù)庫表中的數(shù)據(jù)進行增刪改DQL (Data Query Language)數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù)庫表中的記錄DCL (Data Control Language)數(shù)據(jù)控制語言,用來創(chuàng)建數(shù)據(jù)庫用戶,控制數(shù)據(jù)庫訪問權(quán)限
DDL
數(shù)據(jù)庫操作
-- 查詢所有數(shù)據(jù)庫
SHOW DATABASES;
-- 查詢當(dāng)前數(shù)據(jù)庫
SELECT DATABASE();
-- 創(chuàng)建數(shù)據(jù)庫,[ ]里面的內(nèi)容是可選的,可以寫也可以不寫
CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫名 [DEFAULT CHARSET 字符集] [COLLATE 排序規(guī)則];
-- [IF NOT EXISTS]:如果數(shù)據(jù)庫名稱不存在則創(chuàng)建,如果存在不執(zhí)行任何操作
-- [DEFAULT CHARSET 字符集]:指定當(dāng)前數(shù)據(jù)庫的字符編碼
-- [COLLATE 排序規(guī)則]:指定對應(yīng)的排序規(guī)則
-- 刪除數(shù)據(jù)庫
DROP DATABASE [IF EXISTS] 數(shù)據(jù)庫名;
-- [IF EXISTS]:如果存在就刪除,不存在,不執(zhí)行任何操作
-- 使用數(shù)據(jù)庫
USE 數(shù)據(jù)庫名;
表操作 - 查詢
-- 查詢當(dāng)前數(shù)據(jù)庫所有表
SHOW TABLES;
-- 查詢表結(jié)構(gòu)
DESC 表名;
-- 查詢指定表的建表語句
SHOW CREATE TABLE 表名;
表操作 - 創(chuàng)建
CREATE TABLE 表名(
字段1 字段類型 [COMMENT 字段注釋],
字段2 字段類型 [COMMENT 字段注釋],
...
字段n 字段類型 [COMMENT 字段注釋]
)[COMMENT 表注釋];
表操作 - 修改
-- 給表結(jié)構(gòu)添加字段
ALTER TABLE 表名 ADD 字段名 類型(長度) [COMMENT 注釋] [約束];
-- 修改數(shù)據(jù)類型
ALTER TABLE 表名 MODIFY 字段名 新數(shù)據(jù)類型(長度);
-- 修改字段名和字段類型
ALTER TABLE 表名 CHANGE 舊字段名 新字段名 類型(長度) [COMMENT 注釋] [約束];
-- 刪除字段
ALTER TABLE 表名 DROP 字段名;
-- 修改表名
ALTER TABLE 表名 RENAME TO 新表名;
-- 刪除表
DROP TABLE [IF EXISTS] 表名;
-- 刪除指定表,并重新創(chuàng)建該表
TRUNCATE TABLE 表名;
DML
對數(shù)據(jù)進行增刪改操作
-- 給指定字段添加數(shù)據(jù)
INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...);
-- 給全部字段添加數(shù)據(jù)
INSERT INTO 表名 VALUES (值1,值2,...);
-- 批量添加數(shù)據(jù)
INSERT INTO 表名(字段1,字段2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
INSERT INTO 表名 VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
-- 修改數(shù)據(jù)
UPDATE 表名 SET 字段1=值1,字段2=值2,... [WHERE 條件];
-- 刪除數(shù)據(jù)
DELETE FROM 表名 [WHERE 條件];
注意:
字符串和日期類型數(shù)據(jù)使用引號包裹起來插入數(shù)據(jù)的大小,應(yīng)該在字段的規(guī)定范圍內(nèi)修改語句的條件可以有,也可以沒有,如果沒有條件,則會修改整張表所有數(shù)據(jù)刪除語句如果沒有設(shè)置條件。則會刪除整張表的數(shù)據(jù)如果要刪除某一個字段的值,可以使用update,把那個值置空
DQL
對數(shù)據(jù)庫中的表進行查詢
基礎(chǔ)查詢
-- 查詢返回多個字段
SELECT 字段1,字段2,... FROM 表名;
-- 查詢返回所有字段
SELECT * FROM 表名;
-- 設(shè)置別名查詢
SELECT 字段1[AS 別名1],字段2[AS 別名2]... FROM 表名;
-- 去除重復(fù)記錄
SELECT DISTINCT 字段列表 FROM 表名;
條件查詢
SELECT 字段列表 FROM 表名 WHERE 條件列表;
比較運算符功能>大于<小于>=大于等于<=小于等于=等于<> 或 !=不等于BETWEEN…AND…在某個范圍之內(nèi)(含最小,最大值)IN(…)在in之后的列表中的值,多選一LIKE 占位符模糊匹配 ( _匹配單個字符,%匹配任意個字符 )IS NULL是null邏輯運算符AND 或 &&并且,(多個條件同時成立)OR 或 ||或者,(多個條件任意一個成立)NOT 或 !非,不是
聚合函數(shù):將一列數(shù)據(jù)作為一個整體,進行縱向計算
SELECT 聚合函數(shù)(字段列表) FROM 表名;
函數(shù)功能count統(tǒng)計數(shù)量max最大值min最小值avg平均值sum求和
注意:所有null不參與計算
分組查詢
SELECT 字段列表 FROM 表名 [WHERE 條件] GROUP BY 分組字段名 [HAVING 分組后過濾條件];
注意:where 與 having區(qū)別
執(zhí)行時機不同:where是分組前進行過濾,不滿足where條件,不參與分組,having是分組之后對結(jié)果進行過濾判斷條件不同:where不能對聚合函數(shù)進行判斷,而having可以執(zhí)行順序:where > 聚合函數(shù) > having分組之后,查詢的字段一般為聚合函數(shù)和分組字段,查詢其他字段無任何意義
排序查詢
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式,字段2 排序方式2,...;
注意:
排序方式
ASC:升序(默認值)DESC:降序 如果是多字段排序,當(dāng)?shù)匾粋€字段值相同時,才會根據(jù)第二個字段進行排序
分頁查詢
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查詢記錄數(shù);
注意:
起始索引從0開始,起始索引 = (查詢頁碼 - 1) 每頁顯示記錄數(shù)*分頁查詢是數(shù)據(jù)庫的方言,不同的數(shù)據(jù)庫有不同的表現(xiàn),MySQL 中是 LIMIT如果查詢的是第一頁數(shù)據(jù),起始索引可以省略,直接簡寫為 LIMIT 10
DCL
用戶管理
-- 查詢用戶
USE mysql;
SELECT * FROM user;
-- 創(chuàng)建用戶
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
-- 修改用戶密碼
ALTER USER '用戶名'@'主機名' IDENTIFIED WHIT mysql_native_password BY '新密碼';
-- 刪除用戶
DROP USER '用戶名'@'主機名';
注意:
主機名可以使用 % 通配這類SQL開發(fā)人員操作的比較少,主要是DBA(數(shù)據(jù)庫管理員)使用
權(quán)限控制
-- 查詢權(quán)限
SHOW GRANTS FOR '用戶名'@'主機名';
-- 授予權(quán)限
GRANT 權(quán)限列表 NO 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機名';
-- 撤銷權(quán)限
REVOKE 權(quán)限列表 NO 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機名';
權(quán)限說明ALL , ALL PRIVILEGES所有權(quán)限SELECT查詢數(shù)據(jù)INSERT插入數(shù)據(jù)UPDATE修改數(shù)據(jù)DELETE刪除數(shù)據(jù)ALTER修改表DROP刪除數(shù)據(jù)庫 / 表 / 視圖CREATE創(chuàng)建數(shù)據(jù)庫 / 表
注意:
多個權(quán)限之間,使用逗號分隔授權(quán)時,數(shù)據(jù)庫名和表名可以使用 * 進行通配,代表所有
函數(shù)
字符串函數(shù)
-- 函數(shù)演示
SELECT 函數(shù)(參數(shù));
-- 字符串拼接:concat
select concat('Hello','MySQL');
-- 字符串轉(zhuǎn)換為小寫:lower
select lower('ABCDEFG');
-- 字符串轉(zhuǎn)換為大寫:upper
select upper('abcdefg');
-- 左填充:lpad
select lpad('01',5,'-');
-- 右填充:rpad
select rpad('01',5,'-');
-- 去掉頭部和尾部空格:trim
select trim(' Hello Word ');
-- 從字符串的起始位置(start)開始截取,截取len個字符的長度:substring
select substring('Hello Word',1,5);
函數(shù)功能CONCAT(S1,S2,…Sn)字符串拼接LOWER(str)將字符串全部轉(zhuǎn)換為小寫UPPER(str)將字符串全部轉(zhuǎn)換為大寫LPAD(str, n, pad)左填充,使用pad對字符串左邊進行填充n個字符串長度RPAD(str, n, pad)右填充,使用pad對字符串右邊進行填充n個字符串長度TRIM(str)去掉字符串頭部和尾部的空格SUBSTRING(str, start, len)從字符串的起始位置(start)開始截取,截取len個字符的長度,返回結(jié)果
數(shù)值函數(shù)
-- 演示數(shù)值函數(shù)
-- 向上取整:ceil
select ceil(2.1);
-- 向下取整:floor
select floor(5.9);
-- 返回x/y的模:mod
select mod(2,3);
-- 返回0-1內(nèi)的隨機數(shù):rand
select rand();
-- 求參數(shù)x四舍五入的值,保留y位小數(shù):round
select round(3.15926,2);
-- 通過數(shù)據(jù)庫的函數(shù)生成一個6位數(shù)的隨機驗證碼
select round(rand()*1000000,0) as '驗證碼';
函數(shù)功能CEIL(x)向上取整FLOOR(x)向下取整MOD(x,y)返回x/y的模RAND()返回0-1內(nèi)的隨機數(shù)ROUND(x,y)求參數(shù)x四舍五入的值,保留y位小數(shù)
日期函數(shù)
-- 日期函數(shù)演示
-- 返回當(dāng)前 日期,時間,日期和時 / curdate,curtime,now
select curdate();
select curtime();
select now();
-- 獲取指定的 年份,月份,日期 / year,month,day
select year (now());
select month (now());
select day (now());
-- 返回一個日期,指定的時間(date)加上間隔的時間(expr)后的時間值:date_add
select datE_add(now(), interval 96 DAY);
-- 返回起始時間和結(jié)束時間之間的天數(shù):datediff
select datediff('2001-6-5',now());
-- 查詢所有入職員工的入職天數(shù),并根據(jù)入職天數(shù)倒序排序
select name '姓名', datediff(curdate(), entrydate)as 'entr' from emp order by entr desc;
函數(shù)功能CURDATE()返回當(dāng)前日期CURTIME()返回當(dāng)前時間NOW()返回當(dāng)前日期和時間YEAR(date)獲取指定date的年份MONTH(date)獲取指定date的月份DAY(date)獲取指定date的日期DATE_ADD(date, INTERVAL expr type)返回一個日期/時間值加上一個時間間隔expr后的時間值DATEDIFF(date1,date2)返回起始時間和結(jié)束時間之間的天數(shù)
流程控制函數(shù)
-- 流程函數(shù)演示
-- if
select if (true,'Hello','Word');
-- ifnull
select ifnull(null ,'default');
-- 查詢員工表的員工姓名和員工地址,北京/上海---線城市,其他---二線城市
select
name,
(case workaddress when '北京' then '一線城市' when '上海' then '一線城市' else '二線城市' end) as '工作地址'
from emp;
函數(shù)功能IF(value,t,f)如果value為true,則返回t,否則返回fIFNULL(value1,value2)如果value不為空,返回value1,否則返回value2CASE [value] when [res] …ELSE [default] END如果value為true,返回res,…否則返回默認值
約束
概念:約束是作用于表中字段上的規(guī)則,用于限制存儲在表中的數(shù)據(jù)
目的:保證數(shù)據(jù)庫中數(shù)據(jù)的正確,有效性和完整性
分類:
約束說明關(guān)鍵字非空約束限制該字段的數(shù)據(jù)不能為nullNOT NULL唯一約束保證該字段的所有數(shù)據(jù)都是唯一,不重復(fù)的UNIQUE主鍵約束主鍵是一行數(shù)據(jù)的唯一標(biāo)識,要求非空且唯一PRIMARY KEY默認約束保持數(shù)據(jù)時,如果未指定該字段的值,則采用默認值DEFAULT檢查約束保證字段值滿足某一個條件CHECK外鍵約束用來讓兩張表的數(shù)據(jù)之間建立連接,保證數(shù)據(jù)的一致性和完整性FOREIGN KEY
注意:
約束是作用于表中字段上的,可以在創(chuàng)建表/修改表的時候添加約束auto_increment 關(guān)鍵字:自動增長
-- 約束演示
create table user(
id int primary key auto_increment comment '主鍵',
name varchar(10) not null unique comment '姓名',
age int check(age > 0 and age <= 120) comment '年齡',
gender char(1) comment '性別'
)comment '用戶表';
-- 添加外鍵
CREATE TABLE 表名(
字段名 數(shù)據(jù)類型,
...
[CONSTRAINT][外鍵名稱]FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名)
);
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名);
-- 刪除外鍵
ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
-- 外鍵約束行為
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名) NO UPDATE 行為 NO DELETE 行為;
外鍵約束:刪除 / 更新行為
行為說明NO ACTION對父表進行刪除或更新操作時,如果有對應(yīng)外鍵,則不允許刪除或更新RESTRICT對父表進行刪除或更新操作時,如果有對應(yīng)外鍵,則不允許刪除或更新CASCADE對父表進行刪除或更新操作時,如果有對應(yīng)外鍵,則也刪除或更新子表中的記錄SET NULL對父表進行刪除操作時,如果有對應(yīng)外鍵,則設(shè)置子表中該外鍵值為null(這里要求該外鍵允許取null)SET DEFAULT父表有變更時,子表將外鍵設(shè)置成一個默認的值
多表查詢
多表關(guān)系
一對多:在多的一方建立外鍵,指向一的一方的主鍵多對多:建立第三張中間表,中間表至少包含兩個外鍵,分別關(guān)聯(lián)兩方主鍵一對一:在任意的一方加入外鍵,關(guān)聯(lián)另外一方的主鍵,并且設(shè)置外鍵唯一的(NUIQUE)
多表查詢概念
指從多張表中查詢數(shù)據(jù)笛卡爾積:是指在數(shù)學(xué)中,兩個集合A和集合B的所有組合情況,在多表查詢時需要消除無效的笛卡爾積
多表查詢分類
連接查詢
內(nèi)連接:相當(dāng)于A,B交集部分的數(shù)據(jù)外連接
左外連接:查詢左表所有數(shù)據(jù),以及兩張表交集部分數(shù)據(jù)右外連接:查詢右表所有數(shù)據(jù),以及兩張表交集部分數(shù)據(jù) 自連接:當(dāng)前表與自身的連接查詢,自連接必須使用表別名,可以是內(nèi)連接也可以是外連接 子查詢:sql 語句中嵌套 SELECT 語句,稱之為嵌套,又稱為子查詢
標(biāo)量子查詢:子查詢結(jié)果為單個值
常用操作符:=,<>,>,>=,<,<= 列子查詢:子查詢結(jié)果為一列(可以是多行)
常用操作符:IN,NOT IN,ANY,SOME,ALL
操作符說明IN在指定的集合范圍內(nèi),多選一NOT IN不在指定的集合范圍內(nèi)ANY子查詢返回列表中,有任意一個滿足即可SOME與ANY等同,使用SOME的地方都可以使用ANYALL子查詢返回列表的所有值必須滿足
行子查詢:子查詢結(jié)果為一行(可以是多列)表子查詢:子查詢結(jié)果為多行多列
內(nèi)連接
-- 隱式內(nèi)連接
SELECT 字段列表 FROM 表1,表2 WHERE 條件...;
-- 顯式內(nèi)連接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 連接條件...;
外連接
-- 左外連接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件...;
-- 右外連接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件...;
自連接
SELECT 字段列表 FROM 表A 別名A JOIN 表B ON 條件
聯(lián)合查詢
-- 聯(lián)合查詢:就是把多次查詢的結(jié)果合并起來,形成一個新的查詢結(jié)果集
SELECT 字段列表 FROM 表A...
UNION [ALL]
SELECT 字段列表 FROM 表B...;
-- UNION ALL:直接對查詢結(jié)果進行合并
-- UNION:對查詢結(jié)果進行合并之后并去重
-- 聯(lián)合查詢:多張表的列數(shù)必須保持一致,字段類型也必須保持一致
事務(wù)
概念:
事務(wù)是一組操作的集合,它會把所有操作作為一個整體向系統(tǒng)提交或撤銷操作,這些操作要么同時成功要么同時失敗MySQL的事務(wù)是默認提交的,當(dāng)執(zhí)行一條DML語句,MySQL會立即隱式的提交事務(wù)
-- 查看事務(wù)的提交方式
select @@autocommit;
-- 設(shè)置手動提交
set @@autocommit = 0;
-- 開啟事務(wù)
start transaction;
-- 操作語句...
-- 提交事務(wù)
commit;
-- 回滾事務(wù)
rollback;
事物的四大特性:
原子性:(Atomicity) 事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗一致性:(Consistency) 事務(wù)完成,必須使所有的數(shù)據(jù)都保持一致狀態(tài)隔離性:(Isolation) 數(shù)據(jù)庫系統(tǒng)提供的隔離機制,保證事務(wù)在不受外部并發(fā)操作影響的獨立環(huán)境下運行持久性:(Durability) 事務(wù)一旦提交或回滾,它對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久的
并發(fā)事務(wù)問題
問題描述臟讀一個事務(wù)讀到另外一個事務(wù)還沒提交的數(shù)據(jù)不可重復(fù)讀一個事務(wù)先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同幻讀一個事務(wù)按照條件查詢數(shù)據(jù)時,沒有對應(yīng)的數(shù)據(jù)行,但是再插入數(shù)據(jù)時,又發(fā)現(xiàn)這行數(shù)據(jù)已存在
事務(wù)的隔離級別
隔離級別臟讀不可重復(fù)讀幻讀Read uncommitted√√√Read committed×√√Repeatable Read(默認)××√Serializable×××
-- 查看事務(wù)隔離級別
SELECT @@TRANSACTION_ISOLATION;
-- 設(shè)置事務(wù)隔離級別
SET [SESSION|GLOBAL] TRANSACTION ISOLATION LEVEL {事務(wù)隔離級別};
注意:事務(wù)隔離級別越高,數(shù)據(jù)越安全,但是性能越低
柚子快報激活碼778899分享:MySQL學(xué)習(xí)筆記—基礎(chǔ)篇
相關(guān)閱讀
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。