1、数据库相关概念
数据库(database)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效地组织和管理存储在数据库中的数据
1.1 数据库( DataBase,简称DB)
存储和管理数据的仓库,数据是有组织的进行存储。
一个数据库服务器里面有可以有多个数据库。主要用来分类使用。我们可以建立学员管理系统数据库、电子商城数据库、CRM数据库、ERP数据库等等,主要用来将各个不同用途的数据,按照业务进行划分。
数据表:例如在学员管理系统数据库中。根据业务的不同又分为了不同的数据表。专门用来存放不同人员的数据。例如:学员数据表(学号、用户名、密码);老师数据表(用户名、密码,工作经验)
数据字段:也叫数据列。就是我们日常所见表格里面的列。在表格中,我们会将一张用户表分成多个列。如:用户编号、用户名、性别、年龄是字段。在真正的数据库中数据字段需要换成英文需要写成:id、username、sex、age。
数据行:真正的数据存在每一个表的行里面。字段(列)划分出来了一个表应该按照什么样的格式存数据。而行,是真正的数据。每一行需要遵循数据字段(列)的规范和要求进行存入数据。
1.2 数据库管理系统(DataBase Management System,简称 DBMS)
管理数据库的大型软件
在电脑上安装了数据库管理系统后,就可以通过数据库管理系统创建数据库来存储数据,也可以通过该系统对数据库中的数据进行数据的增删改查相关的操作。
注:我们平时说的MySQL数据库其实是MySQL数据库管理系统。
1.3 SQL(Structured Query Language,简称 SQL,结构化查询语言)
操作关系型数据库的编程语言
定义操作所有关系型数据库的统一标准,可以使用SQL操作所有的关系型数据库管理系统,以后工作中如果使用到了其他的数据库管理系统,也同样的使用SQL来操作。
2、关系型数据库
MySQL是一个真正的多用户、多线程SQL数据库服务器。它是以客户机/服务器结构实现的,由一个服务器守护程序以及很多不同的客户程序和库组成
关系型数据库:关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库
主要代表:SQL Server,Oracle, Mysql, PostgreSQL。
(1).容易理解,二维表的结构非常贴近现实世界,二维表格,容易理解。
(2)使用方便,通用的sql语句使得操作关系型数据库非常方便。
(3)易于维护,数据库的ACID属性,大大降低了数据冗余和数据不一致的概率。
数据模型:
MySQL中可以创建多个数据库,每个数据库对应到磁盘上的一个文件夹
在每个数据库中可以创建多个表,每张都对应到磁盘上一个 frm 文件
每张表可以存储多条数据,数据会被存储到磁盘中 MYD 文件中
3、SQL概述
3.1 通用语法
- SQL 语句可以单行或多行书写,以分号结尾(使用黑窗口操作数据库的时候必须用分号结尾才能运行该sql语句,在navicat中运行的时候直接选中要运行的sql语句便可以运行)。
- MySQL 数据库的 SQL 语句不区分大小写。
3.2 SQL分类
- DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列,索引等,DDL简单理解就是用来操作数据库,表等。常用的语句关键字包括create、drop、alter等
- DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改,DML简单理解就对表中数据进行增删改。常用的语句关键字主要包括insert、delete、update和select等。(DML:添加,修改,删除,DQL:查询)
- DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据),DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
- DCL(Data Control Language) 数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户,主要的语句关键字包括grant、revoke等。
4、DDL
4.1 操作数据库
查询所有的数据库
SHOW DATABASES;
创建数据库
在创建数据库的时候,不知道数据库有没有创建,直接再次创建已有的数据库就会出现错误。为了避免该类错误,在创建数据库的时候先做判断,如果不存在再创建。
#创建数据库
CREATE DATABASE 数据库名称;
#加入判断条件
CREATE DATABASE IF NOT EXISTS 数据库名称;
删除数据库
在删除数据库的时候,不知道数据库有没有删除,直接再次删除没有的数据库就会出现错误。为了避免该类错误,在创建数据库的时候先做判断,如果不存在再删除。
# 删除数据库
DROP DATABASE 数据库名称;
# 删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS 数据库名称;
使用数据库
#使用数据库
USE 数据库名称;
#查看当前使用的数据库
SELECT DATABASE();
4.2 DDL:操作表
操作表也就是对表进行增(Create)删(Retrieve)改(Update)查(Delete)。
查询表(SHOW )
SHOW TABLES;
查询表结构(CREATE )
DESC 表名称;
创建表
CREATE TABLE 表名 (
字段名1 字段类型1,
字段名2 字段类型2,
…
字段名n 字段类型n
);
特别说明:最后一行末尾,不能加逗号
删除表(DROP)
DROP TABLE 表名;
#删除表时判断表是否存在
DROP TABLE IF EXISTS 表名;
修改表(ALTER)
#修改表名
ALTER TABLE 表名 RENAME TO 新的表名;
#添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
#修改数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
#修改列名和数据类型
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
#删除列
ALTER TABLE 表名 DROP 列名;
5、DML
DML主要是对数据进行增(insert)删(delete)改(update)操作。
5.1 添加数据(INSERT )
#给指定列添加数据
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…);
#给全部列添加数据
INSERT INTO 表名 VALUES(值1,值2,…);
#批量添加数据
-- 推荐使用第一种
INSERT INTO 表名(列名1,列名2,…) VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
-- 省略字段名
INSERT INTO 表名 VALUES(值1,值2,…),(值1,值2,…),(值1,值2,…)…;
5.2 修改数据(UPDATE )
#修改表数据
UPDATE 表名 SET 列名1=值1,列名2=值2,… [WHERE 条件] ;
注意:
修改语句中如果不加条件,则将所有数据都修改!
像上面的语句中的中括号,表示在写sql语句中可以省略这部分
5.3 删除数据(DELETE )
DELETE FROM 表名 [WHERE 条件] ;
6、DQL(SELECT )
SELECT
字段列表(字段之间用逗号隔开,最后一个字段不要用逗号)
FROM
表名列表
WHERE
条件列表(条件之间用and连接,条件列表可以使用运算符)
GROUP BY
分组字段(字段之间用逗号隔开,最后一个字段不要用逗号)
HAVING
分组后条件(条件之间用and连接)
ORDER BY
排序字段(字段之间用逗号隔开,最后一个字段不要用逗号)
LIMIT
分页限定
6.1 查询所有数据
查询所有语句中的*不建议大家使用,因为在这写*不方便我们阅读sql语句。我们写字段列表的话,可以添加注释对每一个字段进行说明,同时某些情况下查询索引的字段可以提高查询的效率
SELECT * FROM 表名;
6.2 去除重复记录(这个很常用 distinct 关键字)
SELECT DISTINCT 字段列表 FROM 表名;
6.3 起别名
SELECT DISTINCT 字段列表 AS 字段别名 FROM 表名 AS 表别名; (AS 也可以省略)
6.4 模糊查询
使用like关键字,可以使用通配符进行占位:
(1)_ : 代表单个任意字符
(2)% : 代表任意个数字符
select * from 表名 where字段名 like '%xx%';
6.5 排序查询
SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式1],排序字段名2 [排序方式2] …;
上述语句中的排序方式有两种,分别是:
ASC : 升序排列 (默认值)
DESC : 降序排列
注意:如果有多个排序条件,当前边的条件值一样时,才会根据第二条件进行排序
6.6 聚合函数分类查询
函数名 功能
count(列名) 统计数量(一般选用不为null的列)
max(列名) 最大值
min(列名) 最小值
sum(列名) 求和
avg(列名) 平均值
SELECT 聚合函数名(列名) FROM 表;
注意:null 值不参与所有聚合函数运算
6.7 分组查询
SELECT 字段列表 FROM 表名 [WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having 区别:①执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。②可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
6.8 分页查询
大家在很多网站都见过类似的效果,如京东、百度、淘宝等。分页查询是将数据一页一页的展示给用户看,用户也可以通过点击查看下一页的数据。
SELECT 字段列表 FROM 表名 LIMIT 起始索引(第几页) , 查询条目数(每页条数);
注意: 上述语句中的起始索引是从0开始起始索引 = (当前页码 - 1) * 每页显示的条数