华清远见-重庆中心-数据库知识点总结

这篇博客总结了MySQL中的数据库操作,包括SQL语句、数据表管理、约束添加、数据操作、函数、分组及各种连接查询。还详细讲解了JDBC连接、事务处理的原子性、一致性、隔离性和持久性,以及事务隔离级别的查看与设置。同时,介绍了触发器的创建、使用和删除。
摘要由CSDN通过智能技术生成

SQL语句

MySQL中的注释

-- mysql中的注释

操作数据库

查看所有数据库

show databases;

切换数据库

use 数据库名;

查看当前数据库下所有表

show tables;

创建数据库

create database 数据库名;

删除数据库

drop database 数据库名;

操作数据表

创建数据表

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

删除数据表

drop table 表名;

修改数据表

-- 对表重命名
alter table 旧表名 rename to 新表名;
-- 添加新字段
alter table 表名 add column 字段名 数据类型 字段特征;
-- 修改字段
alter table 表名 change 旧字段名 新字段名 数据类型 字段特征;
-- 删除字段
alter table 表名 drop 字段名;

添加约束

-- 添加非空约束
alter table 表名 change 旧字段名 新字段名 数据类型 not null;
-- 添加主键约束
alter table 表名 add primary key(字段名);
-- 添加唯一约束
alter table 表名 add unique(字段名);
-- 添加默认值约束
alter table 表名 alter 字段名 set default '默认值';
-- 添加外键约束
alter table 从表表名 add foreign key(从表外键字段) references 主表(主表主键字段)

操作数据

数据添加

insert into 表名[(字段1,字段2...)] values 
    ('值1','值2',...),
    ('值1','值2',...),
    ...
    ('值1','值2',...)

数据修改

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

数据删除

delete from 表名 where 条件
-- 或
truncate table 表名

数据查询

select 字段名1,字段名2... from 表名 where 条件

函数

select 函数名(字段名) from 表名
聚合函数名作用
count(字段名)统计数量
sum(字段名)求和
avg(字段名)平均
max(字段名)最大
min(字段名)最小
数学相关函数名作用
abs(字段名)绝对值
pow(字段名)次幂
sqrt(字段名)开平方
round(字段名)四舍五入
ceil(字段名)向上取整
floor(字段名)向下取整
字符串相关函数名作用
length(字符串)得字符串长度
trim(字符串) / ltrim(字符串) / rtrim(字符串)去除字符串首尾/首/尾空格
left(字符串,n) / right(字符串,n)从字符串左/右开始截取n个字符
substr(字符串,start)从start开始截取至末尾
substr(字符串,start,length)从start开始截取length个字符
lcase(字符串) / ucase(字符串)转换小写/大写
instr(字符串1,字符串2) / locate(字符串2,字符串1)得到字符串2在字符串1中出现的顺序
reverse(字符串)翻转字符串
concat(字符串1,字符串2...)拼接字符串
replace(字符串,旧字符串,新字符串)将字符串中的旧字符串替换为新字符串
时间相关函数名作用
now()当前日期时间
current_date() / curdate()当前日期
current_time() / curtime()当前时间
year(日期) / month(日期) / day(日期)得到年/月/日部分
datediff(时间1,时间2)计算时间1与时间2相隔的天数
timediff(时间1,时间2)计算时间1与时间2相隔的时分秒
TIMESTAMPDIFF(时间单位,时间1,时间2)计算时间1与时间2相隔的指定时间单位

分组

select 分组字段,统计函数 from 表名 group by 分组字段 having 统计函数所需满足的条件

连接查询

交叉连接

select * from 表1,表2;
select * from 表1 cross join 表2;
select * from 表1 inner join 表2;

内连接

select * from 表1,表2 where 表1.字段=表2.字段;
select * from 表1 inner join 表2 on 表1.字段=表2.字段;

左连接

select * from 表1 left join 表2 on 表1.字段=表2.字段;

右连接

select * from 表2 right join 表1 on 表1.字段=表2.字段;

视图

创建视图

create view 视图名 as
查询的sql语句;

使用视图

select * from 视图名

删除视图

drop view 视图名;

JDBC

  • Connection:用于设置连接的数据库的地址、账号、密码
  • PreparedStatement:用于预处理、执行sql语句
  • ResultSet:用于接收查询后的数据
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名?serverTimezone=Asia/Shanghai",username,password);
PreparedStatement pst=conn.prepareStatement(sql语句);
ResultSet rs=pst.executeQuery();

事务

原子性Atomicity

  • 事务是最小的执行单元

一致性Consistency

  • 事务执行前后,必须让所有数据保持一致状态。

隔离性Isolation

  • 事务并发时相互隔离,互不影响

持久性Durability

  • 事务一旦提交,对数据的改变是永久的

手动提交/回滚事务

  • 关闭事务自动提交:set @@autocommit=0
  • 开启事务:start transaction;
  • 事务要执行的sql;
  • 没有提交之前,如果要回滚,使用rollback;
  • 如果要提交,使用commit;一旦提交成功,无法rollback。

事务并发可能问题

问题 描述
脏读事务A读取到了事务B未提交的数据
不可重复读事务A中如果要读取两次数据,在这期间,事务B对数据进行了修改并提交,导致事务A读取两次的情况不一致
幻读事务A读取id为1~10之间的数据,假如只有id为2和5的数据,在读取期间,事务B添加了一条id为3的数据,导致事务A多读到了事务B中的数据

事务隔离级别

隔离级别 能否出现脏读能否出现不可重复读能否出现幻读
Read Uncommitted未提交读RU
Read Committed已提交读RC(Oracle默 认)不会
Repeatable Read可重复读RR(MySQL 默认)不会不会
Serializable可序列化不会不会不会

查看事务隔离级别

select @@transatcion_isolation

设置事务隔离级别

set [session|global] transaction isolation level [read uncommitted|read committed|repeatable read|serializable]

触发器

创建

create trigger 触发器名
触发时机 触发操作 on 表名 for each row
begin
触发时执行的sql;
end

使用

创建成功后无需刻意调用,在执行相应的操作时,自动执行触发器

删除

drop trigger 触发器名;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值