一、数据库相关概念
1.1数据库
- 存储和管理数据的仓库,数据是有组织的进行存储。
- 数据库的英文是DataBase ,简称DB。
数据库就是将数据存储在硬盘上,可以达到持久化存储的效果。通过使用数据库管理系统对数据库的数据进行查询编辑操作。
1.2数据库管理系统
- 管理数据库的大型软件
- 英文:DataBase Management System,简称 DBMS
在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数据进行数据的增删改查相关的操作。我们平时说的MySQL数据库其实是MySQL数据库管理系统。
1.3常见的数据库操作系统
- Oracle:收费的大型数据库,Oracle 公司的产品
- MySQL: 开源免费的中小型数据库。后来 Sun公司收购了 MySQL,而 Sun 公司又被 Oracle 收购
- SQL Server:MicroSoft 公司收费的中型的数据库。C#、.net 等语言常使用
- PostgreSQL:开源免费中小型的数据库
- DB2:IBM 公司的大型收费数据库产品
- SQLite:嵌入式的微型数据库。如:作为 Android 内置数据库
- MariaDB:开源免费中小型的数据库
我们可以通过数据库管理系统操作数据库,对数据库中的数据进行增删改查操作,而怎么样让用户跟数据库管理系统打交道呢?通过一门编程语言(SQL)来实现。
1.4 SQL
- 英文:Structured Query Language,简称 SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其他的数据库管理系统,也同样的使用SQL来操作。
二、MySQL介绍
关系型数据库:
关系型数据库是建立在关系模型基础上的数据库,简单来说就是,关系型数据库是由多张能互相连接的二维表组成的数据库。
接下来看关系型数据库的优点:
- 都是使用表结构,格式一致,易于维护。
- 使用通用的 SQL 语言操作,使用方便,可用于复杂查询。
- 关系型数据库都可以通过SQL进行操作,所以使用方便。
- 复杂查询。现在需要查询001号订单数据,我们可以看到该订单是1号客户的订单,而1号订单是李聪这个客户。以后也可以在一张表中进行统计分析等操作。
- 数据存储在磁盘中,安全
数据模型:
如上图,我们通过客户端可以通过数据库管理系统创建数据库,在数据库中创建表,在表中添加数据。创建的每一个数据库对应到磁盘上都是一个文件夹。比如可以通过SQL语句创建一个数据库(数据库名称为db1),eg:create database db1;
三、SQL介绍
1.SQL简介
- 英文:Structured Query Language,简称 SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求,每一种数据库操作的方式可能会存在一些不一样的地方,我们称为“方言”
2.通用语法
- SQL 语句可以单行或多行书写,以分号结尾。
- MySQL 数据库的 SQL 语句不区分大小写,关键字建议使用大写。
- 注释
-
-单行注释: -- 注释内容(数据库通用) 或 #注释内容(MySQL 特有)
注意:使用-- 添加单行注释时,--后面一定要加空格,而#没有要求。
-
多行注释: /* 注释 */
-
3.SQL分类
- DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
- DDL简单理解就是用来操作数据库,表等
- DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
- DML简单理解就对表中数据进行增删改
- DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
- DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
- DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
- DML简单理解就是对数据库进行权限控制。比如我让某一个数据库表只能让某一个用户进行操作等
四、DDL:操作数据库
操作数据库主要就是对数据库的增删查操作
1.查询所有的数据库 : SHOW DATABASES;
2.创建数据库:
create database 数据库名称;
- 创建数据库(判断,如果不存在则创建):
create database if not exists 数据库名称;
3.删除数据库:
drop database 数据库名称;
- 删除数据库(判断,如果存在则删除):
drop database if exists 数据库名称;
4.使用数据库:
use 数据库名称;
5.查看当前使用的数据库
select database();
五、DDL:操作表
操作表也就是对表进行增(Create)删(Retrieve)改(Update)查(Delete)。
1.查询当前数据库下所有表名称 : show tables;
2.查询表结构:
desc 表名称;
3.创建表:
create table 表名称 (
字段名1 数据类型1,
字段名2 数据类型2,
字段名3 数据类型3,
...
字段名n 数据类型n
);
注意:最后一行末尾,不能加逗号
eg:create table tb_user (
id int,
username varchar(20),
password varchar(32)
);
数据类型
MySQL 支持多种类型,可以分为三类:
4.删除表:
drop table 表名;
- 删除表(判断,如果存在则删除):
drop table if exists 表名;
5.修改表
- 修改表名:
ALTER TABLE 表名 RENAME TO 新表名;
eg:alter table student rename to stu;
- 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
eg:alter table stu add address varchar(50);
- 修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
eg:alter table stu modify address char(50);
- 修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
eg: alter table stu change address addr varchar(50);
- 删除列
ALTER TABLE 表名 DROP 列名 ;
eg: alter table stu drop addr;
六、DML
DML主要是对数据进行增(insert)删(delete)改(update)操作。
1.添加数据
-
给指定列添加数据:
INSERT INTO 表名(列名1,列名2,列名3, ...) VALUES (值1,值2,值3, ...);
-
给全部列添加数据:
INSERT INTO 表名 VALUES (值1,值2,值3, ...);
-
批量添加数据
1).指定列
INSERT INTO 表名(列名1,列名2,列名3, ...) VALUES
(值1,值2,值3, ...),
(值1,值2,值3, ...),
(值1,值2,值3, ...),
...
(值1,值2,值3, ...);
2).全部列
INSERT INTO 表名 VALUES
(值1,值2,值3, ...),
(值1,值2,值3, ...),
(值1,值2,值3, ...),
...
(值1,值2,值3, ...);
eg:
2.修改数据
- 修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,... [WHERE 条件];
注意:
1. 修改语句中如果不加条件,则将所有数据都修改!
2. 像上面的语句中的中括号,表示在写sql语句中可以省略这部分
eg:
3.删除数据
- 删除数据
delete from 表名 [where 条件];
eg:
七、DQL
数据库查询操作也是最重要的操作,所以此部分需要重点掌握。
SELECT
字段列表
FROM
表名
WHERE
条件列表
GROUP BY
分组字段
HAVING
分组后条件
ORDER BY
排序字段
LIMIT
分页限定
基础查询
- 查询多个字段
SELECT 字段名1,字段名2,字段名3,... FROM 表名;
-- 查询指定列数据
SELECT * FROM 表名;
-- 查询所有数据
- 去除重复记录
SELECT DISTINCT 字段列表 FROM 表名;
- 起别名
AS (AS也可忽略)
eg:
select name,age from stu;
select * from stu;
select address from stu;
select distinct address from stu;
select name,math as 数学成绩,english as 英文成绩 from stu;
select name,math 数学成绩,english 英文成绩 from stu;
条件查询
SELECE 字段列表 from 表名 where 条件列表;
eg:
select * from stu where age > 20;
select * from stu where age >= 20;
select * from stu where age >= 20 && age <= 30;
select * from stu where age >= 20 and age <= 30;
上面语句中 && 和 and 都表示并且的意思。建议使用 and 。
也可以使用 between ... and 来实现上面需求
select * from stu where age BETWEEN 20 and 30;
select * from stu where hire_date BETWEEN '1998-09-01' and '1999-09-01';
select * from stu where age = 18;
select * from stu where age != 18;
select * from stu where age <> 18;
select * from stu where age = 18 or age = 20 or age = 22;
select * from stu where age in (18,20 ,22);
null值的比较不能使用 = 或者 != 。需要使用 is 或者 is not
select * from stu where english = null; -- 这个语句是不行的
select * from stu where english is null;
select * from stu where english is not null;
模糊查询练习
模糊查询使用like关键字,可以使用通配符进行占位:
(1)_ : 代表单个任意字符
(2)% : 代表任意个数字符
排序查询练习
SELECE 字段名列表 from 表名 order by 排序字段名1 [排序方式1],排序字段名2 [排序方式2],...;
上述语句中的排序方式有两种,分别是:
- ASC : 升序排列 (默认值)
- DESC : 降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
eg:
聚合函数
概念 :
将一列数据作为一个整体,进行纵向计算。
聚合函数分类
语法:SELECT 聚合函数(列名) FROM 表名;
注意:null 值不参与所有聚合函数运算!!!
eg:
分组查询
SELECT 字段列表 FROM 表名 [where 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
eg:
where 和 having 区别: 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过 滤。 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
分页查询
语法:SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询条目数;
注意: 上述语句中的起始索引是从0开始
eg: