前言
这位一篇关于MySQL得学习笔记,其中包含了MySQL相关知识,当然最终要的就是SQL语句的知识,所有数据库得学习都需要掌握SQL语句。
一、MySQL
在官网上下载好MySQL(网上有很多教学视频,可以观看如何下载,本人不建议下载最新版本,我个人觉得新版本有些不稳定,当然根据个人需求,看自己喜好)
·······下好之后
1、修改默认账户密码:
用电脑cmd管理员身份运行
—输入 mysqladmin -u root(用户名) -password 1234(密码,可以自己设置)
2、登录MySQL
登录本地 : mysql -uroot(root是名字) -p (密码)
还有一种方式,就是输入:mysql -uroot -p 按回车再输入密码
登录成功后就是出现如下这个的代码;
3、退出MySQL
输入:exit 按回车
二、MySQL数据模型
MySQL是关系型数据库
关系型数据库是建立在关系数据模型基础上的数据库,简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库,二维表如图所示
优点:
- 都是使用表结构,格式一致,易于维护。
- 使用通用的SQL语言操作,使用方便,可用于复杂查询。
- 数据储存在磁盘中,安全。
三、SQL(英文:Structured Query Language)
建议下载Navicat,更能直观的看数据表和更方便写sql语句
(想要“科学使用”Navicat 16,可以call me)
- 结构化查询语言,一门操作关系型数据库的编程语言;
- 定义操作所有关系型数据库的统一标准;
- 对于同一需求,每一种数据库操作的方式可能会存在一些不一样的地方,成为“方言”。
1、SQL通用语法
(1)SQL语句可以单行或多行写,以分号结尾
(2)MySQL数据库的SQL语句不区分大小写(关键字建议用大写)
(3)注释
- 单行注释 --(空格)注释内容,或用#来进行注释内容(#注释是mysql独有)
2、SQL分类
- DDL(Data Definition Language)
数据定义语言,用来定义数据库对象;数据库,表,列等 - DML(Data Manipution Language)
数据操作语言,用来对数据中表的数据进行增删改 - DQL(Data Query Language)
数据查询语言,用来查询数据库中表的记录(数据) - DCL(Data Control Language)
数据控制语言,用来定义数据库的访问权限和安全级别,及创建用户
3、DDL(Data Definition Language):操作数据库,表等
1、查询数据库
Show DataBases;
2、创建
- 创建数据库
Create DataBase 数据库名称;
- 创建数据库(判断,如果不存在则创建)
Create DataBase if not Exists 数据库名称;
3、删除
- 删除数据库
Drop DataBase 数据库名称;
- 删除数据库(判断,如果存在则删除)
Drop DataBase if Exists 数据库名称;
4、使用数据库
- 查看当前使用的数据库
Select DataBase();
- 使用数据库
use 数据库名称;
4、DDL(Data Definition Language):操作表
1、查询表
- 查询党建数据库下所有表名称
Show Tables;
- 查询表结构
Desc 表名称;
2、创建表
Create Table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
...
字段名n 数据类型n //注意:最后一行不加逗号
)
比如
Create Table Student(
age int,
name char,
sex char,
garde double,
tele varchar(11) //varchar可以变成字符串,()内就是允许字符串的最大长度
//注意:最后一行不加逗号
)
3、删除表
Drop Table 表名;
- 删除表时判断表是否存在
Drop Table if Exists 表名;
4、修改表
- 修改表名
Alter Table 表名 Rename To 新的表名;
- 添加一列
Alter Table 表名 ADD 列名 数据类型;
如:添加之前
添加一列之后
- 修改数据类型
Alter Table 表名 modify 列名 新的数据类型;
- 修改列名和数据类型
Alter Table 表名 change 列名 新列名 新数据类型;
- 删除列
Alter Table 表名 Drop 列名;
5、DML(Data Manipulation Language):对表中的数据进行增删改
(1)添加数据
- 给指定的列添加数据
Insert into 表名(列名1,列名2,....) values(值1,值2,....);//列名与值一一对应
- 给全部列添加数据
Insert into 表名 values(值1,值2,...);
- 批量添加数据
//第一种写法
Insert into 表名(列1,列2,...) values(值1,值2,...),(值1,值2,...),(值1,值2,...),....;//第一个值的括号对应第一列1,依次类推
//第二种写法
Insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...),....;
(2)修改数据
- 修改表数据
//不加条件
Update 表名 set 列名1=值1,列名2=值2,...;
//加条件
Update 表名 set 列名1=值1,列名2=值2,... where 条件;
注:修改语句中如果不加条件,则将所有数据都修改!!
- 删除数据
//不加条件
Delete from 表名;
//加条件
Delete from 表名 where 条件;
注:删除语句中如果不加条件,则将所有数据都删除!!
6、DQL(Data Query Language):对数据的查询操作
- 查询语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
(1)基础查询
- 查询多个字段
Select 字段列表 from 表名;
select *from 表名;//查询所有数据
- 去除重复记录
select distinct 字段列表 from 表名;
- 起别名
AS //AS也可以省略
(2)条件查询
select 字段列表 from 表名 where 条件列表;
条件:
(3)排序查询
select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段2[排序方式2]...;
排序方式:
1.ASC:升序排列(默认值)
2.DESC:降序排列
注:如果有多个排序条件,挡前边的条件值一样时,才会根据第二条件进行排序!!
(4)分组查询
-
聚合函数
(A)概念:将一列数据作为一个整体,进行纵向计算。
(B)聚合函数分类
(C)聚合函数语法
select 聚和函数名(列名) from 表名;
注意:null值不参与所有聚合函数运算
- 分组查询语法
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段;查询其他字段无任何意义!!
where 和 having 的区别:
1、执行时间不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
2、科判断的条件不一样:where不能对聚合函数进行判断,having可以。
3、执行顺序:where>聚合函数>having
- 分页查询
分页查询语法:
select 字段列表 from 表名 limit 起始索引,查询条目数;
注:
起始索引:从0开始。
计算公式:起始索引=(当前页码-1)*每页显示的条数
tips:
1、分页查询limit 是MySQL的”方言“(独有)。
2、Oracle分页查询使用rownumber。
3、SQL Server分页查询使用top。
四、约束
1、约束的概念
- 约束是作用与列表上的规则,用于限制加入表的数据。
- 约束的存在保证了数据库中数据的正确性,有性性和完整性。
2、约束的分类
tips: MySQL不支持检查约束
自动增长:auto-increment 当列是数字类型并且唯一约束
3、非空约束
- 概念:非空约束用于保证列中所有数据不能有NULL值。
- 语法
//(1)添加约束
--创建表时添加非空约束
create table 表名(
列名 数据类型 NOT NULL;
...
);
--建完表后添加非空约束
alter table 表名 modify 字段名 数据类型 NOT NULL;
//(2)删除约束
alter table 表名 modify 字段名 数据类型;
4、唯一约束
- 概念:唯一约束用于保证列中所有数据各不相同
- 语法
//(1)添加约束
--创建表时添加唯一约束
//第一种写法
create table 表名(
列名 数据类型 UNIQUE[AUTO_INCREMENT],
.....
--AUTO_INCREMENT 当不指定值时自动增长
);
//第二种写法
create table 表名(
列名 数据类型,
....
[constraint] [约束名称] UNIQUE(列名)
);
--建完表后添加唯一约束
alter table 表名 modify 字段名 数据类型 UNiQUE;
//(2)删除约束
alter table 表名 drop index 字段名;
5、主键约束
- 概念:1.主键是一行数据的唯一标识,要求非空且唯一
注:一张表只能有一个主键!!
- 语法
//(1)添加约束
--创建表时添加主键约束
//第一种写法
create table 表名(
列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
....
);
//第二种写法
create table 表名(
列名 数据类型,
....
[constraint] [约束名称] PRIMARY KEY
);
--建完表后添加主键约束
alter table 表名 ADD PRIMARY KEY [字段名];
//删除约束
alter table 表名 drop PRIMARY KEY;
6、默认约束
- 概念:保存数据时,未指定值则采用默认值
- 语法
//(1)添加约束
--创建表时添加默认约束
create table 表名(
列名 数据类型 DEFAULT 默认值,
...
);
--建完表后添加默认约束
alter table 表名 alter 列名 set default 默认值;
//(2)删除约束
alter table 表名 alter 列名 drop default;
7、外键约束
- 概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
- 语法
//(1)添加约束
--创建表时添加外键约束
create table 表名(
列名 数据类型,
....
[constraint] [外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);
--建完表后添加外键约束
alter table 表名 add constraint 主键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
//(2)删除约束
alter table 表名 drop FOREIGN KEY 外键名称;
五、数据库设计
1、数据库设计概念以及步骤
(1)软件的研发步骤
需求分析(产品经理→产品原型)
↓
设计(架构师、开发工程师→软件结构,数据库设计,接口设计,过程设计)
↓
编码(开发工程师)
↓
测试(测试工程师)
↓
安装部署(运维工程师)
(2)数据库设计概念
- 数据库设计就是根据业务系统的具体需求,结合我们所选用的DBMS,为这个业务系统构造出最优的数据存储模型。
- 建立数据库中的表结构以及表与表之间的关联关系的过程
- 搞清楚三个问题:有哪些表?表里有哪些字段?表和表之间有什么关系?
(3)数据库设计的步骤
(A)需求分析(数据是什么?数据具有哪些属性?数据与属性的特点是什么)
(B)逻辑分析(通过ER图对数据库进行逻辑建模,不需要考虑我们所选的数据库管理系统)
(C)物理设计(根据数据库自身的特点把逻辑设计转换为物理设计)
(D)维护设计(1.对新的需求进行建表 2.进行表优化)
2、表关系一对多
- 一对多(多对一)
如:部门表和员工表(一个部门→多个员工;一个员工→一个部门) - 实现方式:在多的一方建立外键,指向一的一方的主键
3、表关系多对多
-
多对多
如:订单和商品(一个商品→多个订单;一个订单→多个商品) -
实现方式:建立第三张中间表,中间至少包含两个外键,分别关联两个主键
4、表关系一对一
- 一对一
如:用户和用户详情
一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提示查询性能。 - 实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)
5、多表查询
- 笛卡尔积:取A、B集合所有组合情况。
- 多表查询:从多张表查询数据
- 连接查询:内连接:相当于查询A、B交集数据
外链接:左外连接:相当与查询A表所有数据和交集部分的数据
右外连接:相当与查询B表所有数据和交集部分的数据
- 子查询
6、内连接
内连接语法:
--隐式内连接
select 字段列表 from 表1,表2... where 条件;
--显式内连接
select 字段列表 from 表1[INNER] JOIN 表2 ON 条件;
7、外连接
--左外连接
select 字段列表 from 表1 LEFT [OUTER] JOIN 表2 ON 条件;
--右外连接
select 字段列表 from 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
8、子查询
子查询概念:
-
查询中嵌套查询,称嵌套查询为子查询。
-
子查询根据查询结构不同,作用不同
-
单列单行:作为条件值,使用=、!=、>、<等进行条件判断
select 字段列表 from 表 where 字段名 = (子查询);
- 多列单行:作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表 where 字段名 in (子查询);
- 多列多行:作为虚拟表
select 字段列表 from (子查询) where 条件;
9、事物
(1)事物简介:
- 数据库的事物(Transaction)是一种机制,一个操作序列,包含了一组数据库操作命令。
- 事物把所有的命令作为一个整体一起向系统提交操作请求,即这一组数据库的命令要么同时成功,要么同时失败。
- 事务是一个不可分割的逻辑单元
--开始事物
start transaction;
//或者
begin;
--提交事物
commit;
--回滚事物
rollback;
(2)事物特征(四大)
- 原子性(Atomicity):事物是不可分割的最小单位,要么同时成功,要么同时失败
- 一致性(Consistency):事物完成时,必须使所有的数据都保持一致状态
- 隔离性(Isolation):多个事物之间,操作的可见性
- 持久性(Durability):事物一旦提交或回滚,它对数据的改变就是永久的
(3)MySQL事物默认的自动提交
--查看事物的默认提交方式
select @@autocommit;
--1 自动提交 0 手动提交
--修改事物提交方式
set @@autocommit = 0;