1.MySQL和Oracle的区别
MySQL是直接在SQL语句中写"select... from ...where...limit x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询,limit参数含义,limit 1.a,b:从第a行之后(不包含a)读取b行数据
2.最重要的区别,MySQL是轻量型数据库,并且免费,没有服务恢复数据。 Oracle是重量型数据库,收费,Oracle公司对Oracle数据库有任何服务。
2.rowid和rownum区别
rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变
rownum 表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的
3.事务级别
Read uncommitted 读未提交
会出现:脏读(发生事务回滚),不可重复读(两次读之间被修改),幻读(两次查询之间数据被修改)
Read committed 读提交
会出现:不可重复读(两次读之间被修改),幻读(两次查询之间数据被修改)
Repeatable read 重复读
会出现:脏读(发生事务回滚),不可重复读(两次读之间被修改),幻读(两次查询之间数据被修改)
Serializable 序列化
4.数据库存储过程
create or replace procedure p_stu is
v_sql varchar2(2000);
cursor class_cursor is
select distinct class from student;
begin
v_sql := 'select name';
for c in class_cursor loop
v_sql := V_SQL || ',' || 'SUM(DECODE(CLASS,''' || c.CLASS ||
''',score,0)) AS ' || C.CLASS;
end loop;
v_sql := v_sql || ' from student group by name ';
v_sql := 'CREATE OR REPLACE VIEW RESULTrrr AS '||V_SQL; --创建视图
DBMS_OUTPUT.PUT_LINE(v_sql);
execute immediate v_sql; -- 执行动态sql 语句
end;
begin
p_stu;
end;
5.sql调优
1.mysql通过explain 查询执行计划,
2.尽量少or,尽量用 union all 代替 union
3.避免类型转换
4.对于筛选条件尽可能提前过滤
5.避免在where中使用!=, >, <操作符
6.in和not in,对连续的数值尽量用between
7.避免在where子句中对字段进行表达式操作
8.避免在where子句中对字段进行函数操作
9.索引不是越多越好,一个表的索引数最好不要超过6个
10.能用exit就用这个
11.通过分区,分库,分表
分区:
1.通过show variables like '%partition%';查询当前mysql是否支持分区
2.根据range来分区
partition by range(store_id)(
partition p0 values less than (6),
partition p1 values less than (11),
partition p2 values less than (16),
partition p3 values less than (21)
);
6.数据库连接池
一般使用druid
7.jdbc使用步骤
注冊载入JDBC驱动程序Class.forName(DriverName);
得到连接对象 Connection con =DriverManager.getConnection(url ,username , password ) ;
创建 Statement对象
Statement stmt = con.createStatement();
PreparedStatement pstmt=con.prepareStatement(sql);
CallableStatement cstmt =con.prepareCall("{CALLdemoSp(? , ?)}") ;
运行sql语句ResultSet rs = stmt.executeQuery("SELECT * FROM ...") ;
处理结果
关闭资源释放资源