增加数据
插入单条数据
insert into 表名 (字段名) values (添加内容);
插入多条数据
INSERT INTO 表名(字段名) VALUES(添加内容),(添加内容)
修改数据
更新所有数据
update 表名 set 需要修改的字段 = 修改内容
WHERE条件
update 表名 set 需要修改的字段 = '修改内容' where id = 1;
update 表名 set 需要修改的字段 = '修改内容' where id 运算符 1;
删除数据
delete form 表名;
delete from where 字段名
查询数据
select * from 表名
按条件查询
select 字段名 from 表名
select * from 表名 where id = 字段内容
范围查询
select 字段名 from 表名 where id>=2 and id<=6
select 字段名 from 表名 where id between 2 and 6
select 字段名 from 表名 where id in (2,3,4,5,6)
模糊查询
select 字段名from 表名 where name like 'a%'
select 字段名 from 表名 where name like '__a'
select 字段名 from 表名 where id like '2%'
聚合函数
select count(字段名) from 表名 有关所有数据
select max(字段名)form表名 最大值
select min(字段名)form表名 最小值
select sum(字段名)from表名 总和
子查询
select 字段名 from (select 字段名 from 表名 where id运算符 数字)字母 字母是新表名
select id,name,sex from (select id,name,sex,age,password from user where id >=2)
select 字段名 from (select 字段名from 表名 where id运算符 数字)字母 where 字段名=字段内容
select id,name,sex from (select id,name,sex,age,password from user where id >where name = 'xxx'
select 字段名 from (select 字段名 from 表名 where id运算符 数字)字母 where id 运算符 数字
select id,name,sex from (select id,name,sex,age,password from user where id >=2) where id <5
select 字段名 from 表名 where 字段名=(select max(字段名) from 表名)
select id,name,sex,password,phonenumber from user age = (select max(age) from user)
分组查询
select count(id),字段名 from group by 字段名
select count(id),sex from user group by sex
连表查询
内连接
显式
inner join
select t.id,t.name,t.sex,j.name from user t inner join job j on t.jobname=j.id
隐式
select t.id,t.name,t.sex,j.name from user t,job j where t.jobname = j.id
左连接
left join
select t. id,t.name,t.sex,j.name from user t left join job j on t.jobname=j.id
右连接
right join
select t.id.t.name,t.sex,j.name from job j right join user t on t. jobname = j.id
分页查询
select 字段名 from 表名 where id limit 索引,取数据
select id,name,sex from uesr where id linmt 2,2
视图
视图是一张虚拟的表
必须用view结尾
例:表1_表2_view
索引
索引有助于更快的获取信息
优点
1.创建唯一性索引,保证数据库表中每一行数据的唯一性
2.大大加快数据检索速度,这个也是创建索引的最主要的原因
3.减少磁盘IO
缺点
1.创建索引的维护索引要耗费时间,这种时间随着数据量的增加而增加
2.索引需要占用额外的物理空间
3.当对表中的数据进行增加,删除和修改时侯,索引也要动态的维护,降低了数据的维护速度
主键索引
主键列中的每个值都是非空的,唯一的主键将自动创捷主键索引
唯一索引
索引列数据不重复并且允许有空值
全文索引
支持全文的全文查找并且允许重复值和空值
空间索引
对空间数据类型的列建立的索引
树形索引
不需要从头至尾的遍历所有数据。
小右大做
会自动旋转保持树的平衡
JDBC
JDBC概述
JDBC就是java连接数据库
JDBC用法
Connection conn = null;
Statement sta = null;
ResultSet rs = null;
Class.forName("com.mysql.jdbc.Driver");
conn =DriverManager.getConnection(url,"root","root");
sta = conn.createStatement();
String sql = "SELECT * FROM user WHERE `name` = '" + name +"' and `Password` = '" + pwd + "'";
rs = sta.executeQuery(sql);
while(rs.next()) {
int id = rs.getInt(1);
String na = rs.getString("name");
int age = rs.getInt("age");
double sal = rs.getDouble("sal");
rs.close(); sta.close(); conn.close();
}
PreparedStatement防注入
概念
有预编译功能,速度比Srarement速度要快
防止sql注入
传统的方式: 当执行到sql 语句的时候,sql 语句才能够被编译, 执行:
stmt = conn.createStatement();
String sql =“select * from student where password =’+password+’” and username=’"+username+"’;
stmt.execuete(sql);
预编译:
String sql =“select * from student where password = ? and username =?”;
conn.prepareStatement(String sql);
//获得容器的时候, sql 给定: sql预编译:
事务
概述
在数据库中事务是工作的逻辑单元,
一个事务是由一个或多个完成一组的相关行为的SQL语句组成,
通过事务机制确保这一组SQL语句所作的操作要么都成功执行,
完成整个工作单元操作,要么一个也不执行。
用以保证数据的一致性
同一事务中所有的操作,都在使用同一个Connection对象
jdbc使用事务
try {
conn = JDBCHelper.getConnection();
conn.setAutoCommit(false); //开启事务,禁止自动提交
String sql1 = "update t_account t set t.money=t.money-100 where t.name ='a'";
String sql2 = "update t_account t set t.money=t.money+100 where t.name ='b'";
statement = conn.createStatement();
statement.addBatch(sql1);
statement.addBatch(sql2);
statement.executeBatch();
conn.commit(); //执行成功,提交事务
}
catch (Exception e)
{
conn.rollback(); //发生异常,事务回滚
}
finally
{
JDBCHelper.disposeConnect(statement, conn);
}
ACID
特性
原子性,事务作为一个整体被执行,包含在其中的数据库的操作要么全部执行,要么不执行
一致性,数据库中的数据应满足完整性约束
隔离性,多事务并发执行时,一个事务的执行不影响其他事务的执行
持久性,已被提交的事务对数据库的修改应该永久保存在数据库中
Dao模式
概述
业务对象只应该关注业务逻辑,不应该关心数据存取的细节。
数据访问对象必须实现特定的持久化策略, 这样就抽出来了DAO层,
作为数据源层,而之上的Domain Model层与之通讯而已,如果将那些实现了数据访问操作的所有细节都放入高层Domain model的话,系统的结构一定层次上来说就变得有些混乱。低级别的数据访问逻辑与高级别的业务逻辑分离,用一个DAO接口隐藏持久化操作的 细节,这样使用的最终目的就是让业务对象无需知道底层的持久化技术知识
案例
//省略异常处理
public class BaseDao {
public Connection getConn(){
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("url","root","root");
return conn;
}
public void closeAll(ResultSet rs, Statement stat, Connection conn){
if(rs != null)rs.close();
if(stat != null)stat.close();
if(conn != null)conn.close();
}
}
单例模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的一个类只有一个实例。即一个类只有一个对象实例。
懒汉单例
//省略异常处理
public class BaseDao {
private BaseDao(){
Class.forName(driName);
conn = DriverManager.getConnection("url","root","root");
}
public static Connection getConn(){
if(conn == null)new BaseDao();
return conn;
}
public static void closeAll(ResultSet rs, Statement stat){
if(rs != null)rs.close();
if(stat != null)stat.close();
}
}
饿汉单例
//省略异常处理
public class BaseDao {
private HungerySingletonBaseDao(){}
static{
Class.forName(driName);
conn = DriverManager.getConnection("url","root","root");
}
public static Connection getConn(){
return conn;
}
public static void closeAll(ResultSet rs, Statement stat){
if(rs != null)rs.close();
if(stat != null)stat.close();
}
}
区别