第一章 数据库的基本概念

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数据库、表、数据的关系

在MySQL中的缩写 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