数据库精华总结
SQL标准 - 维基百科 ,以SQL为基础的其他延伸语言: Transact-SQL - 维基百科 、 PL-SQL(Oracle) - 维基百科
常用命令
MySQL
大全:https://www.runoob.com/mysql/mysql-command-manual.html
常用函数
通用
COALESCE:返回参数中的第一个非null的值,它要求参数中至少有一个是非null的,如果参数都是null会报错。
1 | SELECT COALESCE ( NULL, NULL, NULL, '巴顿' ) AS NAME |
MySQL
1 | select |
Oracle
PostgreSQL
1 | SELECT |
数据类型
数值
Oracle
number 类型: number[([precision], [scale])]
precision 表示十进制有效数字的个数,最多不能超过38个有效数字 number(38,0) (实际支持39-40位十进制数字)。
Scale的范围为[-84,127]。Scale为正数时,表示从小数点到最不重要的十进制有效数字的个数(小数点后多余舍弃);为负数时,其绝对值表示从最不重要的十进制有效数字到小数点的位数(小数点前四舍五入变为0)。
如果指定了精度,没有指定scale,scale默认为0。
如果没有指定精度,precision与scale默认为最大的取值区间(维基百科是这样说的),实际测试如下(Oracle 11g):
插入数据 | 查询结果 |
---|---|
0.123456789123456789123456789123456789 | 0.123456789123457 |
1.123456789123456789123456789123456789 | 1.12345678912346 |
12.123456789123456789123456789123456789 | 12.1234567891235 |
123456789123456789.123456789123456789123456789123456789 | 123456789.123457 |
123456789123456789.123456789123456789123456789123456789 | 123456789123457000 |
结论:从左到右,最多保留十进制有效数字15个。其余部分,小数点前四舍五入变为0,小数点后舍弃。
浮点类型:binary_float、binary_double
MySQL
https://www.runoob.com/mysql/mysql-data-types.html
日期和时间类型
Oracle
秒、毫秒、微秒、纳秒
date 类型:精度到秒,占用7个字节的存储空间。
timestamp 类型:最高精度可以到ns(纳秒),小数位数可以指定为0-9,默认为6位。如果精度为0,则用7字节存储,与date类型功能相同;如果精度大于0,则用11字节存储。
timestamp with time zone 类型:timestamp 类型的变种,它包含了时区偏移量的值,保持 client 的 timezone。
timestamp with local time zone 类型:把 client 的 timezone 转换成 DB 的 timezone 对应的时间。
带时区的类型需要 Java 也是用带时区的?
MySQL
https://www.runoob.com/mysql/mysql-data-types.html
字符串类型
Oracle
- 固定长度类型:char/nchar,自动补足空格,最多可以存储2000字节。
- 可变长度类型:varchar2/nvarchar2,最大字节数都是4000,自动删除首尾的空格.
格式:char(size [byte| char]) 、varchar2(size [byte| char]) 、nvarchar2(size)
例:
char(8 byte) :默认是byte
varchar2(4000) / varchar2(4000 char) :可以存入4000个字母,不能存入4000个汉字。如果数据库字符集是GBK,那么varchar2最多存放2000个汉字;如果字符集是UTF-8,那么最多存放1333个汉字了。存放汉字建议使用nvarchar2。
nvarchar2(2000) :每个字符长度都是2个字节,所以size最大值为4000/2=2000,最多存放2000个汉字或字母,不受数据库字符集的影响。
MySQL
https://www.runoob.com/mysql/mysql-data-types.html
存储过程和函数的区别
存储过程 | 函数 |
---|---|
程序头部声明用procedure | 程序头部声明用function |
程序头部声明时不需要描述返回类型 | 程序头部声明要描述返回类型,而且PL/SQL块中至少要包括一个有效的return语句 |
可以使用in/out/in out三种模式的参数 | 可以使用in/out/in out三种模式的参数 |
可以通过out/in out返回零个或者多个值 | 通过return语句返回一个值,且该值要与申明部分一致,也可以是通过out类型的参数带出的变量 |
可以作为一个独立的PL/SQL语句来执行 | 不能独立执行,必须作为表达式的一部分调用 |
用于在数据库中完成特定的操作或者任务(如插入、删除) | 用于特定的数据(如选择) |
SQL语句(DML或SELECT)中不可调用存储过程 | SQL语句(DML或SELECT)中可以调用函数 |