🤖 AI文章摘要 qwen-turbo-latest
加载中...

DDL

  • 数据类型:
    • CHAR(n): 定长字符串
    • VARCHAR2(n): 可变长字符串,对中文支持比较好
    • LONG: 可变长字符数据,最大2G
    • NUMBER(m,n): 可变长数值列m是有效数字位数(默认11), n是保留小数位数, Oracle保留int和double它们是NUMBER子集,
    • DATE: 默认的显示和匹配格式是’日-月-年'
      • alter session set NLS_DATE_FORMAT = ‘yyyy-mm-dd’修改会话中date类型数据的显示格式
      • 步进是一天,支持减法操作
    • BLOB: 二进制数据 CLOB: 字符型数据 BFILE: 二进制文件
    • ROWID: 行地址
  - delete是逐条删除表内容,truncate是直接摧毁表然后重建,
- delete是dml语言(支持闪回),truncate是ddl语言(不支持闪回)
- delete会产生碎片,truncat不会产生碎片
- delete不会释放空间,truncate会释放空间,所以当确定表不再使用后应该使用truncate
  
  - alter talbe t1 rename  xxx to xxx 重命名列名
- alter table t1 drop column xxx 删除列
- alter table t1 modify 列 类型     --当存在多列时, 用括号
  
  - rename t2 to t2 重命名表名,rename可以重命名oracle中的其他对象,所以不需要加table  
  
  • flashback table t2 to before drop; 可以闪回处于回收站中的表
  • drop table t2 purge;表示永久删除表
  • purge recyclebin 清空回收站
  • 注意sys用户没有回收站,只有普通用户有回收站
  • alter table xxx add xxx date default sysdate;增加一行,默认值是系统时间
  • create table <tablename> as select * from <tablename> where 1=2表示创建一个相同表结构的空表

DML

DELETE是dml语言, 逐行删除, 支持回滚, 不会释放空间, 会产生碎片 TRUNCAT是ddl语言, 摧毁表后重建, 不支持回滚, , 会释放空间, 不会产生碎片 insert into <tablename> valuse(&arg1, &arg2,…)这种插入方式可以,所有dml语句都可以

DQL

  • 外连接: 支持使用join进行外连接, 同时也支持在 where中 想要保留一方后添加(+)实现

  • order by col|表达式(函数)|结果集中列的别名|结果集中列的序号 asc null last , col , desc

    • oracle默认null值既不是空也不是数, 也不是无穷大升序默认排最后, 降序默认排最前, 使用null last参数指定null值一定在最后
  • where的条件判断是从后往前的判断的

  • null值的运算结果一定为null

  • nvl(a,b)若a为null返回b, 否则返回a

  • null值不能出现在not in 集合中

  CASE [EXP]
WHEN ... THEN ... 
END

当判断条件为等号时,可以将列名填在exp上 在when中指定等值条件即可,

注意ORACLE中除了起别名,其他的必须使用单引号
  

sqlplus break on <column> skip 2; <column>列相同只显示1列, 往后分组换两行继续显示 语句执行时间记录开关 set timing on/off 语句回显开关: set feedback on/off 就是显示多少行

  • 单行函数: 使用select 函数 from dual来测试这些函数
    • LOWER(varchar str): 小写转换
    • UPPER(varchar str): 大写转换
    • INITCAP(varchar str): 首字母大写, 以空格作为单词定界符
    • CONCAT(varchar str,varchar str) 连接字符串oracle支持使用 ‘a’ || ‘b’方式拼接多个字符串
    • SUBSTR(varchar str, int pos ,int len) 从1位置截取3个字符, 3省略截取到末尾
    • INSTR(varchar str , varchar str) 查找字符串出现位置
    • LPAD(varchar str, int, varchar fill) 若str不足len则在字符串左边填充字符fill, 同理有RPAD
    • TRIM(varchar str) 去除str首尾的空格, 高级玩法: TRIM(varchar from varchar)表示去除字符串首尾指定字符串
    • REPLACE(varchar str , varchar old , varchar new) 替换
    • ROUND(number n, number) 四舍五入, 第二个参数为保留小数位数, 使用负数保留的整数位数(例如-1 , 51,50)
    • TRUNC(number n, number precision): 数字截取, 第二个参数为保留数字尾部截去数字个数. 和round不同的是他不进行四舍五入
    • MOD(int, int) 取模
    • CEIL(double) 向上取整
    • FLOOR(double)向下取整
    • TO_CHAR(number , varchar_format) NUMBER转varchar: ‘L9,999’ ; 本地数字货币格式
    • TO_CHAR(date, varchaar_format) date转varchar: ‘yyyy-mm-dd hh24:mi:ss “今天是” day’ , 加上fm去0
    • TO_NUMBER(varchar, varchar_format) varchar转int: ‘L9,999’ 本地数字货币格式
    • TO_DATE(varchar, varchar_format) varchar转date: ‘yyyy-mm-dd hh24:mi:ss “今天是” day’
    • MONTH_BETWEEN(date, date) 日期月差精确值.
    • ADD_MONTHS(date, integer) 日期加法
    • LAST_DAY(date) 指定日期的当月最后一天.
    • NEXT_DAY(date) 指定日期的下一个星期几
    • SYSDATE
    • DECODE(expr|column, search1, ret1, search2, ret2,...) 是oracle
  • 聚集函数: 聚集函数通常用于包含group by子句的SQL语句中用于统计查询
    • AVG():
    • SUM():
    • MAX():
    • MIN():
    • COUNT():

ORACLE的事务

oracle事务不需要手动开启,

  • 事务提交
    • COMMIT提交事务
    • 执行了ddl语句、会话正常退出、设置了set autocommit on后执行了dml语句
  • 事务回滚
    • ROLLBACK [TO SAVEPOINT XXX] oracle支持保存点操作使用命令SAVEPOINT设置保存点
    • 掉电、宕机、会话异常退出
  • 隔离级别:Oracle支持以下事务隔离级别
    • 读已提交: oracle默认级别,只能读到最新的已提交结果
    • 串行化:
    • 只读模式:

ORACLE对象

表、视图、索引、序列、同义词 存储过程、存储函数、触发器、包、包体、数据库链路、快照

序列

  create sequence myseq, 通过mysql.nextval 可以直接取下一个序列的值,在同一个语句中它的返回值是相同的
select myseq.currval from dual; --查看当前值
select myseq.nextval from dual; --查看下一值,调用了nextval后下一次再获取将自增1,同一条语句中多次调用nextval获得的值是相同的
drop sequence  myseq
  

视图

简化复杂查询、隔离数据访问, 视图可以insert、update、delete但是不推荐,他违背了视图隔离数据的本意 创建视图需要权限,管理员调用grant create view to xxx 使用视图可以:隔离敏感字段(例如薪水)、保证分布式数据查询时数据的一致性(总部查主表、分部查视图)

  CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW name
WITH READ ONLY
  

同义词

表的别名,简化查询、隔离数据 创建同义词需要权限grant create synonym to xxx create synonym 表1 for 表2 drop synonym xxx

索引

在列上构建btree提高查询效率 创建索引后,oracle会自动创建一个索引表,该索引表由oracle进行维护,该索引表其实是记录一个列中某个值的所有行的行地址 create index 索引名 on 表(创建索引的列,…) tablespace xxx; drop index 索引名;

  • 注意事项
    • 当数据分布范围广、列经常在where出现或用作连接条件推荐使用索引
    • 当表很小、数据经常更新的不推荐使用索引
    • 单行查询和模糊查询都会影响索引的触发
    • 复合索引中第一列为优先检索列,包含优先检索列才能触发复合索引,

存储过程

in/out默认值为in,指明传入参数还是传出参数,传出参数必须使用out修饰,否则会出错

  CREATE [OR REPLACE] PROCEDURE 过程名[(参数名 in/out 参数类型)]
IS

BEGIN 
	PLSQL子程序体
END 
  

存储函数

存储函数有返回值,

  CREATE [OR REPLACE] FUNCTION 函数名(参数名)
  

触发器

  
  

PLSQL

  declear
	xx 类型 = xx;
	xx 类型 = &ii;
	
	cursor xx is <query>
	
begin


	if xx then

	elsif xx then 

	else 
	end if;


	while xx loop 
	end loop;	

	loop 
		exit when 
	end loop;

	for i in  1..10 loop
	end loop;
end