Mysql学习笔记

一、数据库概述
概念:数据仓库,软件,安装在操作系统之上
作用:存储数据,管理数据
常见的数据库管理系统:Mysql、Oracle、DB2、MS sqlserver。
Mysql在互联网公司应用较多。
名词解释:
DB:DataBase(数据库,数据库实际上在硬盘上以文件的形式存在)
DBMS:DataBase Management System 数据库管理系统
SQL:结构化查询语言,是一门标准通用的语言,适用于所有的数据库产品。SQL属于高级语言,只要能看懂英语单词的,写出来的sql语句可以读懂什么意思。

表:table 是数据库的基本组成单元,所有的数据都以表格形式组织,目的是可读性强。一个表包括行和列。
行:被称为数据/记录(data)
列:被称为字段(column),每一个字段应该包括的属性:字段名、数据类型、相关的约束。
学习Mysql主要学习的是sql语句。
二、sql语言
DQL(数据查询语言):查询语句,凡是select语句都是查询语句。
DML(数据操作语言):insert delete update 对表当中的数据进行增删改。
DDL(数据定义语言):create drop alter 对表的结构的增删改。
TCL(事务控制语言):commit 提交事务、rollback 回滚事务。(TCL中的T是transaction)
DCL(数据控制语言):grant 授权,revoke 撤销权限等。
1、mysql常用命令
create database 数据库名称;
创建数据库。
select database();
查询当前使用的数据库。
\c,可以终止一条语句的执行。
可用\q,QUIT或EXIT退出mysql。如:mysql>q(ctrl+c).
查看建表语句:show create table 表名;
可以查看当初建表时的键表语句。
2、查询
①简单查询:
select 字段名1,字段名2,字段名3… from 表名 ;
字段可以参与数字运算。
注意:sql语句均以分号“;”结尾。sql语句对大小写不敏感(即不区分大小写)。
给查询结果的列重命名: select 字段名1,字段名2 as 新字段名2 from 表名;
若是新字段名中包含中文,则: select 字段名1,字段名2 as ‘新字段名2’ from 表名;
as可以省略。
select * from 表名;
查询所有字段。实际开发不建议使用*,效率较低。
②条件查询:
select 字段,字段… from 表名 where 条件;
执行顺序:先from,然后where,最后select。
在这里插入图片描述

and优先级比or更高。
select 字段名 from 表名 where 对某字段名的条件一 or 对某字段名的条件二;
等价于:
select 字段名 from 表名 where 对某字段名 in(条件一,条件二);
模糊查询like:
%代表任意多个字符,_代表任意一个字符
找出名字中含有o的: select name from table where name like ‘%o%’;
找出名字中第二个字母是o的: select name from table where name like ‘_o%’;
3、排序(升序、降序)
select 字段名1,字段名2… from 表名 order by 某个字段名;
默认升序。指定时:asc表示升序,desc表示降序。
select 字段名1,字段名2… from 表名 order by 某个字段名 asc;升序
select 字段名1,字段名2… from 表名 order by 某个字段名 desc;降序
多字段排序:
select 字段名1,字段名2… from 表名 order by 某个字段名 ,另外的某个字段名;
在前面的字段名优先级更大。有可能后面的字段名根本用不上。
4、分组函数:
在这里插入图片描述
在这里插入图片描述

所有的分组函数都是对某一组数据进行操作的。
例子:select sum(字段名) from 表名;
分组函数又叫多行处理函数。指输入多行,最终输出一行。分组函数自动忽略NULL。
单行处理函数:输入一行,输出一行。只要有NULL参与的运算,结果一定是null.
ifnull()空处理函数,可能为null的数据,被当作X处理。
ifnull(字段名,X)。
注意:分组函数不可以直接在where语句中使用。
count()与count(具体某个字段)的区别:count()统计总记录条数。count(某个字段)表示统计某个字段中不为NULL的数据总数量。
分组查询:group by 和having
在这里插入图片描述

分组函数一般都会跟group by联合使用。任何一个分组函数都是在group by语句执行结束之后才会执行的。当一条sql语句没有group by 时,整张表的数据会自成一组。
group by 在where之后执行。
多字段分组查询:
select 字段名1.字段名2…from 表名 group by 字段名1,字段名2;
能使用where的不要用having。只有group by 出现的时候才能用having.
查询结果集的去重:
select distinct 字段名 from 表名;
distinct前面不能有字段名。
5、连接查询
在实际开发中,大部分情况下都不是从单表查询数据,一般都是多张表联合查询取出最终结果。
一般一个业务都会对应多个表。
连接查询的分类:
根据表的连接方式划分:
内连接:又分为:等值连接、非等值连接、自连接
外连接:又分为:左外连接、右外连接
全连接(很少用)
①等值连接:
最大的特点是条件是等量关系。
语法:… A inner join B on 连接条件 where …
其中inner可以省略
②非等值连接:
最大的特点是条件是非等量关系。
语法与①一致。
③自连接:
最大特点是一张表看作两张表。
④外连接:
内连接:假设A和B表进行连接,使用内连接的话,凡是A表和B表能够匹配上的记录都查询出来。
外连接:假设A和B表进行连接,使用外连接的话,AB两张表中有一张表是主表,一张表是副表,主要查询主表中的数据,捎带着查询副表,当副表中的数据没有和主表中的数据匹配上,副表自动模拟出NULL与之匹配。
左外连接:表示左边的表是主表。
右外连接:表示右边的表是主表。
左连接有右连接的写法,右连接也有左连接的写法。
select … … from 表名 left outer join 表名 on 条件;
select … … from 表名 right outer join 表名 on 条件;
在实际开发中,外连接使用居多。
外连接最重要的特点:主表的数据无条件的全部查询出来。
6、子查询
select 语句嵌套select 语句,被嵌套的select语句是子查询。
select …(select)from …(select) where …(select);
union的应用:
union可以将查询结果集相加
select …
union
select…
union在两个select语句中间用。
limit的应用:
分页查询
limit是mysql中特有的,其他数据库没有。
limit取结果集中的部分数据。
语法机制:limit startIndex length
startIndex表示起始位置,length表示取几个。
在这里插入图片描述

7、表的创建
语法:
create table 表名{
字段名1 数据类型,
字段名2 数据类型,
字段名3 数据类型,

};

在这里插入图片描述

8、向表中插入数据
语法格式:
insert into 表名 {字段名1,字段名2,字段名3,…} value {值1,值2,值3,…};
要求:字段的数量和值的数量相同,并且数据类型要对应相同。
9、表的复制
语法:create table 表名 as select 语句;
将查询结果当作表创建出来。
10、修改、删除表中的数据
修改表中的数据:update 表名 set 字段名1=值1,字段名2=值2…where 条件;
没有条件时整张表更新。
删除表中数据:
delete from 表名 where 条件;
没有条件时全部删除。
11、约束
在创建表时候,可以给表的字段添加相应的约束,添加约束的目的是为了保证表中数据的合法性,有效性,完整性。
唯一约束(unique):约束的不能重复
非空约束(not null):约束的字段不能为null
主键约束(primary key):约束的字段不能重复也不能为null
外键约束(foreign key):
检查约束(check):mysql没有,Oracle有
①非空约束:
在这里插入图片描述

②唯一约束:

在这里插入图片描述

在这里插入图片描述

上下是不同的。
③主键约束:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

主键值自增:
在这里插入图片描述

④外键约束:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、存储引擎
数据库中各表均被指定的存储引擎处理。
服务器可用的引擎依赖于以下因素:
mysql的版本;
服务器在开发是如何配置;
启动选项;
mysql>SHOW ENGINES\G 可了解当前服务器中有哪些存储引擎可用。
mysql默认使用的存储引擎是InnoDB方式。
常见的存储引擎有:
①MyISAM存储引擎:
在这里插入图片描述

②InnoDB存储引擎:
在这里插入图片描述
在这里插入图片描述

③MEMORY存储引擎:
在这里插入图片描述

四、事务
一个事务是一个完整的业务逻辑单元,不可再分。
事务的存在是为了保证数据的完整性,安全性。
事务的四大特性:
原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency):事务前后数据的完整性必须保持一致。
隔离性(Isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability):事务一旦被提交则不可逆,被持久化到数据库中,接下来即使数据库发生故障也不应该对其有任何影响
在这里插入图片描述

五、索引
索引就相当于一本书的目录,通过目录可用快速的找到相对应的资源。
在数据库方面,查询一张表的时候有两种检索方式:
第一种:全表扫描。
第二种:根据索引检索(效率很高)。
索引虽然可以提高检索效率,但是不能随意添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护,是有维护成本的。
添加索引是给某一个字段,或者某些字段添加。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

六、数据库设计三范式
设计范式:指设计表的依据,按照这三范式设计的表不会出现数据的冗余。
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingshengda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值