第一章 數據庫的基本概念
1.1 數據庫的英文單詞
- Database,簡稱DB。
1.2 什麼是數據庫?
- 用於存儲和管理數據的倉庫。
1.3 數據庫的特色
- 持久化存儲數據的。其實數據庫就是一個文件系統。
- 方便存儲和管理數據。
- 使用了統一的方式(SQL)來操做數據庫。
1.4 常見的數據庫軟件
- MySQL:開源免費的數據庫,中型數據庫。已經被Oracle收購了。MySQL6.x版本也開始收費了。
- Oracle:收費的大型數據庫,Oracle公司的產品。Oracle收購了SUN公司,獲得了MySQL數據庫。
- DB2:IBM公司的數據庫產品,收費的,經常使用在銀行系統中。
- SQLServer:微軟公司收費的中型數據庫、C#等語言經常使用。
- SyBase:已經淡出歷史舞臺。提供了一個很是專業的數據建模工具PowerDesigner。
- SQLite:嵌入式的小型數據庫,應用在手機端。
- 經常使用的數據庫:Oracle和MySQL。
- 在web系統開發中,使用最多的是MySQL數據庫,緣由以下:
- ①開源、免費。
- ②功能足夠強大,足以應付web應用開發(最高支持千萬級別的併發訪問)。
第二章 MySQL的安裝和使用
2.1 MySQL的安裝
- 略。
2.2 MySQL的使用
2.2.1 MySQL的登陸
- 命令:
mysql -u用戶名 -p密碼 -h主機地址 -P端口
- 示例:
mysql -uroot -p123456
2.2.2 MySQL的退出
- 命令:
exit
quit
2.3 MySQL數據庫、表、數據的關係
第三章 SQL的基本概念和通用語法
3.1 SQL的基本概念
- 結構化查詢語言,簡稱SQL,是指對數據庫進行操做的一種語言。
3.2 SQL的做用
- 經過SQL語句咱們能夠方便的操做數據庫中的數據、表、數據庫。
- SQL是數據庫管理系統都須要遵循的規範。
- 不一樣的數據庫生產廠商都支持SQL語句,但都具備特點。
3.3 SQL語句的分類
3.3.1 DDL(數據定義語言)
- 用來定義數據庫對象:數據庫、表、列等。
- 關鍵字是create、drop、alter等。
3.3.2 DML(數據操做語言)
- 用來對數據庫表的數據進行增刪改。
- 關鍵字是insert、update、delete等。
3.3.3 DQL(數據查詢語言)
- 用來查詢數據庫中表的記錄(數據)。
- 關鍵字是select、where等。
3.3.4 DCL(數據控制語言)
- 用來定義數據庫的訪問權限和安全級別以及建立用戶。
- 關鍵字是grant、revoke等。
3.4 SQL的通用語法
- SQL語句能夠單行或多行書寫,以分號結尾。
- 可以使用空格或縮進來加強語句的可讀性。
- MySQL數據庫的SQL語句不區分大小寫(Linux上例外),關鍵字建議大寫。
- 註釋
-- 單行註釋
/* * 多行註釋 */
第四章 數據庫的增刪改查
4.1 查看數據庫
- 查看全部的數據庫:
show databases;
- 查看某個數據庫的定義信息:
show create database db1;
4.2 建立數據庫
- 語法:
create database 數據庫名;
- 判斷數據庫是否已經存在,不存在則建立數據庫:
create database if not exists 數據庫名;
- 建立數據庫並指定字符集:
create database 數據庫名 character set 字符集;
4.3 修改數據庫
- 修改數據庫的字符集:
alter database 數據庫名 character set 字符集;
4.4 刪除數據庫
- 語法:
drop database if exists 數據庫名 ;
4.5 使用數據庫
- 查看正在使用的數據庫:
select database();
- 使用/切換數據庫:
use 數據庫名;
第五章 數據表的增刪改查
5.1 查詢數據表
- 查詢某個數據庫中的全部的數據庫表:
-- 使用某個數據庫 use test; -- 查詢test數據庫下的全部數據表 show tables;
- 查詢表結構:
desc 表名;
5.2 建立表
- 語法:
create table 表名( 字段 類型, 字段 類型, …… );
- 示例:
create table employee( id int PRIMARY key auto_increment COMMENT '主鍵', name VARCHAR(32) COMMENT'名稱', score double(5,2) COMMENT '分數', birthday date COMMENT '出生日期', create_time TIMESTAMP COMMENT'建立時間:若是未來不給timestamp的字段賦值,系統默認使用當前的系統時間,來自動賦值', been_deleted int COMMENT '0表示正常1表示刪除 ', update_time datetime comment '修改時間' );
5.3 刪除表
- 語法:
drop table if exists 表名;
5.4 修改表
- 修改表名:
alter table 表名 rename to 新表名;
- 修改表的字符集:
-- 查看錶的字符集 show create table 表名; -- 修改表的字符集 alter table 表名 character set 字符集;
- 添加列(字段):
alter table 表名 add column 字段 數據類型;
- 修改列:
-- 修改字段名和數據類型 alter table 表名 change column 舊字段名 新字段名 數據類型; -- 修改字段的數據類型 alter table 表名 modify column 字段名 數據類型;
- 刪除列:
alter table 表名 drop column 字段名;
第六章 數據庫表中記錄的操做
6.1 添加數據
- 語法:
insert into 表名(字段1,字段2,……,字段n) values(值1,值2,……,值n);
- 示例:
INSERT INTO employee ( `name`,score, birthday, been_deleted ) VALUES ( '張三', 90, '1992-05-01', 0 );
6.2 刪除數據
- 語法:
delete from 表名 [條件where];
- 示例:
DELETE FROM employee WHERE id = 1;
6.3 修改數據
- 語法:
update 表名 set 字段1=值1,字段2=值2,……[條件where];
- 示例:
UPDATE employee SET score = 90 WHERE id = 2;
第七章 數據庫的查詢操做
7.1 準備工做
- sql:
CREATE TABLE student ( id int, -- 編號 name varchar(20), -- 姓名 age int, -- 年齡 sex varchar(5), -- 性別 address varchar(100), -- 地址 math int, -- 數學 english int -- 英語 ); INSERT INTO student(id,NAME,age,sex,address,math,english) VALUES (1,'馬雲',55,'男','杭州',66,78),(2,'馬化騰',45,'女','深圳',98,87),
(3,'馬景濤',55,'男','香港',56,77),(4,'柳巖',20,'女','湖南',76,65),(5,'柳青',20,'男','湖南',86,NULL),(6,'劉德華',57,'男','香港',99,99),
(7,'馬德',22,'女','香港',99,99),(8,'德瑪西亞',18,'男','南京',56,65);
7.2 基礎查詢
- 語法:
select * from 表名;
- 示例:查詢姓名和年齡
SELECT `name` AS '姓名', `age` AS '年齡' FROM student;
- 示例:查詢地址
SELECT DISTINCT `address` AS '地址' FROM student;
- 示例:查詢姓名和地址
SELECT DISTINCT `name` as '姓名', `address` AS '地址' FROM student;
- 示例:查詢姓名和對應的分數
SELECT `name` AS '姓名', `math` AS '數學', `english` AS '英語', IFNULL( `math`, 0 ) + IFNULL( `english`, 0 ) AS '總分' FROM student;
7.3 條件查詢
- 語法:
select 字段1,字段2,……,字段n where 條件;
- 示例:查詢年齡>20歲的學生
SELECT * FROM student WHERE age >= 20;
- 示例:查詢年齡=20歲的學生
SELECT * FROM student WHERE age = 20;
- 示例:查詢年齡不等於20歲的學生
SELECT * FROM student WHERE age != 20;
SELECT * FROM student WHERE age <> 20;
- 示例:查詢年齡>=20而且年齡<=30的學生
SELECT * FROM student WHERE age BETWEEN 20 and 30;
SELECT * FROM student WHERE age >= 20 AND age <= 30;
- 示例:查詢年齡在22歲、19歲、25歲的學生
SELECT * FROM student WHERE age = 22 OR age = 19 OR age = 25;
SELECT * FROM student WHERE age in(22,19,25);
- 示例:查詢英語成績爲Null的學生
SELECT * FROM student WHERE english IS NULL
- 示例:查詢英文成績不爲Null的學生
SELECT * FROM student WHERE english IS NOT NULL
7.4 模糊查詢
- 示例:
select 字段1,字段2,……,字段n where 條件; -- where條件裏面使用Like關鍵字
- 示例:查詢姓馬的學生
SELECT * FROM student WHERE `name` LIKE '馬%';
- 示例:查詢姓名中第二個字是化的學生
SELECT * FROM student WHERE `name` LIKE '_化%';
- 示例:查詢姓名中包含馬的學生
SELECT * FROM student WHERE NAME LIKE '%馬%';
7.5 排序查詢
- 語法:
select 字段1,字段2,……,字段n where 條件 order by 字段1,字段2,……,字段n [asc|desc];
- 示例:查詢學生信息按照數學成績降序排序
SELECT * FROM student ORDER BY math DESC;
- 示例:查詢學生信息按照數學成績升序排序
SELECT * FROM student ORDER BY math ASC;
- 示例:查詢學生信息按照數學成績排名,若是數學成績一致,按照英語成績排序
SELECT * FROM student ORDER BY math ASC, english ASC;
7.6 聚合函數
- 將一列數據做爲一個總體,進行縱向的計算。
- 基本的聚合函數:
count(字段) -- 計算個數 sum(字段) -- 求和 avg(字段) -- 平均值 max(字段) -- 最大值 min(字段) -- 最小值
- 注意:
- 聚合函數計算的時候,會排除null值。
- 示例:求學生的人數
SELECT COUNT( * ) FROM student
- 示例:求學生數學成績的最大值
SELECT max( math ) FROM student
- 示例:求學生數學成績的最小值
SELECT min( math ) FROM student
- 示例:求學生數學成績的總和
SELECT sum( math ) FROM student
- 示例:求學生數學成績的平均值
SELECT avg( math ) FROM student
7.7 分組查詢
- 語法:
select 字段1,字段2,……,字段n where 篩選條件 group by 字段1,字段2,……,字段n having 分組後條件 order by 字段1,字段2,……,字段n [asc|desc];
- 示例:按性別分組,分別查詢男生和女生的平均分
SELECT sex, avg(math+english) FROM student GROUP BY sex
- 示例:按照性別分組,分別查詢男生和女生的人數
SELECT sex, count(*) FROM student GROUP BY sex
7.8 分頁查詢
- 語法:
select 字段1,字段2,……,字段n where 篩選條件 group by 字段1,字段2,……,字段n having 分組後條件 order by 字段1,字段2,……,字段n [asc|desc] limit 起始索引,幾條數據;
- 示例:
SELECT * FROM student LIMIT 0,3