MYSQL數(shù)據(jù)庫基礎復習大綱
數(shù)據(jù)庫技術(shù)的發(fā)展歷史:
一)人工管理階段,特點:
1、數(shù)據(jù)不保存;
2、使用應用程序來管理數(shù)據(jù)--沒有專用的軟件對數(shù)據(jù)進行管理;
3、數(shù)據(jù)不共享;
4、數(shù)據(jù)不具有獨立性
二)文件系統(tǒng)階段,特點:
1、數(shù)據(jù)可以長期保存;
2、由文件系統(tǒng)管理數(shù)據(jù);
3、共享性差,數(shù)據(jù)冗余大;
4、數(shù)據(jù)獨立性差
三)數(shù)據(jù)庫系統(tǒng)階段,特點:
1、數(shù)據(jù)持久化保存;
2、數(shù)據(jù)結(jié)構(gòu)化;
3、數(shù)據(jù)之間具有聯(lián)系;
4、數(shù)據(jù)獨立性高;
5、數(shù)據(jù)共享性高,冗余度低,易擴展
數(shù)據(jù)庫分類:關系型數(shù)據(jù)庫,非關系型數(shù)據(jù)庫。
數(shù)據(jù)庫系統(tǒng)的組成:數(shù)據(jù)庫系統(tǒng)由數(shù)據(jù)庫、數(shù)據(jù)庫管理系統(tǒng)、數(shù)據(jù)庫應用程序等組成。
DQL:數(shù)據(jù)查詢語言,用于對數(shù)據(jù)進行查詢 如:select
DML:數(shù)據(jù)操作語言,對數(shù)據(jù)進行增、刪、改,如insert、update、delete
DDL:數(shù)據(jù)定義語言,進行數(shù)據(jù)庫、表的管理等,如create、drop
DCL:數(shù)據(jù)控制語言,進行授權(quán)與權(quán)限回收,如grant(授權(quán))、revoke(撤銷)
TPL:事務處理語言,對事務進行處理,包括begin transaction(開始事務)、commit(提交)、rollback(回滾)
ER圖關系:一對一,一對多,多對多
MySQL服務的啟動與停止:
啟動與停止MySQL服務方式一:服務管理器
啟動與停止MySQL服務方式二:DOS命令:
1)啟動MySQL服務的具體命令為:net start mysql
2)停止MySQL服務的具體命令為:net stop mysql
登錄MySQL數(shù)據(jù)庫
方式一:使用相關命令登陸
登錄MySQL數(shù)據(jù)庫可以通過DOS命令完成:
mysql –h hostname –u username –p
在上述命令中,mysql為登錄命令,-h后面的參數(shù)是服務器的主機地址,-u后面的參數(shù)是登錄數(shù)據(jù)庫的用戶名,-p后面是登錄密碼
方式二:Command Line Client登錄
在開始菜單中依次選擇【程序】【MySQL】【MySQL Server 5.5】【MySQL 5.5 Command Line Client】打開MySQL命令行客戶端窗口,此時就會提示輸入密碼,密碼輸入正確后便可以登錄到MySQL數(shù)據(jù)庫
MySQL常用命令

查看所有的數(shù)據(jù)庫:SHOW DATABASES;
創(chuàng)建數(shù)據(jù)庫:CREATE DATABASE 數(shù)據(jù)庫名 CHARSET=utf8;
選擇操作數(shù)據(jù)庫:USE 數(shù)據(jù)庫名;
查看當前操作的數(shù)據(jù)庫:SELECT DATABASE();
刪除數(shù)據(jù)庫:DROP DATABASE 數(shù)據(jù)庫名稱;
常用數(shù)據(jù)類型:
整數(shù):INT,BIT,BIGINT
小數(shù):decimal,double,float
字符串:varchar,char,TEXT,LONGTEXT
日期時間: date, time, datetime
創(chuàng)建數(shù)據(jù)表:
CREATE TABLE 數(shù)據(jù)表名(
字段名1 數(shù)據(jù)類型 [列級約束條件] [默認值],
字段名2 數(shù)據(jù)類型 [列級約束條件] [默認值],
……
);
建表注意事項:
(1)必須指定數(shù)據(jù)表名(不區(qū)分大小寫),且不能使用SQL中的關鍵字,如: CREATE、INSERT、DROP。
(2)如果數(shù)據(jù)表中有多個字段,每個字段的定義語句必須要用逗號隔開。
查看所選數(shù)據(jù)庫中的數(shù)據(jù)表:SHOW TABLES;
查看數(shù)據(jù)表結(jié)構(gòu):
方式一:DESCRIBE/DESC 表名;
方式二:SHOW CREATE TABLE 表名;
方式三:show [full] columns from 數(shù)據(jù)表;
修改數(shù)據(jù)表結(jié)構(gòu):
修改數(shù)據(jù)表名
ALTER ?TABLE ?原表名 ?RENAME ?[TO] ?新表名;
修改字段名
ALTER ?TABLE ?表名 ?CHANGE ?舊字段名 ?新字段名 新數(shù)據(jù)類型;
添加字段
表末尾字段
ALTER TABLE 表名 ADD 新字段名 數(shù)據(jù)類型 [約束條件];
設為表的第一字段
#FIRST:用于將新添加的字段設置為表中的第一個字段
語法:ALTER TABLE 表名 ADD 新字段名 數(shù)據(jù)類型 [約束條件] FIRST;
指定位置添加字段
#AFTER:用于將新添加的字段添加到“已存在的字段名”的后面。
語法:ALTER TABLE 表名 ADD 新字段名 數(shù)據(jù)類型 [約束條件] AFTER 已存在的字段名;
修改字段的數(shù)據(jù)類型
單純修改數(shù)據(jù)類型
ALTER TABLE 表名 MODIFY 字段名 新數(shù)據(jù)類型;
修改數(shù)據(jù)類型并排列在第一個
ALTER TABLE 表名 MODIFY 要修改位置字段名 數(shù)據(jù)類型 FIRST;
將要修改位置的字段插入到指定字段的后面
ALTER TABLE 表名 MODIFY 要修改位置字段名 數(shù)據(jù)類型 AFTER 指定字段名;
刪除字段:
ALTER TABLE 表名 DROP 要刪除的字段名;
刪除數(shù)據(jù)表: DROP TABLE 表名;
主鍵約束-單字段主鍵
單字段主鍵僅由一列字段組成,創(chuàng)建單字段主鍵的SQL語句格式分為以下兩種情況。
方式一:定義字段的同時指定主鍵
字段名 ?數(shù)據(jù)類型 ?PRIMARY KEY,
方式二:定義完所有字段列之后指定主鍵
PRIMARY KEY (設置主鍵的字段名);
主鍵約束-多字段聯(lián)合主鍵
多字段聯(lián)合主鍵由表中的多個字段組成,指定聯(lián)合主鍵語法格式如下:
PRIMARY KEY(字段名1, 字段名n, ……),
唯一約束 - UNIQUE
唯一約束可以確保表中一列或多列不出現(xiàn)重復值,唯一約束的值允許為空,但是只能出現(xiàn)一個空值。唯一約束的語法和主鍵的語法規(guī)則一樣有兩種。
方式一:定義字段的同時指定唯一約束
字段名 ?數(shù)據(jù)類型 ?UNIQUE;
方式二:定義完所有字段列之后指定唯一約束
UNIQUE(設置唯一約束的字段名);
非空約束 – NOT NULL
非空約束指的是字段的值不能為空,對于使用了非空約束的字段,如果用戶添加數(shù)據(jù)時沒有指定值,數(shù)據(jù)庫系統(tǒng)會報錯。
語法:字段名 ?數(shù)據(jù)類型 ?NOT NULL;
默認約束 - DEFAULT
默認約束用于指定某一字段的默認值
語法:字段名 ?數(shù)據(jù)類型 ?DEFAULT 默認值;
自增約束 - AUTO_INCREMENT
在數(shù)據(jù)表中,若想為表中插入的新記錄自動生成唯一的ID,可以使用AUTO_INCREMENT約束來實現(xiàn)。默認AUTO_INCREMENT的初始值是1,每新增一條記錄,字段值自動加1。
注意:一個表只能有一個字段使用AUTO_INREMENT約束,且該字段必須為主鍵。
語法:字段名 ?數(shù)據(jù)類型 ?主鍵約束 ?自增約束;
外鍵約束 – FOREIGN KEY
外鍵用來在兩個表的數(shù)據(jù)之間建立鏈接,外鍵可以引用另一個表中的一列或多列,被引用的列應該具有主鍵約束或唯一性約束。
注意事項:
1、添加外鍵要保證兩個表必須為innoDB存儲引擎。
2、對于兩個具有關聯(lián)關系的表,關聯(lián)字段的數(shù)據(jù)類型必須匹配。
3、一個表的外鍵的值可以為空值,若不為空值,使用外鍵約束字段的值就必須等于另一個表中主鍵的值。
方式一:新建數(shù)據(jù)表的同時添加外鍵約束
[CONSTRAINT 外鍵名 ]? FOREIGN? KEY(外鍵字段名)? REFERENCES? 主表名(主鍵字段名);
方式二:為已創(chuàng)建好的數(shù)據(jù)表添加外鍵約束
ALTER TABLE? 表名? ADD CONSTRAINT ?外鍵名? FOREIGN? KEY(外鍵字段名) REFERENCES? 主表名(主鍵字段名);
刪除外鍵約束:
ALTER TABLE? 表名? DROP? FOREIGN? KEY? 外鍵名;
添加數(shù)據(jù):
為所有字段添加數(shù)據(jù)方式一
INSERT INTO 數(shù)據(jù)表名 (字段1, 字段2, .....) VALUES(值1, 值2, ......);
為所有字段添加數(shù)據(jù)方式二
語法格式:INSERT INTO 數(shù)據(jù)表名 VALUES(值1,值2,....);
給數(shù)據(jù)表指定字段添加數(shù)據(jù):
INSERT INTO 數(shù)據(jù)表名(指定要添加數(shù)據(jù)的字段名) VALUES (為指定字段添加的值)
同時添加多條數(shù)據(jù):
INSERT INTO 表名 VALUES( 值1, 值2, …… ),(值1,值2, ……);
INSERT INTO 表名(指定的字段) VALUES( 值1, 值2, …… ),(值1,值2, ……);
添加數(shù)據(jù)注意事項:
1、插入的數(shù)據(jù)類型與字段的數(shù)據(jù)類型相同。
2、數(shù)據(jù)的大小應該列的規(guī)定范圍內(nèi)。
3、在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對應。
4、字符類型和日期類型數(shù)據(jù)應該包含在單引號中。
5、插入空值:不指定或insert into table value(null)
6、如果要插入所有字段可以省寫列名,直接按表中字段的順序?qū)憣闹怠?/p>
修改數(shù)據(jù)表數(shù)據(jù):
更新數(shù)據(jù)是指對表中存在的記錄進行修改
UPDATE ?表名 ?SET 字段名1 ?= 值1, ?字段名2 ?= 值2, ….. ?[WHERE 條件表達式];
參數(shù)說明如下:
SET子句:必選項,用于指定表中要修改的字段名及其字段值。其中的值可以是表達式,也可以是該字段所對應的默認值。如果指定默認值則使用關鍵字DEFAULT指定。
WHERE子句:可選項,指定更新數(shù)據(jù)需要滿足的條件,如果不指定該子句,那么UPDATE語句會更新表中的所有行。
刪除數(shù)據(jù)表數(shù)據(jù)
刪除數(shù)據(jù)是指對表中存在的記錄進行刪除
DELETE FROM ?表名 [WHERE 條件表達式] ;
在DELETE語句中如果沒有使用WHERE子句來指定刪除的條件,則會將表中的所有記錄都刪除。
TRUNCATE TABLE ?表名 ;
DELETE與TRUNCATE的區(qū)別
(1)DELETE語句是DML語句,TRUNCATE語句通常被認為是DDL語句
(2)使用DELETE語句時,每刪除一條記錄都會在日志中記錄,而使用TRUNCATE語句時,不會在日志中記錄刪除的內(nèi)容,因此TRUNCATE語句的執(zhí)行效率比DELETE語句高。
(3)DELETE語句后面可以跟WHERE子句,通過指定WHERE子句中的條件表達式只刪除滿足條件的部分記錄,而TRUNCATE語句只能用于刪除表中的所有記錄
(4)使用TRUNCATE語句刪除表中的數(shù)據(jù),再向表中添加記錄時,自動增加字段的默認初始值重新由1開始,使用DELETE語句刪除表中所有記錄,再向表中添加記錄時,自動增加字段的值為刪除時該字段的最大值加1。
完整語法格式
SELECT [DISTINCT] * | <字段名1, 字段名2, 字段名3,……>
FROM 表名
[WHERE 條件表達式1]
[GROUP BY 字段名 [HAVING 條件表達式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 記錄數(shù)]
“字段1,字段2…”表示從表中查詢的指定字段,星號(“*”)通配符表示表中所有字段,兩者為互斥關系,任選其一?!癉ISTINCT”是可選參數(shù),用于剔除查詢結(jié)果中重復的數(shù)據(jù)
表示從指定的表中查詢數(shù)據(jù)
“WHERE”是可選參數(shù),用于指定查詢條件
“GROUP BY”是可選參數(shù),用于將查詢結(jié)果按照指定字段進行分組,“HAVING”也是可選參數(shù),用于對分組后的結(jié)果進行過濾。
“ORDER BY”是可選參數(shù),用于將查詢結(jié)果按照指定字段進行排序。排序方式由參數(shù)ASC或DESC控制,其中ASC表示按升序進行排列,DESC表示按降序進行排列。如果不指定參數(shù),默認為升序排列。
“LIMIT”是可選參數(shù),用于限制查詢結(jié)果的數(shù)量。LIMIT后面可以跟2個參數(shù),第一個參數(shù)“OFFSET”表示偏移量,如果偏移量為0則從查詢結(jié)果的第一條記錄開始…以此類推。如果不指定OFFSET,其默認值為0。第二個參數(shù)“記錄數(shù)”表示返回查詢記錄的條數(shù)。
簡單數(shù)據(jù)記錄查詢
語法結(jié)構(gòu):SELECT * | 字段列表 FROM 數(shù)據(jù)表名;
數(shù)據(jù)查詢?nèi)ブ?/strong>
語法:SELECT DISTINCT 字段列表 FROM 數(shù)據(jù)表名;
關系運算條件查詢
語法:SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 字段名 [> | < | = | !=] 指定參數(shù);
大于:<
小于: >
不等于: != <>
大于等于: >=
小于等于: <=
邏輯運算條件查詢
語法:SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 條件1 [AND | OR | NOT] 條件2;
AND( && ):邏輯與(所有條件同時為真,結(jié)果才為真)
OR( || ):邏輯或(所有條件同時為假,結(jié)果才為假)
NOT( ! ):邏輯非(對結(jié)果取反,真即為假,假即為真)
范圍條件查詢
SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 字段名 [NOT] IN (值1,值2,…..);
SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;
空值條件查詢
語法:SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 字段名 IS [NOT] NULL;
模糊條件查詢
語法:SELECT * | 字段列表 FROM 數(shù)據(jù)表名 WHERE 字段名 [NOT] LIKE ‘匹配字符串’;
百分號(%)通配符:可以匹配任意長度的字符串,包括空字符串
下劃線(_)通配符:下劃線通配符只匹配單個字符, 如果要匹配多個字符,需要使用多個_符。
高級查詢
聚合函數(shù)-常用聚合函數(shù)
查詢統(tǒng)計數(shù)量
語法:select count(*) from 數(shù)據(jù)表 [where 條件表達式];
查詢統(tǒng)計求和
語法:select sum(需要求和的字段) from 數(shù)據(jù)表 [where 條件表達式];
查詢統(tǒng)計平均
語法:select avg(需要求平均值的字段) from 數(shù)據(jù)表 [where 條件表達式];
查詢求最大值
語法:select MAX(求最大值的字段) from 數(shù)據(jù)表 [where 條件表達式];
查詢求最小
語法:select MIN(求最小值的字段) from 數(shù)據(jù)表 [where 條件表達式];
排序
語法:SELECT * FROM 數(shù)據(jù)表名 [WHERE 條件表達式]
ORDER BY 字段1 [ASC | DESC] [, 字段2 [ASC | DESC] , …] ;
注意事項:
排序字段之間必須用逗號隔開。
排序規(guī)則按照從左至右依次排序,當?shù)谝粋€字段值相同是,再按照第二個字段的值排序,以此類推。
每個字段都可以指定按照升序或降序排序。
分頁查詢LIMIT
語法:SELECT * FROM 表名 LIMIT [位置偏移量,] 記錄數(shù) -- 偏移量從0開始,代表的是從第一條數(shù)據(jù)開始
分組查詢
語法:SELECT 字段名 FROM 表名 [where 條件表達式] GROUP BY 字段名 [HAVING 條件表達式];
連接查詢是指同時對多個表進行查詢,當查詢的字段數(shù)據(jù)來自不同的表就可以使用連接查詢來完成。
分類:
1.內(nèi)連接查詢
2.外連接查詢(左外連接查詢,右外連接查詢)
3.復合條件連接查詢
內(nèi)連接(INNER JOIN)又稱簡單連接或自然連接,使用比較運算符對兩個表中的數(shù)據(jù)進行比較,查詢兩個表中符合條件的共有記錄。
SELECT 查詢字段 FROM 表1 INNER JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
外連接查詢
在內(nèi)連接查詢中返回的查詢結(jié)果只有符合查詢條件和連接條件的數(shù)據(jù),然而,有些時候我們可能需要返回某個表中的所有記錄,此時就需要用到外連接查詢。
左連接-LEFT JOIN
左連接的結(jié)果包括左表的所有記錄,和所有滿足連接條件的記錄。如果左表的某條記錄在右表中不存在,則在右表中顯示為空。
以左表為主根據(jù)條件查詢右表數(shù)據(jù),如果根據(jù)條件查詢右表數(shù)據(jù)不存在使用null值填充。
語法:SELECT 查詢字段 FROM 表1 LEFT ?JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
說明:left join 就是左連接查詢關鍵字;on 就是連接查詢條件;表1 是左表;表 2 是右表。
右鏈接-RIGHT JOIN
右連接與左連接正好相反,返回右表中所有指定的記錄和所有滿足連接條件的記錄。如果右表的某條記錄在左表中沒有匹配,則左表將返回空值。
以右表為主根據(jù)條件查詢左表數(shù)據(jù),如果根據(jù)條件查詢左表數(shù)據(jù)不存在使用null值填充。
語法:SELECT 查詢字段 FROM 表1 RIGHT ?JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
說明:right join 就是左連接查詢關鍵字;on 就是連接查詢條件;表1 是左表;表2 是右表。
子查詢
子查詢是指一個select查詢語句中,嵌套了另一個select語句,那么內(nèi)部的select語句稱之為子查詢語句,外部的select語句則稱為主查詢。通常情況下子查詢是輔助主查詢的,要么充當條件,要么充當數(shù)據(jù)源;
注意事項:
1.子查詢需要嵌入到主查詢中;
2.子查詢是可以獨立存在的語句,是一條完整的 select 語句;
3.在執(zhí)行查詢語句時,首先會執(zhí)行子查詢中的語句,然后將返回的結(jié)果作為外層查詢的過濾條件;
聯(lián)合查詢 union
select 查詢字段 from ……
union
select 查詢字段 from ……
union all -- 查詢保留所有的結(jié)果
union DISTINCT -- 查詢結(jié)果去重
union -- 查詢結(jié)果去重
事務:事務就是用戶定義針對數(shù)據(jù)庫一系列操作的SQL語句,它可以由一條或多條SQL語句組成,同一個事務的操作具備同步的特點,即事務中的語句要么都執(zhí)行,要么都不執(zhí)行,它是一個不可分割的工作執(zhí)行單元。
事務的四大特性:
1、持久性
2、原子性
3、一致性
4、隔離性
開啟事務: START TRANSACTION; 或 BEGIN;
執(zhí)行SQL語句:SQL語句
結(jié)束: 提交事務 COMMIT; 或 取消事務(回滾) ROLLBACK;
存儲過程
語法:
CREATE PROCEDURE 存儲過程名稱([參數(shù)列表])
BEGIN
存儲過程體(一組合法的SQL語句);
END;
參數(shù)列表:包含三部分
參數(shù)模式 、參數(shù)名、 參數(shù)類型
舉例:IN stuname VARCHAR(20)
參數(shù)模式:IN:該參數(shù)可以作為輸入,也就是該參數(shù)需要調(diào)用方傳入值。
視圖是從基本表中導出來的表,可以像操作基本表一樣操作視圖。
視圖的優(yōu)點:簡化查詢語句;安全性;邏輯數(shù)據(jù)獨立性
創(chuàng)建視圖簡單語法:
CREATE VIEW 視圖名稱:
AS
SELECT 字段名…… FROM 數(shù)據(jù)表 [WHERE 條件表達式];
查看表/視圖結(jié)構(gòu)
1、查看數(shù)據(jù)表字段信息
語法:DESC 表名/視圖名;
2、查看表/視圖的基本信息
語法:SHOW TABLE STATUS LIKE '視圖名'
3、查看創(chuàng)建語句
語法:SHOW CREATE VIEW 表名/視圖名;
4、查看結(jié)構(gòu)
語法:show full columns from 表名/視圖名
修改視圖簡單語法:
1、使用CREATE OR REPLACE VIEW語句修改視圖
CREATE OR REPLACE VIEW 視圖名稱
AS
SELECT 字段名…… FROM 數(shù)據(jù)表 [WHERE 條件表達式];
2、使用ALTER語句修改視圖
ALTER VIEW 視圖名稱
AS
SELECT 字段名…… FROM 數(shù)據(jù)表 [WHERE 條件表達式];
刪除視圖
語法:DROP VIEW 視圖名;
視圖插入數(shù)據(jù),跟插入單表數(shù)據(jù)一樣
語法:insert into 視圖名(字段名) values(字段值);
視圖修改數(shù)據(jù)
語法:update 視圖名 set 字段名1 = 值1,字段名2 = 值2 [where 條件表達式];
視圖刪除數(shù)據(jù)
delete from 視圖名 [where 條件表達式];
