MySQL

MySQL

1. MySQL基本信息

1.1 数据库分类

关系型数据库:(SQL)

  • MySQOL, Oracle, Sql Server, DB2, SQLlite
  • 通过表和表之间,行和列之间的关系进行数据的存储

非关系型数据库:(NOSQL) Not Only SQL

  • Redis,MongDB
  • 非关系型数据库,对象存储,通过对象自身的属性来决定

1.2 DBMS(数据库管理系统)

DB存数据,DBMS管理和操作数据

  • 数据库的管理软件,科学有效地管理数据,维护和获取数据;
  • MySQL本质是数据库管理系统。

1.3 MySQL

是一个关系型数据库管理系统。

2. 操作数据库

2.1 数据库的字段属性

Unsigned:无符号整数,声明该列不能声明为负数;
zerofill:0填充,不足的位数使用0填充;
自增:自动在上一条记录的基础上+1,通常用来设置唯一的主键,必须为整数类型。可以自定义设计自增的起始值和步长;
非空:如果不赋值会报错;
default:如果不指定该列的值,则设置为默认值

2.2 创建数据库表

格式:

CREATE TABLE [IF NOT EXISTS] `表名`(
	`字段名` 列类型 [属性] [索引] [注释],
	`字段名` 列类型 [属性] [索引] [注释]
)[表类型][字符集设置][注释]

常用命令:

  • SHOW CREATE DATABASE school --查看创建数据库的语句
  • SHOW CREATE TABLE student --查看student数据表的定义语句
  • DESC student --显示表的结构

数据库引擎:

MYISAMINNODB
事务支持不支持支持
数据行锁定不支持支持
外键约束不支持支持
全文索引支持不支持
表空间的大小较小较大,约为2倍
  • MYISAM:节约空间,速度较快
  • INNODB:安全性高,事务的处理,多表多用户操作

2.3 修改删除表

修改:

  • ALTER TABLE 旧表名 RENAME AS 新表名:修改表名
  • ALTER TABLE 表名 ADD 字段名 列属性:增加表的字段
  • ALTER TABLE 表名 MODIFY 字段名 列属性[]:修改表的字段
  • ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]:字段重命名
    删除:
    DROP TABLE IF EXISTS 表名

2.4 DML

Data Manipulation Language数据库操纵语言

  • 插入语句:insert into 表名([字段1,字段2,字段3])values(‘值1’),(‘值2’),(‘值3’)…
  • 修改语句:update 表名 set column_name = value where [条件]
    删除语句:
  • delete from 表名 [where 条件]
  • truncate 表名

注意:
1.都可以删除数据,并且不会删除表结构;
2.truncate重新设置自增列,计数器会归零;不会影响事务;
3.使用delete删除后重启数据库,如果使用InnoDB,自增列会从1开始(存储在内存中,断电即失);如果使用MyISAM,继续从上一个自增量开始(存在文件中,不会丢失)。

2.5 DQL

Data Query Language:数据查询语言

  • 查询指定字段:select 字段… from 表
  • 去除重复数据:select distinct 字段 from 表
    联表查询
  • inner join:只返回两个表中联结字段相等的行
  • left join:会从左表中返回所有的值,即使右表中没有匹配
  • right join:会从右表中返回所有的值,即使左表中没有匹配
  • 排序:order by 字段名 asc/desc
  • 分页:limit 起始下标,页面大小
  • 分组:group by 字段名,having 条件
    聚合函数
  • count(字段):会忽略null值
  • count(*)/count(1):不会忽略null值
select完整语法

select distinct 要查询的表 from 表名
xxx join要连接的表 on 等值判断
where 具体的值,子查询语句
group by 字段
having 过滤分组的信息
order by 字段 desc/asc
limit startindex,pagesize

2.6 注意

运算符:
  • BETWEEN…AND…:在某个范围内
  • AND:与
  • OR:或
  • NOT:非
  • IS NULL:如果值为NULL,结果为真
  • IS NOT NULL:如果值为为NULL,结果为真
  • LIKE:%代表0到任意个字符,_代表一个字符
  • IN:a IN {a1,a2,a3…} 假设a在其中,结果为真

3. 事务

3.1 基本信息

1.ACID原则:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability);
2.原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生;
3.一致性:事务前后数据的完整性必须保持一致;
4.隔离性:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,事务之间要相互隔离;
5.持久性:指事务结束后的数据不随外界原因导致数据丢失
隔离所导致的问题:

  • 脏读:指一个事务读取了另一个事务未提交的数据;
  • 不可重复读:在一个事务内读取表中的某一行数据,多次读取结果不同;
  • 虚读(幻读):在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

4. 索引

4.1 分类

  • 主键索引(primary key):唯一的标识,主键不可重复,只能有一个列作为主键;
  • 唯一索引(unique key):避免重复的列出现;
  • 常规索引(key/index):默认的,index/key关键字来设置;
  • 全文索引(fulltext):在特定的数据库引擎下才有MyISAM;快速定位数据。

4.2 索引原则

  • 不要对经常变动的数据加索引
  • 索引一般加载常用来查询的字段上,且小数据量不需要加索引

5. 三大范式

  • 第一范式(1NF):原子性,保证每一列不可再分;
  • 第二范式(2NF):满足第一范式的前提下,每张表只描述一件事情;
  • 第三范式(3NF):满足第二范式的前提下,确保数据表中的每一列数据都和主键直接相关,而非间接相关。

6. JDBC

6.1 步骤

  • 定义用户信息和url
  • 连接数据库DriverManager
  • 获得执行sql的对象Statement
  • 获得返回的结果集
  • 释放连接
    **url:**协议://主机地址:端口号/数据库名?参数1&参数2&参数3

6.2 Connection类

代表数据库

  • commit():事务提交
  • rollback():事务回滚
  • setAutoCommit():数据库设置自动提交

6.3 Statement类

用于向数据库发送sql语句,像完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可。

  • executeQuery():查询操作,返回ResultSet;
  • execute():执行任何sql;
  • executeUpdate():更新/插入/删除。返回一个受影响的行数。

6.4ResultSet类

查询结果集,封装了所有的查询结果。

  • getObject():在不知道列类型的情况下使用
    知道结果的类型就使用指定类型
  • getString()/getInt()…
    遍历
  • next():移动到下一个数据
  • beforeFirst():移动到最前面
  • afterLast():移动到最后面
  • previous():移动到前一行
  • absolute(row):移动到指定行

6.5 PreparedStatement

防止sql注入问题:把传递进来的参数当作字符,假设其中存在转义,比如’。

6.5 注意

需要释放资源

  • resultSet.close();
  • statement.close();
  • connection.close();

6.6 数据库连接池

池化技术:预先准备好一些资源以便连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值