MySQL:索引,事务,Java和Linux操作MySQL

一、索引

提高查询效率

每个字段都可以加索引,索引的添加也会消耗资源,

给经常做查询的字段加索引

主键默认包含索引

alter table 表名 add index 索引名称(字段)
alter table student add index nameindex(name);
alter table student drop index nameindex;

二、事务

mysql批处理 执行一批SQL语句 原子性的 不可再分割 要成功 都成功 要失败都失败

sql的执行每一条都是独立的

事务可以对于多张表进行同时操作

状态:开始 结束 提交 回滚

事务从开始 到提交结束之前 所有的操作都是虚拟的(临时的 假的)

提交之后才会把操作 保存到真是数据总

begin;# 执行一次就表示开始事务 不需要多次执行
update person set money='3000';
update bank set money='2000';
rollback;# 回滚 撤销以上所有的虚拟的操作
update person set money='3000';
update bank set money='2000';
commit;# 提交 提交之后结束

三、其他编程语言操作mysql

1、Linux

在Linux的.sh文件中输入以下的命令,可以实现操作mysql。

#!/bin/sh
#mysql -uroot -p123456 -e "select * from shujia.student"
MYSQL="mysql -uroot -p123456"
sql="select * from shujia.student"
sql1="select * from shujia.score"
$MYSQL -e "$sql1"

2、Java

例;对mysql进行查看操作

导入第三方工具包 file->project structure->Modules->Dependencies->+->JARs or dir...->选择包->apply

1.加载第三方工具

Class.forname("com.mysql.jdbc.Driver");

2.获取连接

String url="jdbc:mysql://master:3306/shujia";
String username="root";
String password="123456";
Connection connection = DriverManager.getConnection(url, username, password);

3.获取执行器 createStatement(会出现sql注入不使用)或prepareStatement

//Statement statement = connection.createStatement(); // 出现sql注入的问题
String sql="select * from student where id=? and name=?" //?通过setString赋值
PreparedStatement ps = connection.prepareStatement(sql);//给sql的格式(模板)
ps.setString(1,"sfjl");
ps.setString(2,"test");

4.执行sql获取结果(当sql语句为增删改查操作,不需要解析结果,使用executeUpdate()来对结果成功不成功做个判断)

ResultSet rs = ps.executeQuery();
while (rs.next()){
    String name = rs.getString("name");
    System.out.println(name);
}

//int i = ps.executeUpdate();// 1表示成功 非1就是失败

//System.out.println(i);

5.关闭连接(从下向上关闭)

rs.close();
ps.close();
connection.close();

注意

sql注入:参数中有mysql命令,而mysql把这些关键字当做命令去执行
prepareStatement:避免了sql注入,首先发送sql的格式,然后在传递参数(参数中有关键字也作为参数执行)
prepareStatement传参:通过set数据类型(int Index,数据类型 x)
注意:index从1开始,表示第一个问号。

对mysql进行增删改的操作

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

public class Demo01Insert {
    public static void main(String[] args) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://master:3306/shujia";
        String username="root";
        String password="123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        String sql="insert into user(username,password) values(?,?)";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,"show");//参数的index 从1开始
        ps.setString(2,"show123456");//参数的index 从1开始
        int i = ps.executeUpdate();// 1表示成功 非1就是失败
        System.out.println(i);
    }
}

删:

public class Demo03Delete {
    public static void main(String[] args) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://master:3306/shujia";
        String username="root";
        String password="123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        String sql="delete from user ";
        PreparedStatement ps = conn.prepareStatement(sql);
        int i = ps.executeUpdate(); // 返回受影响行数
        System.out.println(i);
        ps.close();
        conn.close();
    }
}

public class Demo02Update {
    public static void main(String[] args) throws Exception{
        Class.forName("com.mysql.jdbc.Driver");
        String url="jdbc:mysql://master:3306/shujia";
        String username="root";
        String password="123456";
        Connection conn = DriverManager.getConnection(url, username, password);
        String sql="update user set password='123456789' where username=?";
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,"show123");
        int i = ps.executeUpdate();
        System.out.println(i);
        ps.close();
        conn.close();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值