1.delete和truncate的区别:
DELETE语句和TRUNCATE TABLE语句都可以删除表中的所有数据,但前者删除表的所有数据时,不会释放所占用的空间,并且操作可以撤销(ROLLBACK);后者删除表的所有数据时,执行速度更快,而且还会释放表,段所占用的空间,并且操作不能撤销(ROLLBACK)。
2.设置保存点并且回滚。
SQL> savepoint sp1;
保存点已创建。
SQL> update stu_grade set score=300 where cid=10201;
已更新 1 行。
SQL> select * from stu_grade;
SID CID SCORE
---------- ---------- ----------
10101 10101 87
10101 10201 300
10101 10301 79
SQL> rollback to sp1;
回退已完成。
SQL> select * from stu_grade;
SID CID SCORE
---------- ---------- ----------
10101 10101 87
10101 10201 100
10101 10301 79
3.数据库的权限:
CREATE SESSION:连接到数据库
CREATE SEQUENCE:创建序列。序列是一些列数字用来自动填充主键列
CREATE SYNONYM:创建同名对象,同名对象可以用于引用其他模式中的表。
CREATE TABLE:创建表。
CREATE ANY TABLE:在任何模式中创建表。
DROP TABLE:删除表。
DROP ANY TABLE:删除任何模式中的表。
CREATE PROCEDURE:创建存储过程。
EXECUTE ANY PROCEDURE:执行任何存储过程。
CREATE USER:创建用户。
CREATE VIEW:创建视图。
DROP USER:删除用户。
4.实例
1.建立用户,默认没有登录的权限,必须赋予create session的权限。
SQL> create user test identified by test;
用户已创建。
SQL> conn test/test;
ERROR:
ORA-01045: user TEST lacks CREATE SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
-----------------------------------------------------
赋权限之后:
SQL> grant create session to test;
授权成功。
SQL> conn test/test;
已连接。
2.修改用户密码
SQL> alter user test identified by mytest;
用户已更改。
SQL> conn test/mytest;
已连接。
3.删除用户
SQL> drop user test;
用户已删除。
4.查看授予用户scott的系统权限
SQL> select * from user_sys_privs;
USERNAME PRIVILEGE ADM
------------------------------ ---------------------------------------- ---
SCOTT UNLIMITED TABLESPACE NO
5.收回scott的用户权限
SQL>revoke user_sys_privs from scott;
6.授予用户scott在表teachers上wage、bonus的update权限
SQL>grant update (wage,bonus) on teachers to scott with grant option;
SQL> select * from user_tab_privs_recd;
OWNER TABLE_NAME
------------------------------ ------------------------------
GRANTOR PRIVILEGE GRA HIE
------------------------------ ---------------------------------------- --- ---
SYSTEM MVIEW_WORKLOAD
SYSTEM SELECT YES NO
SYSTEM MVIEW_FILTER
SYSTEM SELECT YES NO
SYSTEM MVIEW_LOG
SYSTEM SELECT YES NO
SYSTEM MVIEW_FILTERINSTANCE
SYSTEM SELECT YES NO
SYSTEM MVIEW_RECOMMENDATIONS
SYSTEM SELECT YES NO
SYSTEM MVIEW_EVALUATIONS
SYSTEM SELECT YES NO
SYSTEM MVIEW_EXCEPTIONS
SYSTEM SELECT YES NO
SYSTEM DEF$_AQCALL
SYSTEM SELECT YES NO
SYSTEM DEF$_ERROR
7.创建表
SQL> create table teacher as select * from teachers;
表已创建。
SQL> select * from teacher;
TID NAME TITLE HIREDATE BONUS WAGE DID
---------- -------- ------ -------------- ---------- ---------- ----------
10101 王彤 教授 01-9月 -90 1000 3000 101
10104 孔世杰 副教授 06-7月 -94 800 2700 101
10103 邹人文 讲师 21-1月 -96 600 2400 101
10106 韩冬梅 助教 01-8月 -02 500 1800 101
10210 杨文化 教授 03-10月-89 1000 3100 102
10206 崔天 助教 05-9月 -00 500 1900 102
10209 孙晴碧 讲师 11-5月 -98 600 2500 102
10207 张珂 讲师 16-8月 -97 700 2700 102
10308 齐沈阳 高工 03-10月-89 1000 3100 103
10306 车东日 助教 05-9月 -01 500 1900 103
10309 臧海涛 工程师 29-6月 -99 600 2400 103
10307 赵昆 讲师 18-2月 -96 800 2700 103
10128 王晓 05-9月 -07 1000 101
10328 张笑 29-9月 -07 1000 103
10228 赵天宇 18-9月 -07 1000 102
11111 林飞 11-10月-07 1000
已选择16行。
5.修改表定义
1.添加列
SQL> create table test(
2 tid int primary key,
3 tname varchar(23)
4 );
SQL> alter table test add tage int;
表已更改。
SQL> alter table test add tsex varchar(2) check (tsex in('男','女'));
表已更改。
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- ------------------
TID NOT NULL NUMBER(38)
TNAME VARCHAR2(23)
TAGE NUMBER(38)
TSEX VARCHAR2(2)
2.修改列
SQL> alter table test modify tsex varchar(2) default '男' check (tsex in('男','女'));
表已更改。
SQL> insert into test(tid) values(23423);
已创建 1 行。
SQL> select * from test;
TID TNAME TAGE TS
---------- ----------------------- ---------- --
23423 男
3.删除列
SQL> alter table test drop column tsex;
表已更改。
SQL> desc test;
名称 是否为空? 类型
----------------------------------------- -------- -------------
TID NOT NULL NUMBER(38)
TNAME VARCHAR2(23)
TAGE NUMBER(38)
4.添加NOT NULL约束,使用alter。。。。modified,不能使用alter....add constraint。
alter table student name not null;
5.添加/删除约束
alter table student add/drop constraint student_pk primary key (sid);
6.禁止/允许约束的使用
alter table student disable/enable constraint student_pk;
7.修改表名
rename <table_old_name> to <table_new_name>;
8.修改索引名称
alter index <index_old_name> rename to <index_new_name>;