MySQLはOracleシーケンスに似たソリューションを実装しています

MySQLはOracleシーケンスに似たソリューションを実装しています

MySQLはOracleのようなシーケンスを実装している

Oracle は通常、主キー フィールドを処理するためにシーケンスを使用しますが、MySQL は同様の目的を達成するために増分を提供します。

しかし、実際に使用してみると、MySQL の自動インクリメントには多くの欠点があることがわかります。ステップ サイズ、開始インデックス、ループなどを制御することは不可能であり、データベースを移行する必要がある場合、主キーも大きな問題になります。

この記事では、アイデアとコードに重点を置いて、Oracle シーケンスをシミュレートするためのソリューションを記録します。

Oracle シーケンスの使用は、.nextval および .currval 疑似列を使用するだけです。基本的な考え方は次のとおりです。

1. シーケンス名と値を格納するための新しいテーブルを MySQL に作成します。

2. シーケンス テーブルの値を取得する関数を作成します。

詳細は以下の通りです。

テーブル構造は次のとおりです。

シーケンスが存在する場合はテーブルを削除します。  
テーブルシーケンスを作成する(  
  seq_name VARCHAR(50) NOT NULL, -- シーケンス名 current_val INT NOT NULL, -- 現在の値 increment_val INT NOT NULL DEFAULT 1, -- ステップ長(スパン)  
  主キー (seq_name)  
);

通貨のシミュレーションの実装

関数currval(v_seq_name VARCHAR(50))を作成します。  
整数を返す 
始める 
  整数値を宣言します。  
  値を 0 に設定します。  
  現在の値を値に選択する  
  シーケンスから 
  ここで、seq_name = v_seq_name;  
  戻り値;  
終わり;

関数の使用法: select currval('MovieSeq');

nextvalのシミュレーションスキームの実装

関数 nextval (v_seq_name VARCHAR(50)) を作成します。  
整数を返す 
始める 
 更新シーケンス 
 current_val = current_val + increment_val を設定します。  
 ここで、seq_name = v_seq_name;  
 currval(v_seq_name) を返します。  
終わり;

この関数は次のように使用されます: select nextval('MovieSeq');

設定値を増やす機能

関数setval(v_seq_name VARCHAR(50), v_new_val INTEGER)を作成します。  
整数を返す 
始める 
 更新シーケンス 
 current_val = v_new_val を設定します  
 ここで、seq_name = v_seq_name;  
currval(seq_name) を返します。

同様に、ステップ サイズ操作のための関数を追加することもできますが、ここでは説明しません。

構文に注意してください。データベースフィールドは次のように対応している必要があります。

bvboms を使用します。 
区切り文字 $$ 
関数setval(v_seq_name VARCHAR(50), v_new_val INTEGER)を作成します。 
整数を返す 
始める 
 更新シーケンス 
 current_val = v_new_val を設定します 
 ここで、seq_name = v_seq_name; 
currval(seq_name) を返します。
終了 $$
区切り文字 $$

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQLからOracleへのリアルタイム同期ソリューションの詳細な説明
  • Mysql と Oracle でよく使用される複数テーブルの変更ステートメントの概要
  • MySQLとOracleの違いのまとめ(機能性能の比較、選択、使用時のSQLなど)
  • MySQLデータベースとOracleデータベース間のバックアップをインポートする
  • OracleデータをMySQLデータベースに抽出する実装プロセス
  • Oracle と MySQL の高可用性ソリューションの比較分析
  • MySQLとOracleの違いの比較:6つのトリガー
  • MySQL と Oracle の違いの比較: 5: ストアド プロシージャと関数
  • MySQLとOracleの違いの比較3つの機能
  • MySQLとOracleの誤解の詳細な説明

<<:  Docker ベースの MySQL マスタースレーブ レプリケーションを実装する方法

>>:  シンプルなタブバー切り替えケースを実現するJavaScript

推薦する

nginx での listen ディレクティブの例の分析

プロットレビュー前回の記事では、ロケーション命令の解析プロセスを分析しました。この内容を簡単に確認し...

Linuxファイルを表示するコマンドの詳細な説明

Linuxファイルを表示する方法ファイルの内容を表示するコマンド: catは最初の行からコンテンツを...

MySQL トランザクションの詳細

目次導入取引の4つの特徴トランザクション分離レベル確認するMVCC現在の読書スナップショット読み取り...

Node.js で Bash スクリプトを書くための究極のソリューション

目次序文zxライブラリ$`コマンド` CD()フェッチ()質問()寝る()スローしない()チョークフ...

データベースのインデックス作成に関する知識ポイントのまとめ。必要な情報はすべてここにあります。

データベースインデックスについては皆さんもよくご存知だと思います。 インデックスは、データベース テ...

OpenLayersはポイントフィーチャーレイヤーの集約表示方法を実現します

目次1. はじめに2. ポイントフィーチャーレイヤーの集約3. 重合の特殊処理4. 重合の特殊処理 ...

Linux で scp コマンドを使用してファイルをリモートでコピーする方法の詳細な説明

序文scp は secure copy の略です。scp は、Linux システムの ssh ログイ...

一般的な HTTP ステータス コード 10 個の詳細な説明

HTTP ステータス コードは、Web サーバーの HTTP 応答ステータスを示すために使用される ...

CentOS 7.5 に Docker をインストールする詳細なチュートリアル

Docker入門Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテ...

HTML の marquee 属性の詳細な説明

このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルでのみサポートされているため、IEカ...

小さなプログラムが天井に張り付いてしまう問題を完璧に解決するためにposition:stickyを使用する方法

最近、あるプロジェクトのクライアントが、上部に 2 つのタブ メニューを配置することを要求しました。...

CSS 複数 3 列適応レイアウト実装の詳細な説明

序文従来のWEBレイアウトに沿うため、すべてヘッダーとフッターモードの左・中央・右レイアウトで書かれ...

MySQL ロックブロッキングの詳細な分析

日常のメンテナンスでは、スレッドがブロックされることが多く、データベースの応答が非常に遅くなります。...

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

Linux システムで Tomcat を自動的に起動するための設定方法の紹介

1. /etc/init.d ディレクトリに入ります: cd /etc/init.d 2. tomc...