数据库个人总结

关系型数据库的特点

关系型数据库是主流的数据库类型
优点
易于维护:都是使用表结构存储数据,格式一致
使用方便: SQL 语句通用,可用于不同关系型数据库
复杂查询:可以通过 SQL 语句在多个表之间查询出复杂数据
缺点
读写性能差,尤其是还是数据的高效读写
固定的表结构,灵活度少欠
高并发读写时,硬盘 I/O 决定了读写速度

非关系型数据库的特点

保存数据的格式多样
对于海量数据的读写性能高
不支持复杂查询

sql语句

数据库

创建   create database 数据库名;

删除   drop  database 数据库名

使用   use 数据库名

创建

create table 表名(
字段名 数据类型 [字段特征],
字段名 数据类型 [字段特征],
...
字段名 数据类型 [字段特征]
)




-- 例子
-- 创建数据库gamedb
create database gamedb;
-- 切换数据库
use gamedb;
-- 创建游戏角色表hero
create table hero(
-- 编号 整型 非空 主键 自增
id int not null primary key auto_increment comment '编号',
-- 姓名 字符串 非空 唯一
name varchar(20) not null unique comment '姓名',
-- 定位 字符串 非空
position varchar(20) not null comment '定位',
-- 性别 字符串 非空 默认男
sex char(1) not null default '男' comment '性别',
-- 价格 整型 非空 默认4800
price int not null default '4800' comment '价格',
-- 上架日期
shelf_date date comment '上架日期'
)
-- 创建战斗表battle
create table battle(
hero_id int not null ,
position varchar(20),
-- 外键 hero_id参考hero表中的id字段
foreign key (hero_id) references hero(id)
)

删除  drop table 表名

修改(对数据)

-- 增
insert into 表名 values(字段1,字段2,。。。) where 条件

-- 删
delete from 表名 where 条件

-- 改

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

--查

select  from 表名 where 条件

部分拓展

-- 模糊查询

-- 字段 like '%娜%'
-- 带有'娜'字
-- 字段 like '张%'
-- ‘张’字开头
-- 字段 like '%儿'
-- ‘儿’字结尾
-- 字段 like '%瑞_'
-- 倒数第二个字为‘瑞’
-- 字段 like '___'
-- 3个字
update 表名 set 字段 = '值' where 字段 like ‘%文字%’


-- 分页

-- 查询前N条记录
select * from 表名 limit N;
-- 查询从索引N开始的M条记录
select * from 表名 limit N,M;
-- 每页显示size条,第page页
select * from 表名 limit (page-1)*size,size




-- 去重复

select distinct 字段名 from 表名;

-- 排序
select * from 表名 where 条件 order by 排序字段 [ASC/DESC],排序字段 [ASC/DESC]...

实际业务

登录

--接收账号密码查询用户表中是否存在记录
select * from 表 where 账号=? and 密码=?

--如果能查询到数据,说明存在该用户,可以登录;如果查询结果为Null,说明用户名或密码错误

注册

-- 接收账号密码,判断是否存在该账号,不存在则添加到用户表中
select * from 表 where 账号=?
insert into 表 values(null,账号,密码)

充值

-- 登录成功后,修改余额字段

update 表 set 余额=余额+充值金额 where 用户编号=?

JDBC

Java数据库连接

核心接口
  • Connection:用于设置连接的数据库的地址、账号、密码
  • PreparedStatement:用于预处理、执行sql语句
  • ResultSet:用于接收查询后的数据

数据库建表需要注意

  • 一对一:创建各自的实体表,在任意一张表中添加另一张表的主键字段,并添加唯一约束
  • 一对多/多对一:先创建主表(),再创建从表(),在从表中添加主表中的主键字段,外键可选
  • 多对多:创建各自的实体表,再创建第三张表:"联系表",在"联系表"中添加两个实体表中的主键字段,外键可选

JDBC

Java 提供了一套规范用于连接各种数据库。不同的数据库厂商根据该规范设计连接驱动。
java.sql 包下一组接口用于操作数据库。
Connection 接口 用于获取连接对象
PreparedStatement 接口 用于发送 sql 语句,处理 sql 语句
ResultSet 接口 用于保存查询后的结果集

加载MySQL驱动

连接 MySQL 数据库字符串
Class.forName("com.mysql.cj.jdbc.Driver");
String url="jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai";
String username="root";
String password="root";
查询的步骤

1.获取连接对象Connection

2.构造sql语句String

3.预处理sql语句pst=conn.prepareStatement(sql)

4.sql语句中的?赋值pst.setXXX(?顺序,)

5.调用executeQuery()得到ResultSet结果集

6.遍历结果集rs.next()rs.getXXX(字段顺序/字段名)

7.释放资源

增删改的步骤

1.获取连接对象Connection

2.构造sql语句String

3.预处理sql语句pst=conn.prepareStatement(sql)

4.sql语句中的?赋值pst.setXXX(?顺序,)

5.调用executeUpdate()得到受影响的行数

6.释放资源

事务 transaction
一组 sql 执行单元,要么全部执行,要么全部不执行
事务的特性 ACID
原子性 Atomicity
事务是最小的执行单元
一致性 Consistency
事务执行前后,数据整体保持一致。
隔离性 Isolation
各个事务之间应当互不干涉
持久性 Durability
事务一旦提交,改变是永久的
事务并发出现的问题
脏读
事务 A 读取到了事务 B 未提交的数据。
不可重复读
事务 A 中前后两次读取到的数据不一致。
事务 A 在读取过程中,事务 B 对数据进行了修改。
幻读
事务 A 在读取过程中,事务 B 向其中添加了数据,导致事务 A 读到了事务 B 中添加的 " 幻影 " 数据。
以上问题可以通过设置事务隔离级别解决。
事务隔离级别
事务相关指令
查看事务自动提交状态
select @@autocommit
修改事务自动提交状态
set @@autocommit=0/1 0 表示不开启动, 1 表示开启
手动开启事务
start transaction;
提交
commit;
回滚 rollback;
查询当前事务隔离级别
select @@transaction_isolation
设置事务隔离级别
set [session|global] transaction isolation level [Read Uncommitted | Read Committed |
Repeatable Read |Serializable]
视图
定义
create view 视图名 as
sql 语句 ;
使用
select * from 视图名 ;
触发器
定义
create trigger 触发器名
触发时机 触发条件 on for each row
begin
触发器触发时执行的 sql 语句;
end
存储过程
创建
create procedure 存储过程名 (in/out/inout 参数名 数据类型 )
begin
sql 语句 ;
end
调用
call 存储过程名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值