一、索引
提高查询效率
每个字段都可以加索引,索引的添加也会消耗资源,
给经常做查询的字段加索引
主键默认包含索引
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();
}
}