数据库面试题
基础
用过那些常用函数
数学函数
ABS(x) 返回x的绝对值
MOD(x,y) 返回x被y除后的余数
CEIL(x) 返回不小于x的最小整数
FLOOR(x) 返回不大于x的最大整数
ROUND(x) 对x进行四舍五入
字符串函数
CHAR_LENGTH(str) 计算字符串字符个数
INSERT(s1,x,len,s2) 返回字符串s1,其子字符串起始于位置x,被字符串s2取代len个字符
LOWER(str)和LCASE(str)、UPPER(str)和UCASE(str)
REPLACE(s,s1,s2) 返回一个字符串,用字符串s2替代字符串s中所有的字符串s1
时间函数
- CURDATE() 将当前日期按照"YYYY-MM-DD"或者"YYYYMMDD"格式的值返回
- CURRENT_TIMESTAMP()、LOCALTIME()、NOW()、SYSDATE() 这四个函数作用相同,返回当前日期和时间值,格式为"YYYY_MM-DD HH:MM:SS"或"YYYYMMDDHHMMSS"
- DATE_ADD(date,INTERVAL expr type)、ADD_DATE(date,INTERVAL expr type) 返回将起始时间加上expr type之后的时间,比如DATE_ADD(‘2010-12-31 23:59:59’,
INTERVAL 1 SECOND)表示的就是把第一个时间加1秒 - DATE_SUB(date,INTERVAL expr type)、SUBDATE(date,INTERVAL expr type) 返回将起始时间减去expr type之后的时间
- ADDTIME(date,expr)、SUBTIME(date,expr) 前者进行date的时间加操作,后者进行date的时间减操作
- UNIX_TIMESTAMP()、UNIX_TIMESTAMP(date) 前者返回一个格林尼治标准时间1970-01-01 00:00:00到现在的秒数,后者返回一个格林尼治标准时间1970-01-01 00:00:00到指定时间的秒数
- YEAR(date)、QUARTER(date)、MINUTE(time)、SECOND(time)
条件判断函数
IF(expr,v1,v2) 如果expr是TRUE则返回v1,否则返回v2
IFNULL(v1,v2) 如果v1不为NULL,则返回v1,否则返回v2
CASE expr WHEN v1 THEN r1 [WHEN v2 THEN v2] [ELSE rn] END
其他
VERSION()
MD5(str)、PASSWORD(str)
ENCODE(str, pswd_str) 使用pswd_str作为密码,加密str
DECODE(crypt_str,pswd_str) 使用pswd_str作为密码,解密加密字符crypt_str,crypt_str是由ENCODE函数返回的字符串
数据类型
数值类型
tinyint、smallint、mediumint、int、integer、bigint、float、double、decimal
字符串类型
Char、varchar、tinyblob、tinytext、blob、text、mediumblob、mediumtext、longtext、longblob
时间类型
Date、time、year、datetime、timestamp
事务特性
原子性 (atomicity)
:强调事务的不可分割.
一致性 (consistency)
:事务的执行的前后数据的完整性保持一致.
隔离性 (isolation)
:一个事务执行的过程中,不应该受到其他事务的干扰
持久性(durability)
:事务一旦结束,数据就持久到数据库
事务的安全性问题
脏读
:一个事务读到了另一个事务的未提交的数据
不可重复读
:一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
幻读
:一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.
事务的隔离级别
未提交读(read uncommited)
:脏读,不可重复读,虚读都有可能发生
已提交读 (read commited)
:避免脏读。但是不可重复读和虚读有可能发生
可重复读 (repeatable read)
:避免脏读和不可重复读.但是虚读有可能发生.
串行化的 (serializable)
:避免以上所有读问题.
Mysql 默认:可重复读
Oracle 默认:读已提交
事务的7个事务传播行为
propagion_XXX :事务的传播行为
-
保证同一个事务中
propagion_required
: 支持当前事务,如果不存在 就新建一个(默认)
propagion_supports
: 支持当前事务,如果不存在,就不使用事务
propagion_mandatory
: 支持当前事务,如果不存在,抛出异常 -
保证没有在同一个事务中
propagion_requires_new
: 如果有事务存在,挂起当前事务,创建一个新的事务
propagion_not_supported
: 以非事务方式运行,如果有事务存在,挂起当前事务
propagion_never
: 以非事务方式运行,如果有事务存在,抛出异常
propagion_nested
: 如果当前事务存在,则嵌套事务执行
jdbc连接数据库
存储过程的语法
"Oracle存储过程基本语法 存储过程
CREATE OR REPLACE PROCEDURE 存储过程名
<