MySQL笔记

1、SQL语句分类

DQL(数据查询语言) :查询语句,凡是select语句都是DQL。
DML(数据操作语言) : insert delete update, 对表当中的数据进行增删改。
DDL (数据定义语言) : create drop alter, 对表结构的增删改。
TCL (事务控制语言) : commit提交事务, rollback回滚事务。(TCL中的T是Transaction:事务)
DCL (数据控制语言) : grant授权、revoke撤销权限等。

2、mysql数据库加载

1、打开cmd窗口,输入mysql -uroot -p+(密码)连接数据库
2、建数据库:create database 数据库名;
3、导入sql文件到数据库:source +sql文件路径
4、使用该数据库:use 数据库名;
5、查看数据库表:show tables;

3、零散知识点

查询
简单查询
条件查询
查询顺序:from---where---group by---having---select---order by
分组查询:group by,having
连接查询:
1、内连接:等值连接、非等值连接、自连接
2、外连接:左连接、右连接
3、全连接

排序
排序:order by 字段名1,字段名2(先按照字段1排,数据一样则再按照字段2排序)
排序默认asc(升序),desc为降序,指定的话加在字段名后

分组函数count,sum,max,min,avg
例:select count(name)from emp;
规定:
① (分组函数会自动忽略null)
② (where后面不可以加分组函数)因为group by是在where后执行,所以要先分组才能执行分组函数

Count(*):统计总记录条数
Count(某个字段):统计该字段不为空的条数

单行处理函数:ifnull(字段名,代替值)一行一行处理
例:ifnull(sal,0):如果sal为null,则将sal的值代替为0

去重distinct

例:Select distinct dep,sal from emp;

字段两个以上表示联合起来去重

笛卡尔积现象
两张表字段乘积,加where条件不会减少匹配次数,只会筛选出合适的记录

select 
	e.name,d.dname
from
	emp e
join 
	dept d
on
	e.deptno = d.deptno

4、多表查询

例:

Select
Xxx
From
A
Join
B
On
A.xxx=B.xxx
Join
C
On 
A.xxx=C.xxx
Left join
A a1
On
A.xxx=a1.xxx

5、limit(用于分页查询)

1、limit是mysql特有的
2、limit取的是结果集的部分数据
3、语法

limit startindex,length

4、limit最后执行
5、例子:找出e表工资第4到第9的员工

select ename from e order by sal desc limit 3,6

6、常见数据类型:

1、
int 整型(Java的int)
bigint长整型(java的long)
float 浮点型(Java的float double)
==char == 定长字符串(String)
varchar 不定长字符串(StringBuffer,StringBuilder)
==date == 日期(java.sql.date)
BLOB 二进制大对象(视频,音频)(Object)
CLOB 字符大对象(大的文本)(Object)

2、char与varchar选择:
char适用于确定长度的字符串
varchar适用于不确定长度的字符串

7、表

插入

insert into xxx表(字段,字段.......values(对应值.......),values.......................

如果字段无对应值,且无设置默认值,则自动填入为空
复制表

create table 表名 as DQL语句

批量插入

insert into 表名 DQL语句

更新

update 表名 set 字段名1=1,字段名2=2........	where 条件

删除

delete from 表名 where 条件

删除大表数据
truncate table 表名:直接把表截断了,截到只剩个表头,不可回滚,永久丢失,表为空
增删改查术语:crud(create,retrieve(检索),update,drop)

8、约束

类型

非空约束(not null)
主键约束(primary key)
外键约束(foreign key)
唯一约束(unique)
检查约束(check):Oracle才有

唯一性约束
给一个列加unique:(列级约束)

create table A{
ID int unique
}

给多个列单独加unique:(列级约束)

create table B{
ID int unique,
name varchar(6) unique
}

多个列联合起来加unique:(表级约束)

create table C{
ID int ,
name varchar(6) ,
unique(ID,name)
}

主键约束
按照字段个数:
单一主键
复合主键(多个字段联合构成主键,不推荐)
按照性质:
自然主键
业务主键(不推荐)

如何实现主键值自增
在创表时,在对应主键后面加auto_increment

外键约束

foreign key (主键名) reference 表名(字段名)

9、存储引擎:表的存储方式

1、默认采用InnoDB引擎和utf8编码

2、常见存储引擎:
(1)MyISAM存储引擎:(最常用的)
不支持事务
由三个文件表示每张表:
格式文件(.frm)(存储格式)
数据文件(.MYD)(存储数据)
索引文件(.MYI)(存储索引)

(2)InnoDB存储引擎:
安全,支持事务

(3)MEMORY存储引擎:
不安全,不支持事务,查询速度最快

10、事务(Transaction)

1、事务:完整的一个业务逻辑单元,不可再分

如:A向B转账100
update bank set balance=balance-100 where name=’A’
update bank set balance=balance+100 where name=’B’
必须一起成功/失败,否则会出大问题

2、事务只和DML有关,保证数据安全,完整性

3、提交事务:清空操作的历史记录并向硬盘文件修改数据
回滚事务:只清空操作的历史记录

4、提交和回滚事务:commit,rollback

5、事务四大特性:ACID
A(atomicity):原子性: 事务是最小的工作单元,不可再分
C(consistence):一致性:事务必须保证多条DML语句同时成功或失败
I(insulate):隔离性:事务A与事务B之间具有隔离
D(durability):持久性:最终数据需要持久化到硬盘文件中,事务才算成功

6、隔离级别:
第一级别:读未提交(read uncommitted)
读取到对方还没提交的数据,可能会有脏数据(数据已经过期、错误或者没有意义)

第二级别:读已提交(read committed)
读取到对方已提交的数据(缺点:不可重复读)

第三级别:可重复读(repeatable read)
缺点:可能读取到幻象

第四级别:序列化读(serializable)
缺点:效率低

7、mysql默认自动提交事务,即执行DML语句一次就提交一次
怎么关闭自动提交?

start transaction

8、设置全局隔离级别:set global transaction isolation level +隔离级别

11、索引

1、给某一字段或某些字段添加索引

2、添加索引条件
数据量大
该字段很少DML操作
该字段经常出现在where子句中

3、主键和有unique约束的字段会自动添加索引

4、创建索引:

create index 索引名 on 表名(字段名)

删除索引:

drop index 索引名 on 表名

5、底层采用B+Tree数据结构

6、索引实现原理:通过B树缩小扫描范围,底层索引进行排序,分区,索引带着数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位数据

7、索引的分类?
单一索引:给单个字段添加索引
复合索引:给多个字段联合起来添加1个索引
主键索引:主键上会自动添加索引
唯一索引:有unique约束的字段上会自动添加索引

8、索引什么时候失效?

select ename from emp where ename like ' %A%' ;
模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效的。.

12、视图(view)

1、 什么是视图?
站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)。

2、 怎么创建视图?怎么删除视图?

create view myview as select empno, ename from emp ; .
drop view myview ;

注意:只有DQL语句才能以视图对象的方式创建出来。

3、对视图进行增删改查,会影响到原表数据。(通过视图影响原表数据的,不是直接操作的原表)
可以对视图进行CRUD操作(增删改查)。

4、 面向视图操作?

mysq1> select * from myview ;
update myview1 set ename='hehe' ,sal=1 where empno = 7369; //通过视图修改原表数据。.
delete from myview1 where empno = 7369; //通过视图删除原表数据。

5、视图的作用?
视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,java程序员只对视图对象进行CRUD。

13、DBA命令

1、将数据库当中的数据导出.
在windows的dos命令窗口中执行:(导出整个库)

mysqldump bjpowernode>D : \bjpowernode.sql -uroot -p333

在windows的dos命令窗口中执行:(导出指定数据库当中的指定表)

mysqldump bjpowernode emp>D : \bjpowernode.sql -uroot -p123

2、导入数据

create database bjpowernode ;
use bjpowernode ; 
source D: \bjpowernode . sql

14、数据库设计三范式

1、 什么是设计范式?
设计表的依据。按照这个三范式设计的表不会出现数据冗余。

2、三范式都是哪些?
第一范式:任何一张表都应该有主键, 并且每一个字段原子性不可再分
第二范式:建立在第一范式的基础之上,所有非主键字段完全依赖主键,不能产生部分依赖。
口诀:多对多?三张表,关系表两个外键。

第三范式:建立在第二范式的基础之上,所有非主键字段直接依赖主键,不能产生传递依赖
口诀:一对多?两张表,多的表加外键。

3、 一对一怎么设计?
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值