前言: Oracle的序列(SEQUENCE)A SCHEMA OBJECT THAT GENERATES A SERIAL LIST OF UNIQUE NUMBERS FOR TABLE COLUMNS.TO USE A
前言:
Oracle的序列(SEQUENCE)A SCHEMA OBJECT THAT GENERATES A SERIAL LIST OF UNIQUE NUMBERS FOR TABLE COLUMNS.TO USE A SEQUENCE ,YOUR SCHEMA MUST CONTAIN THE SEQUENCE OR YOU MUST HAVE BEEN GRANTED THE SELECT OBJECT PRIVILEGE FOR ANOTHER USER IS SEQUENCE.ONCE A SEQUENCE IS DEFINED,IT CAN BE ACCESSED AND INCREMENTED BY MULTIPLE USERS(WHO HAVE SELECT OBJECT PRIVILEGE FOR THE SEQUENCE CONTAINING THE SEQUENCE)WITH NO WAITING.THE DATABASE DOES NOT WAIT FOR A TRANSACTION THAT HAS INCREMENTED A SEQUENCE TO COMPLETE BEFORE THAT SEQUENCE CAN BE INCREMENTED AGAIN.
简单说:序列一般用于自动递增生成主键值 ..
但是否有一些情况会导致调用SEQ_....NEXTVAL时大于主键最大值呢?
场景:
主键表 -> T表 '100W'数据同步到T1表(同步:TRUNCATE/DELETE或IMPDP...等方式[手动改数据])
例如: T表对应SEQ_T.NEXTVAL= 100W;
T1表对应SEQ_T.NEXTVAL= 10W;
TRUNCATE TABLE T1;
INSERT TABLE T1 SELECT * FROM T;
数据同步但T1表对应SEQ_T.NEXTVAL= 10W序列不变;
此时T1调用序列INSERT到T1表时就会报错 ( ORA-00001 : 违反唯一约束条件 (LOTTERY.PK_T1))
(若批量同步很多表就可能会引起很多表序列需要更新成主键最大值 1才能保证不报错
(可以用把源库的SEQUENCE同步过来①或者如下存储解决② ))
①PLSQL 工具的COMPARE USER OBJECTS可以解决SEQUENCE序列对象同步到其他环境...在此就不细说了
②我们环境序列一般都是由SEQ_表名字组成.所以写批量更新存储的时候比较方便~
如下存储针对常用于以上场景的环境,,生产环境不批量导新数据/同步用户数据/表数据 就很少用到...也可只提供参考...
--批量更新序列存储--
CREATE OR REPLACE PROCEDURE P_SYNCSEQ(USERNAME VARCHAR2 /*传入要检查/更新序列的用户*/ ) IS
/*
**@AUTHOR 毛海晴
ORACLE 批量更新SEQUENCE
注释:
批量更新SEQUENCE,
更新序列下一个值 = 主键最大值 1
---序列创建时,属性NOMAXVALUE=最大值是10的28次方
思路:
1、找到每个表主键列 且在该表主键最大值是什么?
2、找到表对应SEQUENCE值 与 表主键最大值去对比。
如果SEQUENCE 下一个值大于表主键最大值就不做更新;
否则需要进行更新(2中更新方式)
1)删除SEQUENCE ,创建新序列开始值为表主键最大值 1; --本文选择此方案...嘿嘿~
(坏处:赶好在DROP SEQUENCE..而程序也恰巧调用依赖它的函数和存储过程将失效
但 后续CREATE SEQUENCE了,再调用了会重新编译 调用..不会报错....有实验过哦~)
2)ALTER SEQUENCE .. INCREMENT BY .. NOCACHE;
SELECT ...NEXTVAL FROM DUAL;
ALTER SEQUENCE .. INCREMENT BY 1 CACHE 20;
.... sequence.nextval其实也可以用user_sequences.last_number字段实现..由于最早存储就这样的写就没改~...谅解~
SEQUENCE和表名长度最大限制是30
SEQUENCE规范的名字SEQ_ 表名字 -- 此处规范只是管理维护方便而已 并不是非要这样要求
如果表名长度大小大于26 加上"SEQ_"就大于了SEQUENCE长度限制的30
若表名长度大于26,那对应序列肯定不是规范命名(SEQ_表名字),再由于这样的序列并不多,所以将这些一一处理
在更新前可先注释掉EXECUTE IMMEDIATE,先作下测试看下效果,免得EXECUTE IMMEDIATE DROP .后创建报错,导致在调用 序列不会创建,也校验不到序列
所需权限:
-- 创建序列权限 --
-- 授予/撤销系统权限
grant create order to LOTTERY;
--查询权限--
-- 授予/撤销对象权限
grant select on DBA_CONSTRAINTS to LOTTERY;
将 DBA_CONS_COLUMNS 上的选择授予 LOTTERY;
将 DBA_SEQUENCES 上的选择授予 LOTTERY;
将 DBA_TABLES 上的选择授予 LOTTERY;
将 DBA_TAB_COLUMNS 上的选择授予 LOTTERY;
----或者
- - 授予/撤销系统权限
授予选择任何字典到LOTTERY;
*/
-- 变量
MAX_ID NUMBER(12);
P_SEQ_NUM NUMBER(12 );
P_TABLE_NAME VARCHAR2(50 );
P_COLUMN VARCHAR2(50 );
P_SEQUENCE VARCHAR2(50 );
P_SQL VARCHAR2(500 );
P_SEQ_SQL VARCHAR2(5000 );
P_SQL_SEQ VARCHAR2(30000 );
P_NEW_COUNT NUMBER(12);
--查询表长度小于26的表/序列
--游标
CURSOR C_CONS IS -- 查询表长度小于26的表/序列
选择 T1.TABLE_NAME TABLE_NAME,
T1.COLUMN_NAME COLUMN_NAME,
T1.SEQUENCE_NAME1 SEQUENCE_NAME
FROM ((SELECT C.TABLE_NAME,
案例
当 C1.DATA_TYPE = 'NUMBER' 时
C.COLUMN_NAME
其他
'TO_NUMBER(' || C.COLUMN_NAME || ')'
END COLUMN_NAME,
C.SEQUENCE_NAME1
FROM (SELECT C.TABLE_NAME,
C.COLUMN_NAME,
'SEQ_' || C.TABLE_NAME SEQUENCE_NAME1
FROM DBA_CONS_COLUMNS C --用户的约束对应的表列信息
其中 C.OWNER = UPPER(用户名)
AND (C.CONSTRAINT_NAME, C.TABLE_NAME) IN
( 选择 S.CONSTRAINT_NAME, S.TABLE_NAME
FROM DBA_CONSTRAINTS S --用户的对象约束信息
WHERE S.OWNER = (UPPER (用户名))

在数据库优化中,应根据查询需求选择索引策略:1.当查询涉及多个列且条件顺序固定时,使用复合索引;2.当查询涉及多个列但条件顺序不固定时,使用多个单列索引。复合索引适用于优化多列查询,单列索引则适合单列查询。

要优化MySQL慢查询,需使用slowquerylog和performance_schema:1.启用slowquerylog并设置阈值,记录慢查询;2.利用performance_schema分析查询执行细节,找出性能瓶颈并优化。

MySQL和SQL是开发者必备技能。1.MySQL是开源的关系型数据库管理系统,SQL是用于管理和操作数据库的标准语言。2.MySQL通过高效的数据存储和检索功能支持多种存储引擎,SQL通过简单语句完成复杂数据操作。3.使用示例包括基本查询和高级查询,如按条件过滤和排序。4.常见错误包括语法错误和性能问题,可通过检查SQL语句和使用EXPLAIN命令优化。5.性能优化技巧包括使用索引、避免全表扫描、优化JOIN操作和提升代码可读性。

MySQL异步主从复制通过binlog实现数据同步,提升读性能和高可用性。1)主服务器记录变更到binlog;2)从服务器通过I/O线程读取binlog;3)从服务器的SQL线程应用binlog同步数据。

MySQL是一个开源的关系型数据库管理系统。1)创建数据库和表:使用CREATEDATABASE和CREATETABLE命令。2)基本操作:INSERT、UPDATE、DELETE和SELECT。3)高级操作:JOIN、子查询和事务处理。4)调试技巧:检查语法、数据类型和权限。5)优化建议:使用索引、避免SELECT*和使用事务。

MySQL的安装和基本操作包括:1.下载并安装MySQL,设置根用户密码;2.使用SQL命令创建数据库和表,如CREATEDATABASE和CREATETABLE;3.执行CRUD操作,使用INSERT,SELECT,UPDATE,DELETE命令;4.创建索引和存储过程以优化性能和实现复杂逻辑。通过这些步骤,你可以从零开始构建和管理MySQL数据库。

InnoDBBufferPool通过将数据和索引页加载到内存中来提升MySQL数据库的性能。1)数据页加载到BufferPool中,减少磁盘I/O。2)脏页被标记并定期刷新到磁盘。3)LRU算法管理数据页淘汰。4)预读机制提前加载可能需要的数据页。

MySQL适合初学者使用,因为它安装简单、功能强大且易于管理数据。1.安装和配置简单,适用于多种操作系统。2.支持基本操作如创建数据库和表、插入、查询、更新和删除数据。3.提供高级功能如JOIN操作和子查询。4.可以通过索引、查询优化和分表分区来提升性能。5.支持备份、恢复和安全措施,确保数据的安全和一致性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

记事本++7.3.1
好用且免费的代码编辑器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。