前言: 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/Revoke system privileges
grant create sequence to LOTTERY;
--查询权限--
-- Grant/Revoke object privileges
grant select on DBA_CONSTRAINTS to LOTTERY;
grant select on DBA_CONS_COLUMNS to LOTTERY;
grant select on DBA_SEQUENCES to LOTTERY;
grant select on DBA_TABLES to LOTTERY;
grant select on DBA_TAB_COLUMNS to LOTTERY;
--或者--
-- Grant/Revoke system privileges
grant select any dictionary to 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 的表/序列
SELECT T1.TABLE_NAME TABLE_NAME,
T1.COLUMN_NAME COLUMN_NAME,
T1.SEQUENCE_NAME1 SEQUENCE_NAME
FROM ((SELECT C.TABLE_NAME,
CASE
WHEN C1.DATA_TYPE = 'NUMBER' THEN
C.COLUMN_NAME
ELSE
'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 --用户的约束对应的表列信息
WHERE C.OWNER = UPPER (USERNAME)
AND (C.CONSTRAINT_NAME, C.TABLE_NAME) IN
( SELECT S.CONSTRAINT_NAME, S.TABLE_NAME
FROM DBA_CONSTRAINTS S --用户的对象约束信息
WHERE S.OWNER = (UPPER (USERNAME))

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLは、中小企業に適しています。 1)中小企業は、顧客情報の保存など、基本的なデータ管理にMySQLを使用できます。 2)大企業はMySQLを使用して、大規模なデータと複雑なビジネスロジックを処理して、クエリのパフォーマンスとトランザクション処理を最適化できます。

INNODBは、次のキーロックメカニズムを通じてファントムの読み取りを効果的に防止します。 1)Next-KeyLockingは、Row LockとGap Lockを組み合わせてレコードとギャップをロックして、新しいレコードが挿入されないようにします。 2)実際のアプリケーションでは、クエリを最適化して分離レベルを調整することにより、ロック競争を削減し、並行性パフォーマンスを改善できます。

MySQLはプログラミング言語ではありませんが、そのクエリ言語SQLにはプログラミング言語の特性があります。1。SQLは条件付き判断、ループ、可変操作をサポートします。 2。ストアドプロシージャ、トリガー、機能を通じて、ユーザーはデータベースで複雑な論理操作を実行できます。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、データストレージ、管理、クエリ、セキュリティに適したオープンソースのリレーショナルデータベース管理システムです。 1.さまざまなオペレーティングシステムをサポートし、Webアプリケーションやその他のフィールドで広く使用されています。 2。クライアントサーバーアーキテクチャとさまざまなストレージエンジンを通じて、MySQLはデータを効率的に処理します。 3.基本的な使用には、データベースとテーブルの作成、挿入、クエリ、データの更新が含まれます。 4.高度な使用には、複雑なクエリとストアドプロシージャが含まれます。 5.一般的なエラーは、説明ステートメントを介してデバッグできます。 6.パフォーマンスの最適化には、インデックスの合理的な使用と最適化されたクエリステートメントが含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

INNODBのロックメカニズムには、共有ロック、排他的ロック、意図ロック、レコードロック、ギャップロック、次のキーロックが含まれます。 1.共有ロックにより、トランザクションは他のトランザクションが読み取らないようにデータを読み取ることができます。 2.排他的ロックは、他のトランザクションがデータの読み取りと変更を防ぎます。 3.意図ロックは、ロック効率を最適化します。 4。ロックロックインデックスのレコードを記録します。 5。ギャップロックロックインデックス記録ギャップ。 6.次のキーロックは、データの一貫性を確保するためのレコードロックとギャップロックの組み合わせです。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

SublimeText3 中国語版
中国語版、とても使いやすい

Dreamweaver Mac版
ビジュアル Web 開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
