MySQl数据库设计
去重:
GROUP BY name;
查询db_source 的值大于2的
select * from dept group by db_source HAVING count(db_source)>2
为什么需要设计数据库?
节省数据的存储空间
能够保存数据的完整性
方便进行数据库应用系统的开发
ER图?
实体之间的关系、属性、
第一范式
第一范式的目标是确保每列的原子性
第二范式
要求每个表只能做一件事
第三范式
如果 关系满足2NF,要求表中的各列和主键有直接关系,不能间接相关
建表要满足范式。
第二章初识mysql
MySQL的优势?
1.运行速度快
2.使用成本低
3.可移植性强
4.适用用户广
mysql的运行机制
[
mysql的配置
使用配置向导配置
默认字符集utf8
将bin目录写入环境变量
root密码设置
utf8:一种unicode编码,解决国际上字符不统一的多字节编码,通用性强
mysql的安装目录
my.ini:记录mysql配置信息,可修改配置内容,如端口号,字符集等
命令行连接和关闭mysql
net start mysql
net stop mysql
语法
mysql –h服务器主机地址 –u 用户名 –p密码
本机连接:mysql -u root -p
数据库的相关语法
创建数据库
create database 数据库名;
查看数据库
show databases;
使用数据库
use 数据库名;
删除数据库
drop database 数据库名;
结构化查询语言
mysql数据类型-数值类型
UNSIGNED属性标识为无符号数
ZEROFILL属性宽度(位数)不足以0填充,默认为无符号数
mysql数据类型----字符串、日期类型
表的相关语法
查看表是否存在
show tables;
查看表描述
desc 表名;
删除表
DROP TABLE [IF EXISTS] 表名;
在删除表之前,先使用IF EXISTS语句验证表是否存在 (IF EXISTS)如果存在的意思
mysql的存储引擎
存储引擎的类型
MyISAM、InnoDB 、Memory、CSV等9种
MyISAM与InnoDB类型主要区别
适用场合
使用MyISAM: 不需事务,空间小,以查询访问为主
使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制
查看当前默认存储引擎
SHOW VARIABLES LIKE ‘storage_engine%’;
修改存储引擎修改my.ini配置文件
default-storage-engine= InnoDB
设置表的存储引擎
CREATE TABLE 表名(
#省略代码
)ENGINE=存储引擎;
mysql系统帮助
help 查询内容;
总结:
第三章高级查询一
修改表
修改表名
Alter table 旧表名 rename [to] 新表名;
添加字段
Alter table 表名 add 字段名 数据类型 属性;
修改字段
alter table 表名 change 原字段名 新字段名 数据类型 属性;
删除字段
alter table 表名 drop 字段名
添加主键
alter table 表名 add constraint 主键名 primary key 表名(主键字段)
添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段)
REFERENCES 关联表名(关联字段);
DML语句-----
插入多条数据记录
insert into 表名(字段名列表) values (值列表1,值列表2,…)
将查询结果插入新表
create table 新表(
select * from 原表;
)
更新数据记录
update 表名 set 字段1=值1,字段2=值2,… where 条件;
删除数据记录
delete from 表名 [where条件];支持事物回滚
truncate table 表名;执行速度比delete快
DQL语句
Limit[索引,行数]
常用函数-----聚合函数
常用函数----字符串函数
常用函数——时间日期函数
常用函数——数学函数
模糊查询
select * from 表名 where 字段名 CONCAT (‘%’,‘查询关键字’,‘%’)
包含查询
select * from 表名 where 字段名 in (查询条件1,条件2,…)
什么是子查询?
子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询
子查询和表连接
子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据
表连接更适合于查看多表的数据
子查询语法
select * from 表名 where exists(子查询);
第五章 事务、视图、索引、备份和恢复
1、事务的特性
事务必须具备以下四个属性,简称ACID属性
-
原子性(Atomicity)
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
-
一致性(Consistency)
当事务完成时,数据必须处于一致状态
-
隔离性(lsolation)
并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
-
持久性(Durability)
事务完成后,它对数据库的修改被永久保持
2、如何创建事务
MySql中支持事务的存储引擎有innoDB和BDB
开始事务
begin或start transaction;
提交事务
commit;
回滚(撤销)事务
rollback;
3、自动关闭和开启事务
默认情况下,每条单独的SQL语句视为一个事务。
关闭默认提交状态后,可手动开启、关闭事务
关闭/开启自动提交状态
set autocommit=0|1;
值为0:关闭自动提交
值为1:开启自动提交
4、视图的用图
- 筛选表中的行
- 防止未经许可的用户访问敏感数据
- 降低数据库的复杂程度
- 将多个物理数据库抽象为一个逻辑数据库
使用sql语句创建视图
create view view_name as <select 语句>
使用sql语句删除视图
drop view if exists view_name
使用sql语句查看视图
select 字段1,字段2,… from view_name
5、如何创建/删除索引
创建索引
唯一索引、全文索引或空间索引,可选
create [unique|fulltext|spatial] index index_name on table_name (column_name[length]…)
删除索引
删除表时,该表的所有索引同时会被删除
drop index index_name on table_name
查看索引
show index from table_name;
使用mysqldump命令备份数据库
mysqldump命令——MySQL一个常用的备份工具
将CREATE和INSERT INTO语句保存到文本文件
属于DOS命令使用mysqldump命令备份数据库
常用参数
6、mysql8的数据库驱动
7、mybatis-plus
2、需要dao接口继承baseMapper,添加注解Mapper或者Repository
3、在主启动类加上@MapperScan(“com.zhang”)注解
配置日志
主键id注解
自动填充时间
方式一:数据库
1.在表中新增字段create_time,update_time
方式二:代码级别
1.在实体类上时间属性添加@TableField(fill=fieldFill.insert)和@TableField(fill=fieldFill.update)
测试一下MP的乐观锁插件
1、给数据库添加version字段,默认值为1
2、实体类对应相同字段
3、添加@version注解
4、写个配置类
5.多线程下一定要加锁
分页插件:在狂神mybatis-plus中第10节有更简单的配置
分页插件:优先推荐:https://www.bilibili.com/video/BV1y7411y7am?p=14
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
return interceptor;
}
@Bean
public ConfigurationCustomizer configurationCustomizer() {
return configuration -> configuration.setUseDeprecatedExecutor(false);
}
}
逻辑删除
1.在表中增加逻辑删除字段deldted
2.在实体类写对应的属性和增加@TableLogic逻辑注解
3.配置
4.执行操作:走的是更新操作,而不是删除
5.记录依旧在数据局,就是逻辑删除字段变了
6.查询的时候会自动过滤这句数据操作
性能分析插件
作用:性能分析拦截器,用于输出每条sql语句及其执行时间
条件构造器:wrapper
代码自动生成器:
1.狂神说:mybatis-plus最后一节