SQL(事务)

目录

DDL(Data Definition Language,数据定义语言)

修改表

DML(Data Manipulation Language,数据操纵语言)

添加数据

修改数据

删除数据

DQL(Data Query Language,数据查询语言)

        基础查询

        条件查询

        排序查询

        分组查询:

                聚合函数

where与having的区别

         分页查询

约束

         外键约束:

事务

    事务四大特征

        原子性:事务是不可分割的最小操作单位,要么同时成功,要么同属失败

        一致性:事务完成时,必须使所有的数据都保持一致状态

        隔离性:多个事物之间,操作的可见性

        持久性:事务一旦提交或者回滚,它对数据库中的改变是永久的

JDBC


DDL(Data Definition Language,数据定义语言)

  主要用于维护存储数据的结构,这种结构包括数据库,表、视图、索引、同义词、聚簇等。

代表指令:

  • create 创建数据库和数据库的一些对象

  • drop 删除数据库/表、索引、条件约束以及数据表的权限等

  • alter 修改数据库表的定义及数据属性

DDL操作数据库 
show databases;                         //查询数据库

create database if not exist 数据库名;  //创建数据库

drop database if exist 数据库名;        //删除数据库

use 数据库名称  select database();      //使用数据库 查看当前数据库

DDL操作表

dese 表名;  //查询表的结构信息(一张表的所有字段)
show tables; //查询当前数据库下所有表的名称

create table 表名(
        字段名1 数据类型1,
        字段名2 数据类型2,
        字段名3 数据类型3
);
create table 表名(
        id   int,
        name varchar(15),
        gender char(1),
        grade double(5,2),
        birthday date,
        email varchar(64),
        status tinyint

);

修改表

alter table 表名 rename to 新的表名
alter table 表名 add 列名 数据类型
alter table 表名 modify 列名 新的数据类型  //修改数据类型
alter table 表名  change 列名 新列名 新数据类型 
alter table 表名 drop 列名

DML(Data Manipulation Language,数据操纵语言)

 主要用于对数据库对象中包含的数据进行操作

代表指令:

  • insert 向数据库中插入一条数据

  • delete 删除表中的一条或者多条记录

  • updata 修改表中的数据

添加数据

select * from stu;
insert into stu(id,name) values(1,'张三');   //指定列添加数据

修改数据

update stu set sex='女' wwhere name='张三';
update stu set birthday ='1999-12-12', score=99.99 where name='张三';

删除数据

delete from stu where name='张三';

DQL(Data Query Language,数据查询语言)

 主要用于查询数据库当中的数据

代表指令:

  • selete 查询表中的数据
  • from 查询哪张表、视图
  • where 约束条件
  • distinct去除重复记录 as 别名
select 字段列表
from 表名列表
where 条件查询
group by 分组查询
having 分组后条件
order by 排序字段
limit 分页

        基础查询

select 字段 from 表名

        条件查询

//select 字段 from 表名 where

select * from stu where age>20;
select * from stu where age>=20 and age<=30;
select * from stu where age between 20 and 30;
// =等于      !=不等于 <>
// 或者: age=20 or age=30    age in{18,20,22};
// Null值必须用  is null


// 模糊查询:

select * from stu where name like '马%';  //查询姓马的信息
select * from stu where name like '_花%';  //第二为花
select * from stu where name like '%德%';  //包含德

        排序查询

//ASC:升序(默认)
//DESC:降序

select * from stu order by math desc;
select * from stu order by math desc,english asc;

        分组查询:

                聚合函数

聚合常用函数
函数名功能
count(列名)统计数量(一般选用不为null的列)1主键 2*
max(列名)最大值
min(列名)

最小值

sum(列名)求和
avg(列名)平均值

select 聚合函数名(列名) from 表
select 字段列表 from 表名 where 分组前条件限定 group by 分组字段名 having 分组后条件过滤
// 分组之后 查询的字段为聚合函数和分组字段,查询其他字段无任何意义
select name,sex,avg(math),count(*) from stu group by sex;
select name,sex,avg(math),count(*) from stu where math>70  group by sex;

select name,sex,avg(math),count(*) from stu where math>70  group by sex having count(*)>2;



where与having的区别

执行时机不同 where是分组之前限定,不满足where条件,不参与分组,having是分组后对结果进行过滤 可判断的条件 where不能对聚合函数进行判断,having可以

执行顺序:where>聚合函数>having

         分页查询

select * from stu limit 起始索引,查询条目数
select * from stu limit 0,3  //从0开始,查询3条

起始索引: (当前页码-1)*每页显示的条数

约束

         外键约束:

//添加外键:在从表中添加
CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id);
//删除外键:
alter table emp drop FOREIGN key fk_emp dept;

开启事务: BEGIN /STATR TRANSCATION

提交事务:COMMIT   有些是默认提交但有些需要手动提交

回滚事务:ROLLBACK

事务

    事务四大特征

        原子性:事务是不可分割的最小操作单位,要么同时成功,要么同属失败

        一致性:事务完成时,必须使所有的数据都保持一致状态

        隔离性:多个事物之间,操作的可见性

        持久性:事务一旦提交或者回滚,它对数据库中的改变是永久的

并发事务引发的问题:脏读 不可重复读 幻读 为了解决这个问题引入了隔离级别这个·概念

SET SESSION TRANSCATION ISOLATION LEVEL SERIALIZABLE //设置隔离级别

三个隔离级别(isolation level):

读未提交Read uncommitted:多个同时在执行的事务,可以读取到其他事务,还处于事务未提交时的数据修改

(读已提交)Read committed

(重复读)Repeatable read(默认)

SERIALIZABLE:串行化 当一个事物正在进行的时候另一个必须等待 规避了幻读的问题

事务的隔离级别越高 数据越安全 但是性能越低

JDBC

概念:使用java语言操作关系型数据库的一套API

 本质:

  • 官方定义的一套操作所有关系型数据库的规则,也就是接口
  • 各个数据库厂商·去实现这套接口,提供数据库jar包
  • 使用这套接口(JDBC)编程,真正执行的代码是驱动jae包中的实现类

JDBC好处:

  • 数据库厂商使用相同的接口,JAVA代码不需要针对不同数据库分别开发
  • 可随时替换底层的数据库,访问数据库的java代码基本不变

 在JDBC过程中,Connection中有事务的提交

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * @author hututu
 * @date 2022/08/09 18:48
 **/
public class JDBCDemo {
    @Test
    public void testResultSet() throws Exception{
        String url= "jdbc:mysql;///db1?useSSL=false";
        String username="root";
        String password="123456";
        Connection connection= DriverManager.getConnection(url,username,password);
        String name="zhangsan";
        String pwd="123";
        String sql="select * from stu where name=? and word=?";
        PreparedStatement preparedStatement= connection.prepareStatement(sql);

        preparedStatement.setString(1,name);
        preparedStatement.setString(2,pwd);
        ResultSet rs=preparedStatement.executeQuery();
        if (rs.next()){
            System.out.println("登陆成功");
        }else {
            System.out.println("登陆失败");
        }
        rs.close();
        preparedStatement.close();
        connection.close();

    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是香橙啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值