最全最细MySQL笔记(包含了SQL语句)


前言

这位一篇关于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是关系型数据库
关系型数据库是建立在关系数据模型基础上的数据库,简单来说,关系型数据库是由多张能互相连接的二维表组成的数据库,二维表如图所示
在这里插入图片描述
优点

  1. 都是使用表结构,格式一致,易于维护。
  2. 使用通用的SQL语言操作,使用方便,可用于复杂查询。
  3. 数据储存在磁盘中,安全。

三、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 字段列表 from1,2... where 条件;

--显式内连接
select 字段列表 from1[INNER] JOIN2 ON 条件;

7、外连接

--左外连接
select 字段列表 from1 LEFT [OUTER] JOIN2 ON 条件;

--右外连接
select 字段列表 from1 RIGHT [OUTER] JOIN2 ON 条件;

8、子查询

子查询概念:

  • 查询中嵌套查询,称嵌套查询为子查询。

  • 子查询根据查询结构不同,作用不同

  • 单列单行:作为条件值,使用=、!=、>、<等进行条件判断

select 字段列表 fromwhere 字段名 = (子查询);
  • 多列单行:作为条件值,使用in等关键字进行条件判断
select 字段列表 fromwhere 字段名 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;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值