点击蓝色字关注“SQL数据库运维”,回复“SQL”获取2TB学习资源!
既往文章链接(点击即可跳转):
Oracle基础语法汇总(一)
Oracle基础语法汇总(二)
Oracle基础语法汇总(三)
Oracle基础语法汇总(四)
Oracle基础语法汇总(五)
锁和数据库对象
1.锁:数据库用来控制共享资源并发访问的机制。
锁的类型:行级锁,表级锁
行级锁:Oracle数据库支持多种行级锁类型,包括行级共享锁(SS)、行级独占锁(SX)和行级排他锁(X)。在事务处理时,可以通过SELECT语句加上FOR UPDATE子句来获取行级排他锁。
行级锁的例子:
-- 启动第一个会话,开启事务并查询某行数据
BEGIN TRANSACTION;
SELECT * FROM your_table WHERE condition = value FOR UPDATE;
-- 在第一个会话中,此时对该行的操作(如UPDATE、DELETE)将阻塞,直至第一个事务提交或回滚
-- 启动第二个会话,尝试更新或删除第一个会话锁定的行
UPDATE your_table SET column = value WHERE condition = value;
-- 或
DELETE FROM your_table WHERE condition = value;
-- 在第二个会话中,上述更新或删除操作将会阻塞,直至第一个事务提交或回滚
-- 第一个会话提交或回滚事务
COMMIT; -- 或者 ROLLBACK;
-- 第二个会话中的更新或删除操作将执行,因为行级锁已被释放
在使用下列语句时,Oracle会自动应用行级锁:
insert,update,delete,select…… for update
select……for update允许用户一次锁定多条记录进行更新。
使用commit or rollback释放锁。
表级锁语法:
LOCK TABLE tables IN lock_mode MODE [ WAIT [, integer] | NOWAIT ];
表级锁类型lock_mode :
2.数据库对象
Oracle数据库对象又称模式对象,是数据库中用于存储数据和对数据进行操作的结构。数据库对象是逻辑结构的集合,最基本的数据库对象是表。
常见的Oracle数据库对象包括表(Table)、视图(View)、序列(Sequence)、索引(Index)、存储过程(Procedure)、函数(Function)、包(Package)、触发器(Trigger)等。
序列
在Oracle数据库中,序列(Sequence)是用来生成数据库表中唯一数字序列的数据库对象。序列通常用于自动生成主键值。
创建序列的基本语法如下:
CREATE SEQUENCE sequence_name
START WITH initial_value
INCREMENT BY increment_value
MINVALUE minimum_value
MAXVALUE maximum_value
CYCLE | NOCYCLE
CACHE cache_size
ORDER | NOORDER;
创建序列的示例
CREATE SEQUENCE my_sequence
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9999999
NO CYCLE
CACHE 20;----指定内存中预先分配的序号
使用序列生成新的序列号的语法如下:
SELECT sequence_name.NEXTVAL FROM dual;
例如,要生成序列my_sequence的下一个值,你可以执行:
SELECT my_sequence.NEXTVAL FROM dual;
更改删除序列:
alter sequence my_sequence maxvalue 1000000;--不能修改其start with 值
这将返回序列的下一个值,并且更新序列以便下一次调用返回下一个递增的值。
要删除一个序列,可以使用以下语法:
DROP SEQUENCE sequence_name;
例如,要删除上面创建的序列my_sequence,你可以执行:
DROP SEQUENCE my_sequence;
索引
索引是一种用于提高查询性能的数据库对象。它可以让你快速找到存储在表中的特定数据,而不需要查看表中的所有数据。
索引类型:
唯一索引,位图索引,组合索引,基于函数的索引,反向键索引
创建标准索引:
create index user_id_index on user_tbl(id) tablespace schooltbs;
重建索引:
alter index user_id_index rebuild;
删除索引:
drop index user_id_index;
创建唯一索引:
create unique index user_id_index on user_tbl(id);
创建组合索引:
create index name_pass_index on user_tbl(user_name,password);
创建反向键索引:
create index user_id_index on user_tbl(id) reverse;
查看已经存在的索引,可以使用以下SQL查询:
SELECT index_name, table_name, column_name
FROM user_ind_columns
WHERE table_name = 'EMPLOYEES';
点击关注“SQL数据库运维”,后台或浏览至公众号文章底部点击“发消息”回复关键字:进群,带你进入高手如云的技术交流群。后台回复关键字:SQL,获取学习资料。
动动小手点击加关注呦☟☟☟