索引
提高查询效率
每个字段都可以加索引
给经常做查询的字段加索引
主键默认包含索引
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
Linux
#!/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"
Java
这里需要导入第三方工具包
点击IDEA中的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
一般情况下大多使用第二种执行器
String sql="select * from user where username=? and password=?"
?号表示将要填入的值,
PreparedStatement ps = connection.prepareStatement(sql);//给sql的格式(模板)
ps.setString(1,"1012");
ps.setString(2,"test");
4.执行sql获取结果
sql语句为增删改查操作,不需要解析结果,使用executeUpdate()获取int类型的返回值
ResultSet rs = ps.executeQuery();
当执行增删改查操作时,不需要下面的获取操作
while (rs.next()){
String name = rs.getString("name");
System.out.println(name);
}
5.关闭连接(从下向上关闭)
rs.close(); ps.close(); conn.close();
注意
sql注入:参数中有mysql命令,而mysql把这些关键字当做命令去执行
prepareStatement:避免了sql注入,首先发送sql的格式,然后在传递参数(参数中有关键字也作为参数执行)
prepareStatement传参:通过set数据类型(int prepareIndex,数据类型 x) 注意:index从1开始