数据库相关概念
数据库:
- 存储数据的仓库,数据是有组织的进行存储
- 英文:DataBase 简称DB
数据库管理系统:
- 管理数据库的大型软件
- 英文:DataBase Management System,简称DBMS
SQL
- 英文:Stryctured Query Laguage,简称SQL,结构化查询语言
- 操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
安装Mysql数据库
1.下载
官网 mysql数据库下载
下载完成后解压到文件夹
配置环境变量:
path中增加:
在文件根目录中增加my.ini文件
文件中写入内容:
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
default-storage-engine=INNODB
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2.部署mysql服务器在你的电脑中
管理员运行cmd,并输入:
mysqld --initialize-insecure
mysqld --initialize
3.启动/关闭服务
cmd中输入启动mysql服务:
net start mysql
停止服务:
net stop mysql
如遇msvcp120.dll等错误
dll修复工具下载
4.修改默认账户密码
mysqladmin -u root password 1234
5.登录mysql
mysql -uroot -p1234
mysql数据模型
关系型数据库
关系型数据库时建立在关系模型基础上的数据库,简单说,关系型数据库是由多张能互相连接的二维表组成的数据库
优点
1.都是使用表结构,格式一致,易于维护
2. 使用通用SQL语言操作,使用方便,可用于复杂查询
3.数据存储在磁盘中,安全
SQL语句
- 英文:Structured Query Language ,简称SQL
- 结构化查询语言,一门操作关系型数据库的编程语言
- 定义操作所有关系型数据库的统一标准
- 对于同一个需求,每一种数据库操作的方式可能会存在以下不一样的地方,我们称为“方言”
通用语法:
1.SQL语句可以单行也可以多行,以分号结尾
2.Mysql数据库的SQL语句不区分大小写,关键字建议使用大写
3.注释:
- 单行注释: -- 注释内容 或 #注释内容(MySQL特有)
- 多行注释 :/* 注释 */
SQL分类
- DDL(data Definition Language)数据定义语言,定义数据库对象:数据库,表,列等
- DML(data Manipulation Language)数据操作语言,对数据库中表的数据进行增删改查
- DQL(data Query Language)数据查询语言,用来查询数据库中表的记录
- DCL(data Control Language)数据控制语言,定义数据库的访问权限和安全级别,及创建用户
DDL操作数据库
1.查询
show databases;
2.创建
创建数据库
create database 数据库名称;
创建数据库(判断,如果不存在则创建)
create database if not exists 数据库名称;
3.删除
删除数据库
drop database 数据库名称;
删除数据库(判断,如果存在着删除)
drop database if exists 数据库名称;
4.使用数据库
查看当前使用的数据库
select database();
使用数据库
use 数据库名称
DDL操作表
查询表(Retrieve)
查询当前数据库下所有表名称
show tables;
查询表结构
desc 表名称;
创建表(Create)
create table 表名 (
字段名1 数据类型1,
字段名2 数据类型2,
.....
字段名n 数据类型n
);
注意:最后一行末尾,不能加逗号
SQL数据类型
常用:
int类型
double类型
score double(总长度,小数点后保留的位数)
date类型(日期型,存储年月日)
char类型(字符串类型,定多长就有多长)
name char(长度)
varchar类型(字符串型,可以根据内容长度调整存储空间)
删除表(Delete)
1.删除表
drop table 表名;
2.删除表时判断表是否存在
drop table if exists 表名;
修改表(Update)
1.修改表名
alter table 表名 rename to 新的表名;
2.添加一列
alter table 表名 add 列名 数据类型;
3.修改数据类型
alter table 表名 modify 列名 新数据类型;
4.修改列名和数据类型
alter table 表名 change 列名 新列名 新数据类型;
5.删除列
alter table 表名 drop 列名;
DML操作数据
添加数据(insert)
1.给指定列添加数据
insert into 表名(列名1,列名2,....) values(值1,值2,.....);
2.给全部列添加数据
insert into 表名 values(值1,值2,....);
3.批量添加数据
insert into 表名(列名1,列名2,...) values(值1,值2,....),(值1,值2,....),(值1,值2,....)...;
insert into 表名 values(值1,值2,....),(值1,值2,....),(值1,值2,....)...;
修改表数据(updata)
update 表名 set 列名1=值1,列名2=值2,....[where 条件];
注意:修改语句中如果不加条件,则将所有数据都修改
删除数据(delete)
delete from 表名 [where 条件]
注意:删除语句中如果不加条件,则将所有数据都删除
DQL查询数据
基础语法:
select
字段列表
from
表名列表
// 条件查询
where
条件列表、
//分组查询
group by
分组字段
having
分组后条件
//排序查询
order by
排序字段
//分页查询
limit
分页限定
基础查询(select)
1.查询多个字段
select 字段列表 from 表名;
select * from 表名; -- 查询所有数据
2.去除重复记录
select distinct 字段列表 from 表名;
3.起别名(给字段)
as: as也可以省略
条件查询(where)
1.条件查询语法
select 字段列表 from 表名 where 条件列表
2.条件
排序查询(order by)
1.排序查询语法
select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段名2[排序方式2]...;
排序方式:
- ASC:升序排列(默认值)
- DESC:降序排列
注意:如果有多个排序条件,当前变的条件值一样时,才会根据第二条件进行排序
聚合函数
1.概念
将一列数据作为一个整体,进行纵向计算
2.聚合函数分类
函数名 | 功能 |
count(列名) | 它统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
3.聚合函数语法:
select 聚合函数名(列名) from 表;
注意:null值不参与所有聚合函数运算
分组查询(group by)
1.分组查询语法
select 字段列表 from 表名 [where 分组前条件限定] group by [having 分组后条件筛选];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
where 和 having 区别
- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤
- 可判断的条件不一样:where不能对聚合函数进行判断,having可以。
执行顺序:where > 聚合函数 >having
分页查询
1.分页查询语法
select 字段列表 from 表名 limit 起始索引 ,查询条目数;
- 起始索引:从0开始
计算公式:起始索引= (当前页码-1)*每页显示条目数
tips:
- 分页查询limit是mysql数据库的方言
- oracle分页查询使用rownumber
- sql server分页查询使用top
约束
概念:
- 约束是作用于表中列上的规则,用于限制加入表的数据
- 约束的存在保证了数据库中数据的正确性,有效性和完整性
分类
约束名称 | 描述 | 关键字 |
非空约束 | 保证列中所有数据不能有null值 | not null |
唯一约束 | 保证列中所有数据各不相同 | unique |
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 (auto_increment 实现主键自增长) | primary key |
检查约束 | 保证列中的值满足某一条件 | check |
默认约束 | 保存数据时,未指定的值则采用默认值 | default |
外键约束 | 外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性 | foreign key |
tips:MySQL不支持检测约束
外键约束
概念:
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性
语法:
(1)添加约束
-- 创建表时添加外键约束
create table 表名(
列名 数据列表,
......
[constraint] [外键名称] foreign key(外键列名) references 主表(主表列名)
);
-- 建完表后添加外键约束
alter table 表名 add constraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
(2)删除约束
alter table 表名 drop foreign key 外键名称
数据库设计
概念:
- 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型
- 建立数据库中的表结构以及表与表之间的关联关系的过程
- 有哪些表?表里有哪些字段?表和表之间有什么关系?
设计的步骤
- 需求分析(数据是什么?数据具有哪些属性?数据和属性之间的特点)
- 逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选用的数据库管理系统)
- 物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
- 维护设计(1.地新的需求进行建表;2.表优化)
表关系
一对一
- 如:用户和用户详情
- 一对一关系多用于表的拆分,将一个实体中经常使用的字段放在一张表,不经常使用的字段放在另一张表,用于提升查询性能
一对多
- 如:部门和员工
- 一个部分对应多个员工,一个对应一个部门
- 实现方式:在多的一方建立外键,指向一的一方的主键
多对多
- 如:商品和商品订单
- 一个商品对应多个订单,一个订单包含多个商品
- 实现方式:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键
多表查询
笛卡尔积:取A,B集合所有组合情况
多表查询:从多张表查询数据
连接查询:
内连接:相当于查询A B交集数据
外连接:
左外连接:相当于查询A表所有数据和交集部分
右外连接:相当于查询B表所有数据和交集部分数据
子查询
内连接
1.内连接查询语法
-- 隐式内连接
select 字段列表 from 表1,表2.... where 条件;
-- 显示内连接
select 字段列表 from 表1 [inner] join 表2 on 条件;
内连接相当于查询AB交集数据
外连接
1.外连接查询语法
-- 左外连接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
-- 右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件;
左外连接:相对于查询A表所有数据和交集部分数据
右外连接:相当于查询B表所有数据和交集部分数据
子查询
1.子查询根据查询结果不同,作用不同
- 单行单列:作为条件值,使用 = != > < 等条件进行条件判断
select 字段列表 from where 字段名 = (子查询)
- 多行单列:作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表 where 字段名 in (子查询)
- 多行多列:作为虚拟表
select 字段列表 from (子查询) where 条件