Oracle

教程1:https://www.yiibai.com/oracle/oracle-drop-table.html

W3c:https://www.w3cschool.cn/oraclejc/

oracle判断表是否存在,如果存在就删除

-- 判断是否存在
declare
num number;
begin
select count(*) into num from user_tables where table_name =upper('mid_bd_corp');
if num = 1 then
execute immediate 'drop table mid_bd_corp';
end if;
end;
/
--创建表
create table mid_bd_corp
(
BAG_ID VARCHAR2(36 BYTE) not null,
USER_ID VARCHAR2(36 BYTE) not null,
TYPE VARCHAR2(36 BYTE),
ASSOCIATED_FIELD VARCHAR2(36 BYTE),
constraint PK_DPMS_BAG_FILE primary key (BAG_ID, USER_ID)
);

注意:在end;后的/不要省略,不然会报错!!!

oracle之唯一索引

1 oracle支持唯一索引。可以理解为唯一约束。用来控制和约束需要插入的表中字段。(主键自动为唯一约束,且不为空)。

2 唯一索引,可以理解为:唯一约束,用来控制表中字段的。例如表中有两个或多个字段。插入数据库时,不希望这些字段值出现重复。则可以将这些字段添加为唯一索引。unique 表示唯一
如:create unique index user_password_index on users(username,password);
格式:create unique index 唯一索引名 on 表名(字段1,字段2..)。
这样进行插入时,先检查唯一索引值是否出现重复。如果出现重复则报错。

3 唯一索引也能删除。通过drop index 索引名即可。
如:drop index user_password_index
格式:drop index 索引名

4 唯一索引的字段也可以出现null。而主键不能出现null.

综述:唯一索引用来控制表中的字段不出现重复的。对表中的字段进行约束。
例子:
select * from USERS

create unique index user_password_index on users(username,password);
select * from users
insert into users values(101,’admin’,’888888’,1)
insert into users values(102,’xcl’,’123’,1)–如果数据库中出现重复了,则报错
drop index user_password_index

索引说明:

索引是数据库对象之一,用于加快数据的检索,类似于书籍的索引。如果有一份10页的账单,请你找出账单中客户名=“小雨”的所有流水。如果没有索引,你需要搜索整个账单,因为不能保证只有一个‘小雨’的流水,必须全部搜索一遍,这种方法就相当于全表扫描检索方式。但如果账单前页附有索引,里面有所有客户名+rowid的索引条目,且按客户名升序排列,你只需要检索索引页,就可以直接查到对应的记录,这就是索引的工作原理。相比之下,索引可以有效的提高检索速度。

  • 索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表。
  • 索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响。
  • 索引对用户是透明的,无论表上是否有索引,sql语句的用法不变。
  • oracle创建主键时会自动在该列上创建索引。

索引创建语句:

  • 单列索引:

​ create index index_name on table_name(column_name);

  • 复合索引:

​ create index index_name on table_name(column_name1, column_name2, column_name, …);

  • 删除索引:

​ drop index index_name;

  • 查看某表的所有索引:

​ select * from all_index where table_name=’表名’;

  • 查看某表中带有索引的所有列:

​ select * from all_ind_columns where table_name=’表名’;

索引的建立原则:

  • 索引应该建立在WHERE子句中经常使用的列上。如果某个大表经常使用某个字段进行查询,并且检索的行数少于5%,则应该考虑在该列上建立索引。
  • 对于两个表连接的字段应该建立索引。
  • 如果经常在某个表的字段上进行order by 的话,则也应该在这个列上建立索引。
  • 小表数据很少使用全表扫描速度已经很快,没必要建立索引。

索引的优点:

  • 很大的提高了数据检索的速度;
  • 创建唯一索引能够保证数据库表中每一行数据的唯一性(唯一约束性)。
  • 提高表与表之间的连接速度。

ORACLE分页查询SQL语句(最有效的分页)

1.无ORDER BY排序的写法。(效率最高)
(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!)

SELECT *

FROM (SELECT ROWNUM AS rowno, t.*

FROM emp t

WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')

AND TO_DATE ('20060731', 'yyyymmdd')

AND ROWNUM <= 20) table_alias

WHERE table_alias.rowno >= 10;

2.有ORDER BY排序的写法。(效率较高)
(经过测试,此方法随着查询范围的扩大,速度也会越来越慢哦!)

SELECT *

FROM (SELECT tt.*, ROWNUM AS rowno

FROM ( SELECT t.*

FROM emp t

WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')

AND TO_DATE ('20060731', 'yyyymmdd')

ORDER BY create_time DESC, emp_n

bug

无法连接服务器ORacle数据库(可以Ping通)