mysql

1.去重

关键字:distinct

作用:去除select语句查询出来的重复数据

select distinct society from number;

2.where条件子句

运算符语法描述
and &&a=1 and b=2与操作
or ||或操作
not !=非操作

3.模糊查询

运算符语法描述
is null如果为null返回值为真
is not null如果不为null返回值为真
betweenbetween and
likeselect * from number where society like “社联”;like “aaa”;
inselect name society from number where society in(‘社联’);in(a1,a2,a3)

like:select name from number where name like ‘%彪%’ and name like ‘%4%’;

in:查询的字段要是一个具体的值

4.连表查询:join

左连接查询:即使右表中没有匹配的值也会进行查询

select n.name,s.name,n.society from number n
left join society s on n.id=1;

右连接查询:即使左表中没有匹配的值也会进行查询

select distinct n.name,s.name,n.society from number n
right join society s on n.id=1;

inner join查询:如果表中有能匹配的项就直接查询

select distinct n.name,s.name,n.society from number n
inner join society s on n.id=1;

5.自连接(了解即可)

6.分页和排序

1.排序

where>

group by>分类一定要与聚合函数使用

having>

order by>

limit>

升序asc

select * from number order by id asc;

降序desc

select * from number order by id desc;

2.分页

关键字:limit

7.子查询和嵌套查询

子查询:where (select 语句)

由里到外本质上与连接查询差不多。

8.mysql的函数

数学运算符:

select abs(-1);//取绝对值

select ceiling(9.1);//向上取整数

select floor(9.1);//向下取整数

select rand();0-1的随机数

select sign()//括号里面正数输出1,负数输出-1,0输出0;

字符串函数

SELECT CHAR_lENGTH(‘DJDAHD’);//计算字符串长度

select Concat(‘我’,‘爱’);//字符串拼接

select insert(‘我爱你’,1,2,‘超级热爱’)//替换

select upper(‘sdasAA’);//大写替换

select upper(‘aAAA’);//小写字母替换

select instr(‘asdsdas’,‘a’);//返回第一次出现的字串索引

select replace(‘我爱你红红蕾蕾’,‘红红’,‘兰兰’)//替换指定字符串

select substr(‘dusahdu’,4,5);返回指定字符串

Select reverse(“dadad”);//反转

聚合函数

count()计数
sum()求和
avg()平均值
max()最大值
min()最小值

count():

select count(portrait_path) from number;按照列计算,忽略控制

select count(1) from number;按照行计算,不会忽略空值

select count(*) from number;本质与上面没啥区别

MD5加密

MD5()

9.事务

package com.baidu.jdbc;

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

public class JdbcTest02 {
    private static PreparedStatement preparedStatement=null;
    private static Connection conn=null;
    private static ResultSet rs=null;
    public static void main(String[] args) throws Exception {
conn=JdbcUtils.getConnections();
conn.setAutoCommit(false);//关闭自动提交,开启事务
String sql="update test01 set money=money-400 where name=?;";
preparedStatement = conn.prepareStatement(sql);
preparedStatement.setObject(1,"小张");
int i=preparedStatement.executeUpdate();
int x=1/0;
        String sql1="update test01 set money=money+400 where name=?;";
        preparedStatement=conn.prepareStatement(sql1);
        preparedStatement.setString(1,"小刘");
        int j=preparedStatement.executeUpdate();
        if(i>0&&j>0){
            conn.commit();//事务提交
        }
        conn.rollback();//事务回滚
JdbcUtils.realse(rs,conn,preparedStatement);
    }
}

要么都成功,要么都失败;

ACID

原子性:两个动作要么一起成功,要么一起失败

一致性:最终一致性()(例如:1000块钱不可变)

隔离性:转钱的时候不会互相影响

持久性:事务如果没有提交恢复到原状。

隔离导致的问题:

脏读:一个事务读取了另外一个事务未提交的数据

不可重复读:多次读取事务结果不一样

幻读: 在一个事务内读取了别的事务插入的数据

数据库执行事务的流程:

SET autocommit=0//关闭自动提交

Start Transaction//开启事务

commit//提交事务

rollback//回滚如果事务提交失败,回滚到之前的数据

SET autocommit=1//开启自动提交

10.索引

主键索引:primary key

唯一标示,主键不可重复

唯一索引:union key

普通索引:key

全文索引:fulltext

show index from number;//显示表格中的索引

//插入索引

explain:看数据是否走索引(执行计划查看)

索引原则

索引不是越多越好

不要对经常变动的数据添加索引

小数据的表不要添加索引

索引一般增加在常用的查询字段上

11.mysql备份

导出命令:

mysqldump -hlocalhost -uroot -p123 union society_all >D:\a.sql

导入命令:

source d:\a.sql;

12.sql注入问题

package com.baidu.jdbc;

import org.junit.Test;

import java.sql.*;

public class Mysql注入 {
    private static String url = "jdbc:mysql://localhost:3306/union?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone =GMT&allowPublicKeyRetrieval=true";
    private static String username = "root";
    private static String password = "123";
    private static ResultSet rs = null;
    private static Connection conn = null;
    private static Statement stmt = null;
    private static PreparedStatement statement=null;

    public static void login(String user,String pas) throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        conn=DriverManager.getConnection(url,username,password);
        stmt=conn.createStatement();
        //select * from student_society_union where unionId=' 10001 ' and unionPassword='asdfg0205';
        String sql="select * from student_society_union where unionId=' "+user+"+ ' and unionPassword='"+pas+"';";
        rs=stmt.executeQuery(sql);
        while (rs.next()){
            System.out.println(rs.getObject(1));
            System.out.println(rs.getObject(2)); System.out.println(rs.getObject(3));

        }
    }

    @Test
    public static void main(String[] args) throws Exception {
        login(" 'or '1=1 ","' or'1=1");
    }
}

13.防止sql注入

 private static PreparedStatement preparedStatement=null;
    private static ResultSet rs=null;
    public static void main(String[] args) throws Exception {
        final Connection conn = JdbcUtils.getConnections();
        //把sql语句放在缓存中,预编译,不执行
        String sql="select * from student_society_union where id=1;";
        preparedStatement = conn.prepareStatement(sql);
        rs=preparedStatement.executeQuery();
        while(rs.next()){
            System.out.println(rs.getObject(1));
            System.out.println(rs.getObject(2));System.out.println(rs.getObject(3));

        }

    }
PreparedStatement
直接把传入的参数当作一个字符
如果存在转义字符 如 ' 直接会转义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值