Oracle与Mysql的差异
- Oracle没有主键自增主键一般使用的序列 Mysql主键自增长
- 单引号的处理 Mysql里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。
- 时间函数
1)Mysql now() Mysql的sysdate() 日期时间函数跟 now() 类似,不同之处在于:now() 在执行开始时值就得到了, sysdate() 在函数执行时动态得到值。now()比较常用
Mysql日期函数 https://www.cnblogs.com/ggjucheng/p/3352280.html
2)Oracle 从dual这个表(伪表)查询,直接插入语句写sysdate就够了(没括号)
Oracle 在SQL语句中如何获取系统当前时间并进行操作 https://blog.csdn.net/idomyway/article/details/79016527 - 分页查询
1)Oracle
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
https://www.cnblogs.com/zhaotiancheng/p/6262635.html
2)Mysql
一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下:
SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset
#从第1000个数据开始查,查10个数据
select * from table where type=8 limit 1000,10;
Mysql分页查询优化 https://www.cnblogs.com/youyoui/p/7851007.html 分页查询,偏移量越多,查询越慢
Mysql大数据量分页查询 https://www.cnblogs.com/geningchao/p/6649907.html
Mybatis改写SQL语句遇见的一些问题
Mybatis批量删除数据,最大量是1000,需要自己手动将List切分成小于等于1000的集合操作
工具类
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
//将list切层list集合
public class ListSplitUtil {
public static <T> List<List<T>> fixedList(List<T> list,int n){
if (list==null||list.size()==0||n<=0) {
return null;
}
List<List<T>> result=new ArrayList<List<T>>();
int listSize=list.size();
int size=(list.size()/n)+1;
for (int i = 0; i <size ; i++) {
List<T> subset=new ArrayList<T>();
for (int j = i*n; j <(i+1)*n ; j++) {
if (j<listSize){
subset.add(list.get(j));
}
}
result.add(subset);
}
return result;
}
}
数据库的时间取出来是String类型,想转为java.util.Date类型自己手动转
工具类
默认一个格式yyyy-MM-dd HH:mm:ss,如果你同时传入string和fomat格式,那么就会按照你传的格式改变,如果没传默认上面的格式做转换
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatUtil {
public static Date toDate(String _date){
String defaultFormat="yyyy-MM-dd HH:mm:ss";
return toDate(_date,defaultFormat);
}
public static Date toDate(String _date,String format){
SimpleDateFormat sdf=new SimpleDateFormat(format);
Date date=null;
try {
date=sdf.parse(_date);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}
语句中不允许出现;
大于号 用 & gt;替代 小于号用 & lt;替代
mybatis 批量插入数据到oracle报 ”java.sql.SQLException: ORA-00933: SQL 命令未正确结束“ 错误解决方法 在标签内添加useGeneratedKeys=“false”
<insert id="addList" parameterType="java.util.List" useGeneratedKeys="false">
INSERT INTO table_name where select * from table_name2
</insert>
、、
<select id="queryList" resultType="com.example.model.Bean">
select * from table_name
</insert>
resultType="xxxx"不用写List 写返回值的类型就行 基础类型和Bean都可以
#{field, jdbcType=NUMERIC} 动态sql里面传变量 数值类型
#{field, jdbcType=VARCHER} 字符串类型
MyBatis几种不同类型传参的总结 https://blog.csdn.net/m0_37837382/article/details/81626908
使用PLSQL的一些总结
表的语句无法执行 oracle11g报错ORA-00054:资源正忙,要求指定NOWAIT如何解决?
1)被其他用户编辑占用
让其释放即可使用
2)表被锁导致无法执行(Oracle机制 重点)
一条插入语句未执行完成,下一条插入语句开始执行就会导致表锁定
https://www.2cto.com/database/201802/723182.html
查询以外的操作每次完成都手动提交一下,不然表始终是被占用的。
直接用图形界面编辑表数据的时候修改完先把那个小锁子锁上,然后提交数据
PlSQL导出数据表结构以及表数据
https://wenwen.sogou.com/z/q806564636.htm 用户名和密码不一样导不进去
一般克隆数据的方法,如果数据量小,则直接拖选数据复制,再到目标库的图形界面中粘贴即可。
数据量大的时候,先建立dblink,然后如果目标库有表结构的话,直接insert 目标库表名 select * from 源库表名。如果没有表结构就把源数据库导出sql脚本(包含表结构以及数据),然后以sql文件的形式导入。如果不行,就问数据库开发要sql脚本,一般都在本公司git或者svn代码同级有sql脚本文件夹
无法从套接字读取到更多数据
其他
视图没有办法建立索引