ナビゲーション:
目次
1.2 Oracle と MySQL はどのようにテクノロジーを選択するのですか?
1.6.1 Oracle: 二重引用符の下では大文字と小文字が区別されます
2.1 Oracle で一般的に使用されるフィールド タイプ
8.1 Oracle はテーブルを作成し、レコードを挿入します
8.2 MySQL はテーブルを作成し、レコードを挿入します
9.1 Oracle: トランザクションを完全にサポートしますが、デフォルトでは自動的にコミットしません。
9.2 MySQL: innoDB のみがトランザクションをサポートし、デフォルトで自動的にコミットされます。
1. 基本的な違い
1.1 基本機能
- データベースの種類: Oracle データベースはオブジェクト リレーショナル データベース管理システム (ORDBMS) であり、MySQL はオープン ソースのリレーショナル データベース管理システム (RDBMS) です。
- オブジェクト リレーショナル データベース管理システム:オブジェクト モデルに基づいてデータとそのメソッドを格納し、データはオブジェクトに格納されます。オブジェクト クラス、オブジェクト ID、ポリモーフィズム、カプセル化、継承などの機能があります。複雑なデータを保存するために使用されます。
- リレーショナル データベース管理システム:リレーショナル モデルに基づいて、データのみが格納され、データは特定の情報を含むテーブルの形式でエンティティに格納されます。比較的単純なデータを処理する場合
- 顧客規模: Oracle は主に大企業レベルのユーザー向けですが、MySQL は中小企業や個人に適しています。Gartner によると、2020 年の時点で、Oracle は世界のリレーショナル データベース管理システム市場の 40% 以上を占めていますが、MySQL はわずか 5% にすぎません。
- コスト: Oracle は、有料ライセンスが必要なプロフェッショナルなデータベース管理システムです。MySQL (コミュニティ エディション、基本機能をサポート) は、マルチスレッド レプリケーション、クエリ パフォーマンスの最適化、物理バックアップおよび増分バックアップ、セキュリティおよび暗号化機能、管理および監視ツールなどの高度な機能を使用する必要がある場合に使用できる無料のデータベース管理システムです。公式サービスなど)を利用するには、ライセンスまたは製品版(Enterprise)の購入が必要な場合があります。
- 移植性と互換性: MySQL はさまざまなプラットフォームで簡単に実行でき、他の多くのオープン ソース ソフトウェアと統合できます。Oracle もクロスプラットフォーム サポートを提供していますが、独自のテクノロジー スタックと製品統合を使用することを好みます。
- セキュリティ: Oracle は、ユーザー名、パスワード、構成ファイル、ローカル認証、外部認証、高度なセキュリティ拡張機能など、多くのセキュリティ機能を使用します。MySQL は、ユーザー名、パスワード、場所という 3 つのパラメーターのみを使用してユーザーを認証します。
- メモリ: Oracle は大きなメモリ スペースを占有します (オブジェクトに直面し、データも保存するため)。MySQL は比較的小さなメモリ スペースを占有します。
- パフォーマンスとスケーラビリティ: MySQL は合理化された設計と管理により、特に読み取りと書き込みの点で、一般に Oracle よりもパフォーマンスが高くなります。MySQL のスケーラビリティも比較的良好です。これは、MySQL のコミュニティが活発であり、選択して使用できるプラグインやツールが多数あるためです。
- 同時実行性のサポート: Oracle は大規模な同時訪問をサポートしており、OLTP (オンライン トランザクション処理) に最適なツールです。MySQL は同時実行性が低く、大規模な訪問に直面してもサブテーブルとサブデータベースによって最適化できます。
- OLTP (Online Transaction Processing):非常にトランザクション性の高いシステムを指します。一般に、主に小規模なトランザクションと小規模なクエリ用の可用性の高いオンライン システムです。システムを評価する場合、通常、1 秒あたりに実行されるトランザクションと SQL の実行数に依存します。典型的な OLTP システムには、電子商取引システム、銀行、証券などが含まれます。
- 保存される内容: Oracle と比較すると、MySQL にはテーブルスペース、ロール管理、スナップショット、シノニムとパッケージ、および自動ストレージ管理がありません。
- 移植性と互換性: MySQL はさまざまなプラットフォームで簡単に実行でき、他の多くのオープン ソース ソフトウェアと統合できます。Oracle もクロスプラットフォーム サポートを提供していますが、独自のテクノロジー スタックと製品統合を使用することを好みます。
- 一時テーブルの機能: Oracle 一時テーブルはデフォルトですべてのセッションに表示され、一度作成されると明示的に削除されるまで存在します。一時テーブルは、現在のセッションまたはトランザクション内でのみ表示されるように設定できます。MySQL 一時テーブルは現在のセッションでのみ表示され、セッションが閉じられると、一時テーブルは自動的に削除されます。
1.2 Oracle と MySQL はどのようにテクノロジーを選択するのですか?
次のシナリオは Oracle の選択に適しています。
- データベースに対する高度な要件:企業がデータベースに対して高度な要件 (複雑なデータとその方法の保存、高可用性、災害復旧、セキュリティなどを必要とするなど) を抱えている場合は、Oracle の使用を検討できます。
- 大規模なエンタープライズ アプリケーション:オラクルは、大規模で複雑なエンタープライズ レベルのアプリケーションの処理に優れています。複雑なデータ モデルと関係をサポートしながら、大量のデータと高度な同時アクセス要求を処理できます。
- 高いプロジェクトの同時実行性: OLTP (オンライン トランザクション処理) に最適なツールである Oracle を使用します。
- 高いセキュリティ要件: Oracle は、ユーザー名、パスワード、構成ファイル、ローカル認証、外部認証、高度なセキュリティ拡張機能など、多くのセキュリティ機能を使用します。金融や銀行業務など、高度なセキュリティ要件が必要なプロジェクトでは、通常、データベースとして Oracle が選択されます。
- 高可用性および災害復旧の要件:オラクルは、システムの継続性とデータの信頼性を確保するために、クラスタ構成、データ複製、自動フェイルオーバーなどの強力な高可用性および災害復旧ソリューションを提供します。有料版のMySQLもサポートされていますが、信頼性はOracleには及びません。
1.3 RDBMS と ORDBMS の違い
標準 | RDBMS | OODBMS |
---|---|---|
略語の意味 | リレーショナルデータベース管理システム | ODBMS |
データの保存方法 | データは、特定の情報を含むテーブルの形式でエンティティに保存されます。 | データはオブジェクトに保存されます |
データの複雑さ | 比較的単純なデータを扱う | RDBMSよりも大きくて複雑なデータを処理します |
グループ | 共通に定義されたエンティティのセットを持つさまざまなエンティティ タイプ | クラスは、共通の関係、動作、類似のプロパティを共有するオブジェクトのグループを記述します。 |
情報処理 | RDBMS はデータを保存するだけです | データとメソッドを保存する |
メインターゲット | データはアプリケーションから独立しています | データのカプセル化 |
主キー | 主キーはテーブル内のオブジェクトを明確に識別できます。 | オブジェクト識別子 (オブジェクト識別子、OID) は、あらゆるオブジェクトまたはエンティティに対して明確で永続的です。 |
1.4 デフォルトのポート番号とユーザー名
Oracle のデフォルト ポート: 1521 デフォルトのユーザー: システム
MySQL のデフォルト ポート: 3306 デフォルトのユーザー: root
1.5 ログイン方法
MySQL に接続します。
mysql -u root -p
-- 输入密码
-- 查询所有数据库
show databases;
-- 切换到 "test" 这个数据库
use test;
-- 查询该数据库所有表
show tables;
オラクルに接続します。
sqlplus
-- 输入用户名
-- 输入密码
-- 查询该用户的表
select TABLE_NAME from user_tables;
注: Oracle ログインでは、ログイン ユーザーにセッション権限を付与する必要があり、テーブルの作成ではクォータを割り当てる必要があります。
1.6 大文字と小文字は区別されます
1.6.1 Oracle: 二重引用符の下では大文字と小文字が区別されます
Oracle の大文字と小文字を区別しないための前提条件は、二重引用符 "" (テーブル名、フィールド名)を使用しないことです。
CREATE TABLE "TableName"("id" number); // 如果创建表的时候是这样写的,那么就必须严格区分大小写
SELECT * FROM "TableName"; // 不仅要区分大小写而且要加双引号,以便和上面的第三种查询方式区分开
Oracle はデフォルトで大文字を使用し、フィールドの特定の値に影響されます。
1.6.2 MySQL: 大文字と小文字を区別しない
大文字と小文字は区別されません (キーワードとフィールド名は区別されません)
Alibaba Java Development Manual、MySQL テーブル作成仕様:
[必須] テーブル名とフィールド名には小文字または数字を使用する必要があります。数字の先頭に使用することは禁止されており、2 つのアンダースコアの間には数字のみが使用されます。データベースのフィールド名の変更は、プレリリースを実行できないため非常にコストがかかります。そのため、フィールド名は慎重に検討する必要があります。
Windows は大文字と小文字を区別しないため、同じ名前で大文字と小文字が異なるファイル名は上書きされます。
MySQL は Windows では大文字と小文字が区別されませんが、Linux ではデフォルトで大文字と小文字が区別されます。したがって、無関係な問題を避けるために、データベース名、テーブル名、およびフィールド名に大文字を使用することはできません。MySQL
フィールドは、大文字と小文字の両方で検索できます。
2. 一般的に使用されるフィールドの種類
2.1 Oracle で一般的に使用されるフィールド タイプ
- 値:数値 数値(10) 数値(10,2)
- 文字列: CHAR、NCHAR、VARCHAR2、および NVARCHAR2。4 つの文字タイプはすべて少なくとも 1 バイトの長さである必要があり、CHAR と NCHAR は最大 2000 バイト、NVARCHAR2 と VARCHAR2 の最大制限は 4000 バイトです。
- 日付:日付
2.2 MySQL の一般的なフィールド タイプ
- 値: tinyint smallint mediaint int bigint 10 進数
- 文字列: char、varchar(10)。許可される最大長は 65,535 バイトです (CHAR は最大 255 バイト、VARCHAR は 65.535 バイトです)。
- 日付:日付、時刻、タイムスタンプ、年
3. 日付と時刻
3.1 オラクル
Javaで一般的に使用される「yyyy-MM-dd mm:HH;ss」 -> 「2021-02-03 16:25:48」は、
Oracle では「yyyy-mm-dd hh24:mi:ss」と表現されます。
3.2 MySQL
-- 获取当前时间戳
select unix_timestamp();
-- 1612340981
-- 获取当前日期时间
select now();
2021-02-03 16:30:22
-- 获取当前日期
select date(now());
-- 2021-02-03
-- timestamp -> datetime
select FROM_UNIXTIME(1612340981);
-- 2021-02-03 16:29:41
-- datetime -> varchar (time与之类似:time_format(time,format))
select DATE_FORMAT('2008-08-08 22:23:01','%Y %m %d %H %i %s');
-- 2008 08 08 22 23 01
-- varchar -> date str_to_date(str, format)
select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s');
-- 2008-08-09 08:09:30
4番目に、テーブルスペース/データベースを作成します。
4.1 oracle create テーブルスペース
SQLプラス:
テーブルスペースを作成する
create tablespace 表空间名称 logging datafile '路径\名称.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;
例:
create tablespace NWZC logging datafile 'D:\javautils\oracle1\oradata\ORCL\zuigaofa.dbf' size 2000m autoextend on next 500m maxsize 30720m extent management local;
ユーザーを作成
create user 用户名 identified by 密码 default tablespace 表空间名;
既存のユーザーがいる場合は、指定されたユーザーに切り替えて、ユーザーのデフォルトのテーブルスペースを変更します。
alter database default tablespace 表空间;
例:
alter database default tablespace NWZC;
認可された
grant exp_full_database to 用户名 ;
grant imp_full_database to 用户名 ;
grant resource to 用户名 ;
grant connect to 用户名 ;
grant dba to 用户名 ;
例:
grant exp_full_database to NWZC;
grant imp_full_database to NWZC;
grant resource to NWZC;
grant connect to NWZC;
grant dba to NWZC;
4.2 MySQL でデータベースを作成する
-- 查询数据库
SHOW DATABASES;
-- 创建数据库
CREATE DATABASE 数据库名称;
-- 创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
-- 查看当前使用的数据库
SELECT DATABASE();
-- 使用数据库
USE 数据库名称;
5. 一時テーブルを作成する
5.1 Oracle が一時テーブルを作成する
Oracle 一時テーブルはデフォルトですべてのセッションに表示され、一度作成されると明示的に削除されるまで存在します。一時テーブルは、現在のセッションまたはトランザクション内でのみ表示されるように設定できます。
CREATE GLOBAL TEMPORARY TABLE temp_table (
id NUMBER,
name VARCHAR2(50)
) ON COMMIT DELETE ROWS;
ON COMMIT DELETE ROWS は、トランザクションがコミットされたときに一時テーブル内のすべての行が削除されることを指定します。これにより、セッションが終了すると、すべての一時データが確実にクリアされます。
一時テーブルが消失したときに設定されます。
- ON COMMIT DELETE ROWS: データ行は現在のトランザクションでのみ表示され、これがデフォルト値でもあります。データ行はトランザクションがコミットされると消えます。
- ON COMMIT PRESERVE ROWS : データ行は現在のセッションでのみ表示されます
一時テーブル内のデータの追加、削除、変更、およびクエリは、通常のテーブルと一貫性があります。
Insert into tmp_gttable (id,name) values(1,'test');
Update tmp_gttable set name = 'test_update' where id = 1;
Delete from tmp_gttable where id = 1;
5.2 MySQL は一時テーブルを作成します
MySQL 一時テーブルは現在のセッションでのみ表示され、セッションが閉じられると、一時テーブルは自動的に削除されます。
CREATE TEMPORARY TABLE 表名 (字段列表);
例は次のとおりです。
CREATE TEMPORARY TABLE tmp_table (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
一時テーブルが正常に作成されたら、SELECT、INSERT、UPDATE、DELETE などのステートメントを使用して一時テーブルを操作できます。その構文は通常のテーブルの構文と同じです。
6. テーブルスペース/データベースを削除します
6.1 Oracle のテーブルスペースの削除
1.データ オブジェクトを含まないテーブルスペースを削除します。
drop tablespace xxx
2. データオブジェクトを含むテーブルスペースを削除します。
drop tablespace xxx including contents and datafiles;
6.2 MySQL データベースの削除
-- 删除数据库
DROP DATABASE 数据库名称;
-- 删除数据库(判断,如果存在则删除)
DROP DATABASE IF EXISTS 数据库名称;
7. データのバックアップとリカバリ
7.1 oracleインポートdmpファイル
1. まず、dmp バージョンがローカルの oracle バージョンと一致していることを確認します。
2. インポートするdmpファイルをoracle11gインストールディレクトリ./admin/orcl/dpdump
配下に配置します。
3. dmp を右クリックして notepad++ で開き、2 行目のバージョン番号を見つけて、独自の Oracle バージョンに変更します。たとえば、私のバージョンは 19c です。
3.sqlplus: システムアカウントを持つユーザーを作成し、それを認可します。
create user ZHANGSAN identified by 1234;
grant connect , dba to ZHANGSAN ;
grant resource to ZHANGSAN ;
grant imp_full_database to ZHANGSAN ;
grant exp_full_database to ZHANGSAN ;
4. cmd コマンドライン: 移行
impdp ZHANGSAN/1234 dumpfile = XXX.dmp
7.2 MySQL バックアップの移行
navicat を使用して SQL ファイルを直接ダンプして実行するだけです。
8. テーブルを作成し、レコードを挿入します
8.1 Oracle はテーブルを作成し、レコードを挿入します
create table t_student(
sid int primary key ,
sname varchar2(10) not null ,
enterdate date,
gender char(2),
mail unique,
age number check (age>19 and age<30)
)
insert into t_student values(stuseq.nextval,'Test',to_date('1990-3-4','YYYY-MM-DD'),'男','[email protected]',20);
commit;
8.2 MySQL はテーブルを作成し、レコードを挿入します
create table t_student(
sid int primary key auto_increment,
sname varchar(1) not null ,
enterdate date,
gender char(1),
age int,
mail varchar(10) UNIQUE
)
insert into t_student values(null,'Test','1990-3-4','男',30,'[email protected]')
MySQL は、now() または sysdate() を使用して日付を挿入します。複数のエントリをカンマで区切って挿入できます。
テーブル データの削除: Oracle は省略できます: delete from t_student; (すべてのデータを削除)
外部キー制約: Oracle は制約、MySQL は制約
カスケード操作:
- Oracle:削除時 null セットまたは削除カスケード時
- MySQL: 削除時に null を更新時に設定 CASCADE
9. 取引の提出方法
9.1 Oracle:トランザクションを完全にサポートしますが、デフォルトでは自動的にコミットしません
Oracle はデフォルトでは自動的に送信されず、ユーザーが手動で送信する必要があります。送信は次のコマンドで実行できます。
- BEGIN:トランザクション ブロックの開始の記号。トランザクション ブロック内の SQL ステートメントは、すべて正常に実行されるか、すべて失敗してロールバックされます。
- COMMIT: トランザクションをコミットします。実行が成功すると、トランザクションがコミットされ、データベースへの変更が表示されます。
- ROLLBACK: ROLLBACK は、コミットされていないトランザクションをキャンセルし、データベースをトランザクション開始前の状態に復元するために使用されます。ROLLBACK ステートメントが正常に実行されると、トランザクション内で行われたすべての変更が元に戻されます。
- SAVEPOINT: SAVEPOINT は、トランザクション内にセーブポイントを作成し、トランザクションの実行中にそのセーブポイントにロールバックできるようにするために使用されます。必要に応じてロールバックできるトランザクション内の中間点を設定できます。
- SET TRANSACTION: SET TRANSACTION は、トランザクションの属性を設定するために使用されます。このコマンドを使用して、トランザクション分離レベル、読み取りおよび書き込み権限、その他の属性を設定できます。
例:
BEGIN
SAVEPOINT sp;
-- 向学生表插入数据
INSERT INTO student_table (student_name, student_age) VALUES ('John', 18);
INSERT INTO student_table (student_name, student_age) VALUES ('Emma', 19);
-- 向班级表插入数据
INSERT INTO class_table (class_name, class_size) VALUES ('Class A', 30);
INSERT INTO class_table (class_name, class_size) VALUES ('Class B', 28);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK TO sp;
RAISE;
END;
9.2 MySQL: innoDB のみがトランザクションをサポートし、デフォルトで自動的にコミットされます。
トランザクションのコミットステータスを表示する
SHOW STATUS LIKE 'Innodb_trx_id'
トランザクションのコミットを終了します。
set AutoCommit = 0;
トランザクションを手動でコミットします。
START TRANSACTION; -- 开始事务
INSERT INTO student (name,age) VALUES ('Tom',18); -- 执行一些数据操作
INSERT INTO score (student_id,score) VALUES (1,90);
COMMIT; -- 手动提交事务
10. ページネーション
10.1 Oracle: rownum 分類の使用
-- 利用rownum。rownum从0开始
select * from
(select rownum rr,stu.* from (select * from t_student order by sid desc) stu )
where rr>=1 and rr<=5;
10.2 MySQL: 制限キーワードによるページング
-- 记录从0开始
-- 从第0条开始,取5条数据
select * from test2 order by sid desc limit 0,5