MySQL 數(shù)據(jù)庫
-
什么是數(shù)據(jù)庫织鲸?
- 英文名:DataBase (DB)
- 用于存儲和管理數(shù)據(jù)的倉庫恍涂。
-
數(shù)據(jù)庫的特點(diǎn)
- 持久化存儲數(shù)據(jù)(文件系統(tǒng)右蕊,把數(shù)據(jù)存儲在文件中)
- 方便存儲和管理數(shù)據(jù)
- 使用統(tǒng)一的方式操作數(shù)據(jù)庫 ---- SQL
- 數(shù)據(jù)庫類型
SQL
概念:結(jié)構(gòu)化查詢語言
作用:
- 是一種所有關(guān)系型數(shù)據(jù)庫的查詢規(guī)范砰奕,不同的數(shù)據(jù)庫都支持。
- 通用的數(shù)據(jù)庫操作語言燎含,可以在不同的數(shù)據(jù)庫中使用宾濒。
- 不同的數(shù)據(jù)庫SQL語句有一些區(qū)別。
SQL語句分類:
- Data Definition Language (DDL 數(shù)據(jù)定義語言) 如:建庫屏箍,建表绘梦。
- Data Manipulation Language (DML 數(shù)據(jù)操縱語言) 如:對表中的記錄操作==增刪改==橘忱。
- Data Query Language (DQL 數(shù)據(jù)查詢語言)如:對表中的記錄==查詢==操作
- Data Control Language (DCL 數(shù)據(jù)控制語言) 如:對用戶權(quán)限的設(shè)置
MySql服務(wù)啟動與關(guān)閉
- 手動
- cmd --> services.msc -->點(diǎn)擊MySql啟動
- 使用管理員打開cmd --> net start mysql 啟動
- 使用管理員打開cmd --> net stop mysql 關(guān)閉
MySql登陸和退出
- 登陸
mysql -uroot -p密碼; -- 基本方式
mysql -uroot -p
password:***** -- 在下面輸入密碼
mysql -h'IP地址' -uroot -p密碼 -- 遠(yuǎn)程登陸
mysql --host='IP地址' --user=root --password=密碼
- 退出
exit; -- 第一種方式退出
quit; -- 第二種方式退出
MySql 語法
- 注釋:
- 單行注釋 : --空格
- 多行注釋 : /* */
DDL數(shù)據(jù)定義語言
操作數(shù)據(jù)庫:CRUD
- C ( Create ) : 創(chuàng)建
- R (Retrieve): 查詢
- U (Update): 修改(更新)
- D (Delete): 刪除
操作數(shù)據(jù)庫
- 創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名; -- 基本方式
CREATE DATABASE IF NOT EXISTS 數(shù)據(jù)庫名; -- 判斷數(shù)據(jù)庫是否存在卸奉,不存在則創(chuàng)建數(shù)據(jù)庫
CREATE DATABASE 數(shù)據(jù)庫名 CHARACTER SET 字集符钝诚;-- 創(chuàng)建數(shù)據(jù)庫并指定字符集
CREATE DATABASE IF NOT EXISTS DB1 CHARACTER SET UTF8;
-- 如果沒有這個數(shù)據(jù)庫,就創(chuàng)建一個指定字符集為UTF8的榄棵,數(shù)據(jù)庫名為DB1的數(shù)據(jù)庫
- 查詢數(shù)據(jù)庫
SHOW DATABASES; -- 查詢所有數(shù)據(jù)庫的名稱
SHOW CREATE DATABASE 數(shù)據(jù)庫名稱; -- 查詢某個數(shù)據(jù)庫的字符集
- 修改數(shù)據(jù)庫
ALTER DATABASE 數(shù)據(jù)庫名稱 CHARACTER SET 字符集名稱; -- 修改數(shù)據(jù)庫的字符集
- 刪除數(shù)據(jù)庫
DROP DATABASE db; -- 刪除數(shù)據(jù)庫
DROP DATABASE IF EXISTS db; -- 判斷數(shù)據(jù)庫存在敲长,存在再刪除
- 使用數(shù)據(jù)庫
USE 數(shù)據(jù)庫名稱; -- 使用數(shù)據(jù)庫
SELECT DATABASE(); -- 查詢當(dāng)前正在使用的數(shù)據(jù)庫名稱
操作表
- 查詢表
SHOW TABLES; -- 查詢某個數(shù)據(jù)庫中所有的表名稱
DESC 表名; -- 查詢表結(jié)構(gòu)
- 創(chuàng)建表
CREATE TABLE 表名(
列名1 數(shù)據(jù)類型1,
列名2 數(shù)據(jù)類型2秉继,
列名3 數(shù)據(jù)類型3,
...
列名n 數(shù)據(jù)類型n
);
CREATE TABLE 表名 LIKE 被復(fù)制的表名泽铛; -- 復(fù)制表
- 刪除表
DROP TABLE 表名;
DROP TABLE IF EXISTS 表名 ;
- 修改表
ALTER TABLE 表名 RENAME TO 新表名尚辑; -- 修改表名
ALTER TABLE 表名 CHARACTER SET 字符集名稱; -- 修改表的字符集
ALTER TABLE 表名 ADD 列名 數(shù)據(jù)類型; -- 添加一列
ALTER TABLE 表名 CHANGE 列名 新列名 新數(shù)據(jù)類型盔腔; -- 修改列名稱 類型
ALTER TABLE 表名 MODIFY 列名 新數(shù)據(jù)類型; -- 只修改數(shù)據(jù)類型
ALTER TABLE 表名 DROP 列名杠茬; -- 刪除列
DML增刪改操作
- 添加數(shù)據(jù)
INSERT INTO 表名(列名1,列名2,...列名n) VALUES(值1,值2,...值n);
- 注意:
- 列名和值要一一對應(yīng)。
- 除了數(shù)字類型弛随,其他類型需要使用引號(單雙都可以)引起來瓢喉。
- 如果表名后,不定義列名舀透,則默認(rèn)給所有列添加值栓票。
INSERT INTO 表名 VALUES(值1,值2,...值n);
- 刪除數(shù)據(jù)
DELETE FROM 表名 [WHERE 條件]
-- 例子
DELETE FROM student WHERE id = 1; -- 刪除id為1的數(shù)據(jù)
DELETE FROM student;-- 刪除該表全部數(shù)據(jù)愕够,不推薦
TRUNCATE TABLE 表名走贪; -- 推薦使用,效率高惑芭。先刪除表坠狡,在創(chuàng)建一張一樣的表。
- 修改數(shù)據(jù)
update 表名 set 列名1 = 值1, 列名2 = 值2,... [where 條件];
UPDATE student SET name='張無忌',score=100 WHERE id=1遂跟;
-- 注意:如果不加where逃沿,所有數(shù)據(jù)都會被修改
DQL查詢表中的記錄
- 語法
select
字段列表
from
表名列表
where
條件列表
group by
分組字段
having
分組之后的條件
order by
排序
limit
分頁限定
-
基礎(chǔ)查詢
- 多個字段的查詢
SELECT 字段名1,字段名2... from 表名幻锁; -- 例 SELECT id,name from student;
- 去除重復(fù)
DISTINCT -- 例 SELECT DISTINCT NAME FROM student;
-
計算列
- 一般可以使用四則運(yùn)算計算一些列的值凯亮。(一般只會進(jìn)行數(shù)值型的計算)
- null參與的運(yùn)算,計算結(jié)果都為null
- ifnull(表達(dá)式1,表達(dá)式2)
SELECT IFNULL(score,0) FROM student; -- score中如果有數(shù)據(jù)為null越败,替換成0 -- IFNULL(表達(dá)式1触幼,表達(dá)式2) -- 表達(dá)式1:哪個字段需要判斷是否為null -- 表達(dá)式2:如果該字段為null后的替換值
起別名
SELECT id AS 學(xué)號,NAME AS 名稱,age AS 年齡 FROM student; -- 可以省略AS SELECT id 學(xué)號,NAME 名稱,age 年齡 FROM student;
- 條件查詢
-- 查詢年齡大于20歲 SELECT * FROM student WHERE age > 20; -- 查詢年齡等于20歲 SELECT * FROM student WHERE age = 20; -- 查詢年齡大于等于20 小于等于30 SELECT * FROM student WHERE age BETWEEN 20 AND 30; -- 查詢英語成績?yōu)閚ull SELECT * FROM student WHERE english IS NULL; -- 查詢姓馬的有哪些? like SELECT * FROM student WHERE NAME LIKE '馬%'; -- 查詢姓名中包含德的人 SELECT * FROM student WHERE NAME LIKE '%德%';
排序查詢
-- 語法 :order by
-- 排序方式: ASC 升序
-- DESC 降序
-- 注意:如果有多個排序條件究飞,則當(dāng)前邊的條件值一樣時置谦,才會判斷第二條件堂鲤。
SELECT * FROM student ORDER BY math ASC; -- 升序
SELECT * FROM student ORDER BY math DESC; -- 降序
- 聚合函數(shù) : 將一列數(shù)據(jù)作為一個整體,進(jìn)行縱向的計算媒峡。
COUNT:-- 計算個數(shù) -- 一般選擇非空的列:主鍵
SELECT COUNT(id) FROM student;
-- 單行單列瘟栖,計算student表中id的個數(shù),(排除NULL)
----------------------------------------------------
MAX:-- 計算最大值谅阿,不但可以作用在數(shù)值類型半哟,還可以作用在日期類型,返回最晚時間
SELECT MAX(math) FROM student;
----------------------------------------------------
MIN:-- 計算最小值签餐,不但可以作用在數(shù)值類型寓涨,還可以作用在日期類型,返回最早時間
SELECT MIN(math) FROM student;
----------------------------------------------------
SUM:-- 計算和
SELECT SUM(math) FROM student;
----------------------------------------------------
AVG:-- 計算平均值
SELECT AVG(MATH) FROM student;
注意:聚合函數(shù)的計算氯檐,排除NULL值
解決方案:
- 選擇不包含非空的列進(jìn)行計算
- IFNULL函數(shù)
- 分組查詢
-- 注意:分組之后查詢的字段 --> 分組字段戒良,聚合函數(shù)
GROUP BY
----------------------------------------------------
-- 按照性別分組。分別查詢男冠摄、女同學(xué)的平均分,人數(shù)
SELECT sex , AVG(math),COUNT(id) FROM student GROUP BY sex;
----------------------------------------------------------------
-- 按照性別分組糯崎。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人河泳,不參與分組
SELECT sex , AVG(math),COUNT(id) FROM student WHERE math > 70 GROUP BY sex;
----------------------------------------------------------------------------
-- 按照性別分組沃呢。分別查詢男、女同學(xué)的平均分,人數(shù) 要求:分?jǐn)?shù)低于70分的人拆挥,不參與分組,分組之后薄霜。人數(shù)要大于2個人
SELECT sex , AVG(math),COUNT(id) 人數(shù) FROM student WHERE math > 70 GROUP BY sex HAVING 人數(shù) > 2;
- where 和 having 的區(qū)別?
- where 在分組之前進(jìn)行限定纸兔,如果不滿足條件黄锤,則不參與分組。having在分組之后進(jìn)行限定食拜,如果不滿足結(jié)果鸵熟,則不會被查詢出來
- where 后不可以跟聚合函數(shù),having可以進(jìn)行聚合函數(shù)的判斷负甸。
分頁查詢
語法:limit 開始的索引,每頁查詢的條數(shù);
公式:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
LIMIT num1,num2;
-- num1:開始的索引 = (當(dāng)前的頁碼 - 1) * 每頁顯示的條數(shù)
-- num2:每頁顯示條數(shù)
SELECT * FROM student LIMIT 0,3; -- 第1頁
SELECT * FROM student LIMIT 3,3; -- 第2頁
SELECT * FROM student LIMIT 6,3; -- 第3頁
查詢語句順序
SELECT -- >FROM -- >WHERE -- >GROUP BY -- >HAVING -- >ORDER BY -- >LIMIT
約束
概念:對表中的數(shù)據(jù)進(jìn)行限定流强,保證數(shù)據(jù)的正確性,有效性和完整性呻待。
-
分類:
-
主鍵約束:primary key
注意:
① 含義:非空且唯一
② 一張表只能有一個字段為主鍵
③ 主鍵就是表中記錄的唯一標(biāo)識
CREATE TABLE stu( id INT PRIMARY KEY, -- 給id添加主鍵約束 name VARCHAR(20) ); ---------------------------------------------- -- 刪除主鍵 ALTER TABLE stu DROP PRIMARY KEY; ---------------------------------------------- -- 創(chuàng)建完表后打月,添加主鍵 ALTER TABLE stu MODIFY id INT PRIMARY KEY;
- 自動增長
概念:如果某一列是數(shù)值類型的,使用 auto_increment 可以來完成值得自動增長
==一般和主鍵一起用==
注意:自動增長和表有關(guān)系蚕捉,表在自動增長在
CREATE TABLE stu( id INT PRIMARY KEY AUTO_INCREMENT,-- 給id添加主鍵約束,自動增長 name VARCHAR(20) ); --------------------------------------------------------------- ALTER TABLE stu MODIFY id INT; -- 刪除自動增長 --------------------------------------------------------------- ALTER TABLE stu MODIFY id INT AUTO_INCREMENT; -- 添加自動增長
-
- 非空約束:not null
CREATE TABLE stu(
id INT,
name varchar(20) NOT NULL
);-- 方式一奏篙,創(chuàng)建表時添加非空約束
-- ----------------------------------------------
ALTER TABLE stu MODIFY name VARCHAR(32) NOT NULL;
-- 修改列添加非空約束
- 唯一約束:unique
-- 某一列的值不能重復(fù)
CREATE TABLE student(
int id,
phone_num VARCHAT(20) UNIQUE -- 唯一的,不能重復(fù)
);
-- 注意:唯一約束可以為NULL,不過只能有一條記錄為NULL
-------------------------------------------------------
-- 刪除唯一約束
ALTER TABLE stu DROP INDEX phone_number;
-------------------------------------------------------
-- 在表創(chuàng)建完之后秘通,添加唯一約束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE;
- 外鍵約束:foreign key
-- 讓表于表產(chǎn)生關(guān)系为严,從而保證數(shù)據(jù)的正確性。
-- 在創(chuàng)建表的時候肺稀,可以添加外鍵
CREATE TABLE stu(
...
外鍵列constraint
CONSTRAINT(約束) 外鍵名稱 FOREIGN KEY (外鍵列名) REFERENCES(參考) 主表名稱 主表列名稱
); --
*記憶: 約束 名為 xxx 的外鍵(外鍵列名)參考 xxx表 的 xx列
-------------------------------------------------------------------------
-- 例子
表department:
CREATE TABLE department(
id INT PRIMARY KEY,
NAME VARCHAR(20)
);
表employee:
CREATE TABLE employee(
id INT PRIMARY KEY,
NAME VARCHAR(20),
dept_id INT,
CONSTRAINT id_key FOREIGN KEY (dept_id) REFERENCES department (id)
ON UPDATE CASCADE ON DELETE CASCADE
);
-
級聯(lián)操作 :操作有外鍵的值時第股,把相關(guān)聯(lián)的值一并修改。
- 添加級聯(lián)操作
ALTER TABLE 表名 ADD CONSTRAINT 外鍵名稱 FOREIGN KEY (外鍵字段名稱) REFERENCES 主表名稱(主表列名稱) ON UPDATE CASCADE ON DELETE CASCADE ; -- 例子如上code
- 級聯(lián)更新:ON UPDATE CASCADE
- 級聯(lián)刪除:ON DELETE CASCADE(慎用)