PLSQL基本图形界面操作以及表的增删改

PLSQL基本图形界面操作以及表的增删改

1.创建表

1.1.图形化创建表

image-20250407155343009

#点击columns创建列的项目

image-20250407155418359

#对应自动创建的SQL语句

image-20250407155942379

#点击apply创建表

image-20250407160715674

#查询表是否被正常创建

image-20250407161040606

1.2.CREATE创建多个表

#创建新表sql02,sql03,sql04

create table sql02
(
  sql02_id number(8) not null,
  sql02_id2 number(8) not null,
  sql02_date date not null,
  sql02_status varchar2(8) not null,
  sql02_number number(10,2)
);
image-20250407164228243

create table SQL03
(
    sql03_id1 NUMBER(8) not null,
    sql03_id2 NUMBER(8) not null,
    sql03_id3 NUMBER(8) not null
);
create table SQL04
(
    sql04_id NUMBER(8) not null,
    sql04_desc varchar2(20) not null,
    sql04_status varchar2(8) not null,
    sql04_price number(10,2) not null,
    sql04_date DATE not null,
    sql04_count NUMBER(8) not null
);

2.图形化插入数据的方法

image-20250407161149467

image-20250407161341364

image-20250407161905666

#服务器端由显示相关数据代表数据表已被创建

SQL> select * from sql01;

  SQL01_ID SQL01_DATE    SQL01_ST SQL01_NAME          SQL01_LEVE
---------- ------------ -------- -------------------- ----------
     1 01-FEB-25    new     itpux01          P1
     2 01-FEB-25    new     itpux02          P2

SQL> 

3.表的字段修改

3.1.图形化增加字段名

image-20250407162326012

#apply提交

image-20250407162636404

3.2.ADD增加字段名

ALTER TABLE SQL03 ADD (sql04_id number(8) not null);
image-20250408101943121

3.3.MODIFY更改字段名

alter table sql04 rename column SQL04_COUNT to SQL04_COUNT2;
image-20250408102629587

3.4.MODIFY更改字段属性

alter table sql03 modify (sql03_id3 varchar2(10));
image-20250407165127192

alter table sql04 modify sql04_count NUMBER(18);
image-20250407174312884

4.关于参数”sysdate”的用法

image-20250407163050003

#打勾之后,会自动填充日期

image-20250407162934680

image-20250407163159051

5.表的重命名的两种方法

5.1.图形化重命名:

image-20250407173304402

5.2.RENAME重命名

rename sql044 to sql04;

6.查询数据库有哪些表

#简单版
select * from tab;
image-20250407174904223

#详细版
select * from user_tables;
image-20250407175006676

7.表的复制

7.1.图形化复制表

#”Duplicate”仅复制表的结构,不复制表的数据。

image-20250407175837213

image-20250407175902551

image-20250407175930015

7.2.SQL语句复制表

create table itpux05 as select * from sql04;     #仅复制结构
select * from itpux05;

create table itpux06 as select * from sql01 where sql01_id=1;   #复制结构和数据
select * from itpux06;

8.表的删除

8.1.drop删除整个表

#11g会删除所有内容,12c以上版本会保留约束,索引等关系对象
drop table itpux06;
#删除表的所有内容,包括约束,视图等所有的关系对象。
drop table table_name cascade constraints; 
#释放资源,不经过回收站。
drop table table_name purge;
drop table itpux05 cascade constraints;
drop table itpux05 cascade purge;

8.2.图形化删除表的数据

#这种方式容易锁表,慎用

image-20250408151445419

image-20250408151827539

image-20250408151919413

8.3.delete删除表的数据

#清空表内数据

delete from sql03;
commit;

#删除单挑

#删除单条
select * from sql05;
delete from sql05 where sql04_id=1;
commit;
image-20250408165353374

#删除多条

#删除多条
delete from sql05 where sql04_id in (2,3);
delete from sql05 where sql04_id=2 and sql04_id=3; #这种不适用
image-20250408165730381

delete from sql05 where sql04_desc in ('19c','12c');
image-20250408171013556

image-20250408171043136

8.4.truncate删除(不能回滚)

–100g delete 2h,truncate 2分钟

#仅删除数据
truncate table itpux07;
select * from itpux07;

8.5.truncate和delete的区别

Oracle中TRUNCATE和DELETE的主要区别在于命令类型、删除范围、日志记录、性能、存储空间释放、触发器和索引处理等方面。

命令类型:
TRUNCATE属于DDL(数据定义语言),执行后自动提交事务,不可回滚。
DELETE属于DML(数据操纵语言),需显式提交或回滚。

删除范围:
TRUNCATE删除表中所有数据,不支持WHERE条件。
DELETE可通过WHERE子句删除部分数据。

日志记录与性能:
TRUNCATE不生成UNDO日志,仅记录少量元数据操作,速度快。
DELETE逐行删除并生成详细UNDO日志,性能较低。

存储空间释放:
TRUNCATE重置表的高水位线(High Water Mark),立即释放占用的数据库块。
DELETE仅标记数据为删除,保留存储空间供后续重用(不会回收空间),未被收缩前表大小不变。

触发器和索引:
TRUNCATE不触发DELETE触发器。
DELETE会触发对应触发器,且TRUNCATE后索引和统计信息会被重置,而DELETE可能残留碎片。

8.6.drop会删除索引、约束吗?

在Oracle数据库中,当你使用DROP TABLE命令删除一个表时,默认情况下,表中的所有对象,包括数据和约束(例如主键、外键、检查约束等),都会被删除。然而,对于索引的处理,情况略有不同,具体取决于你的Oracle版本和DROP TABLE命令的使用方式。

Oracle 11g及以下版本
在Oracle 11g及以下版本中,当你执行DROP TABLE命令时,如果没有指定额外的选项,表中的索引也会被删除。例如:

DROP TABLE my_table;
这个命令会删除my_table表及其所有的索引、约束等。

Oracle 12c及更高版本
从Oracle 12c开始,DROP TABLE命令引入了新的选项来更精细地控制删除操作。使用CASCADE CONSTRAINTS选项,你可以在删除表的同时保持其上的索引和其他约束。例如:

DROP TABLE my_table CASCADE CONSTRAINTS;
这样,虽然表会被删除,但表上的索引和其他约束不会被删除。如果你想保留索引,你应该使用INCLUDE CONSTRAINTS选项,但这实际上是保留所有约束,包括索引。如果你的目的是单独删除索引而不删除表,你应该使用DROP INDEX命令单独删除每个索引。例如:

DROP INDEX index_name;
总结
在Oracle 11g及以下版本:使用DROP TABLE会删除表及其所有对象(包括索引)。

在Oracle 12c及以上版本:使用DROP TABLE CASCADE CONSTRAINTS将只删除表和约束(但不包括索引),而单独的索引需要通过DROP INDEX命令删除。如果你想保留索引,可以使用其他管理工具或脚本手动处理。

因此,如果你只想删除表而不影响其上的索引,你应该在Oracle 12c及以上版本中明确指定不使用CASCADE CONSTRAINTS选项,或者在Oracle 11g及以下版本中简单地使用DROP TABLE命令。如果你需要单独处理索引的删除,使用DROP INDEX命令更为合适。

9.表的内容插入

9.1.图像化插入内容

流程:选中表格-》Query data-》添加”for update”-》点上方箭头执行-》插入数据-》打勾-》上方提交

#语句后面添加"for update"
select * from sql02 for update;
image-20250408123033778

9.2.insert语句插入

完整格式插入

#使用insert语句插入
insert into SQL03 (SQL03_ID1,SQL03_ID2,SQL03_ID3,SQL04_ID) values (1,2,'sql03',11);
#点击执行
commit;
#点击执行
image-20250408123928921

省略字段插入

#省略字段插入
insert into SQL04 VALUES (1,'11G','ACTIVE',20,SYSDATE,20);
insert into SQL04 VALUES (1,'12C','ACTIVE',40,SYSDATE,10);
#点击执行
COMMIT;
#点击执行
image-20250408124351449

使用变量来插入

#使用变量来插入
select * from sql03;
insert into sql03 values(&sql03_id1,&sql03_id2,&sql03_id3,&sql03_id);
commit;
image-20250408132239702

image-20250408132458730

从其他表直接导入数据到目标表

#从其他表直接导入数据到目标表
create table sql05 as select * from sql04;
select * from sql05;
delete from sql05;                           #清空表
commit;

insert into sql05 select * from sql04;       #从其他表导数据到目标表
select * from sql05;
commit;
image-20250408134710499

#有条件的插入

insert into sql04 values (2,'13c','active',200,sysdate,30);
insert into sql04 values (2,'19c','active',100,sysdate,40);
insert into sql04 values (2,'19c','active',90,sysdate,50);
commit;
select * from sql05;
image-20250408140048306

insert into sql05 select * from sql04 where SQL04_PRICE > 100;
select * from sql05;
COMMIT;
image-20250408140959059

10.表的内容修改

10.1.图形化更改表的内容

select * from sql02 for update;
image-20250408142330969

10.2.update语句修改

update sql02 set sql02_number=20002 where sql02_id=2;
select * from sql02;
commit;
image-20250408142950138

update sql02 set sql02_status='incomplete' where sql02_id=2;
select * from sql02;
commit;
image-20250408143549747

update sql02 set sql02_id2=222,sql02_status='OK' where sql02_id=2;
select * from sql02;
commit;
image-20250408144134142

update sql04 set (sql04_desc,sql04_count2) = (select sql04_desc,sql04_count2 from sql04 where sql04_id=2) where sql04_id = 3;

#原来的

image-20250408145712863

#更改后的

image-20250408150013332

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注