ホームページ データベース mysql チュートリアル MySQL の最適化 - 追加、削除、変更の具体的な分析 (図)

MySQL の最適化 - 追加、削除、変更の具体的な分析 (図)

Mar 10, 2017 am 10:21 AM

MySQL の最適化 - 追加、削除、および変更の具体的な分析 (図)

Insert

複数行のクエリ結果をテーブルに挿入します

構文

INSERT INTO table_name1(column_list1) SELECT (column_list2) FROM table_name2 WHERE (condition)
ログイン後にコピー

table_name1 は挿入されるテーブルを指定します; column_list1 は、テーブルにデータを挿入するテーブルを指定します; table_name2 は、挿入されたデータのクエリ元のテーブルを指定します; このリストには、同じ数のフィールドが必要です。 ;

condition は、column_list1 リストと同じデータ型です

SELECT ステートメントのクエリ条件を指定します

person_old テーブルのすべてのレコードをクエリし、それらを person テーブルに挿入します

CREATE TABLE person (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME CHAR(40) NOT NULL DEFAULT '',
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

CREATE TABLE person_old (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  NAME CHAR(40) NOT NULL DEFAULT '',
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

SELECT * FROM person_old
ログイン後にコピー

レコードが次であることがわかります。正常に挿入され、person_old テーブルには 2 つのレコードが追加されました。次に、person_oldperson_old テーブル内のすべてのレコードを person テーブルに挿入します

INSERT INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;
SELECT * FROM person
ログイン後にコピー


ここで、id フィールドが自動インクリメントされた主キーであることがわかります。挿入時に値を確認する必要があります。よくわからない場合は、挿入時にフィールドを無視できます。

他のフィールドの値のみを挿入します。

再度実行するとエラーが発生します

MYSQL と SQLSERVER の違い:

違い 1

インポートされるデータに重複する値がある場合、MYSQL には 3 つのオプションがあります

オプション 1:ignore キーワードを使用します
オプション 2: replace into を使用します
オプション 3: ON DUPLICATE KEY UPDATE

2 番目と 3 番目のオプションは、より複雑で要件を満たしていないため、ここでは紹介しません。ここでは最初のオプションについてのみ説明します

TRUNCATE TABLE person

TRUNCATE TABLE persona_old 

INSERT INTO person_old
VALUES (11,'Harry',20,'student'),(12,'Beckham',31,'police')

##注意下面这条insert语句是没有ignore关键字的
INSERT  INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

INSERT INTO person_old 
VALUES (13,'kay',26,'student')

##注意下面这条insert语句是有ignore关键字的
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;
ログイン後にコピー

挿入が成功したことがわかります

SQLSERVER

SQLSERVER側で、重複キーを無視するには、WITH (IGNORE_DUP_KEY=ON)を指定する必要がありますオン [PRIMARY]

そのため、重複する値を挿入すると、SQLSERVER はその値を一度保持し、重複する値が 2 回目に見つかった場合、SQLSERVER はそれを無視します

違い2

自動インクリメント列を挿入する場合の違い

SQLSERVERはSETを使用する必要がありますIDENTITY_INSERTテーブル名ONは自動インクリメントフィールドの値をテーブルに挿入できます。 SET IDENTITY_INSERT テーブル名 ON

を追加しない場合、テーブル値にデータを挿入するときに自動インクリメント フィールドの値を指定できず、SQLSERVER は自動的に値を追加できません。あなたのため

INSERTINTO person(NAME,age,info) VALUES ('feicy',33,'student')
ログイン後にコピー

ですが、MYSQL はそれを必要とせず、自由度が非常に大きいです

ID フィールドの値を NULL として指定することができ、MYSQL が自動的に ID フィールドを追加します

INSERTINTO person(id,NAME,age,info) VALUES (NULL,'feicy',33,'student')
ログイン後にコピー

値を指定することもできます

INSERT IGNORE INTO person(id,NAME,age,info) VALUES (16,'tom',88,'student')
ログイン後にコピー

または id の値を書き込むことはできません。MYSQL が自動的に追加します

INSERT IGNORE INTO person(NAME,age,info) VALUES ('amy',12,'bb')
ログイン後にコピー

id フィールドの値を指定するかどうかを指定するときは、現在の id フィールドの列に挿入する値がない限り、つまり重複する値がない限り、自由度は非常に高くなります。指定する必要はありません

SET IDENTITY_INSERT テーブル名 ON

オプション

違い 3

一意のインデックスでの NULL 値の重複の問題MYSQL

MYSQL では、NULL フィールドに対して UNIQUE インデックスが失敗します

insert into test(a) values(null)
 
insert into test(a) values(null)
ログイン後にコピー

上記の挿入ステートメントは繰り返し挿入できます (ジョイントユニークインデックスについても同様です)

SQLSERVER

SQLSERVER が機能しません

CREATE TABLE person (
  id INT  NOT NULL IDENTITY(1,1),
  NAME CHAR(40)  NULL DEFAULT '',
  age INT NOT NULL DEFAULT 0,
  info CHAR(50) NULL,
  PRIMARY KEY (id)
)

CREATE UNIQUE INDEX IX_person_unique ON [dbo].[person](name)

INSERT INTO [dbo].[person]
        ( [NAME], [age], [info] )
VALUES  ( NULL, -- NAME - char(40)
          1, -- age - int
          'aa'  -- info - char(50)
          ),
          ( NULL, -- NAME - char(40)
          2, -- age - int
          'bb'  -- info - char(50)
          )
ログイン後にコピー

消息 2601,级别 14,状态 1,第 1 行
不能在具有唯一索引“IX_person_unique”的对象“dbo.person”中插入重复键的行。重复键值为 (<NULL>)。
语句已终止。
ログイン後にコピー

Update

Update は比較的簡単なので、これ以上は言いませんりー


删除

删除person表中一定范围的数据


DELETE FROM  person  WHERE id BETWEEN 14 AND 17

SELECT * FROM person
ログイン後にコピー


如果要删除表的所有记录可以使用下面的两种方法

##方法一
DELETE     FROM person

##方法二
TRUNCATE TABLE  person
ログイン後にコピー

跟SQLSERVER一样,TRUNCATE TABLE会比DELETE FROM TABLE 快

MYISAM引擎下的测试结果,30行记录


跟SQLSERVER一样,执行完TRUNCATE TABLE后,自增字段重新从一开始。

################################
INSERT IGNORE INTO person(id,NAME,age,info)
SELECT id,NAME,age,info FROM person_old;

SELECT * FROM person

TRUNCATE TABLE  person


INSERT IGNORE INTO person(NAME,age,info) VALUES (&#39;amy&#39;,12,&#39;bb&#39;)

SELECT * FROM person
ログイン後にコピー


当你刚刚truncate了表之后执行下面语句就会看到重新从一开始

SHOW TABLE STATUS LIKE &#39;person&#39;
ログイン後にコピー


以上がMySQL の最適化 - 追加、削除、変更の具体的な分析 (図)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

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

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

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

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

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

Apacheのデータベースに接続する方法 Apacheのデータベースに接続する方法 Apr 13, 2025 pm 01:03 PM

Apacheはデータベースに接続するには、次の手順が必要です。データベースドライバーをインストールします。 web.xmlファイルを構成して、接続プールを作成します。 JDBCデータソースを作成し、接続設定を指定します。 JDBC APIを使用して、接続の取得、ステートメントの作成、バインディングパラメーター、クエリまたは更新の実行、結果の処理など、Javaコードのデータベースにアクセスします。

DockerによるMySQLを開始する方法 DockerによるMySQLを開始する方法 Apr 15, 2025 pm 12:09 PM

DockerでMySQLを起動するプロセスは、次の手順で構成されています。MySQLイメージをプルしてコンテナを作成および起動し、ルートユーザーパスワードを設定し、ポート検証接続をマップしてデータベースを作成し、ユーザーはすべての権限をデータベースに付与します。

MySQLの役割:Webアプリケーションのデータベース MySQLの役割:Webアプリケーションのデータベース Apr 17, 2025 am 12:23 AM

WebアプリケーションにおけるMySQLの主な役割は、データを保存および管理することです。 1.MYSQLは、ユーザー情報、製品カタログ、トランザクションレコード、その他のデータを効率的に処理します。 2。SQLクエリを介して、開発者はデータベースから情報を抽出して動的なコンテンツを生成できます。 3.MYSQLは、クライアントサーバーモデルに基づいて機能し、許容可能なクエリ速度を確保します。

Laravelは紹介例 Laravelは紹介例 Apr 18, 2025 pm 12:45 PM

Laravelは、Webアプリケーションを簡単に構築するためのPHPフレームワークです。次のような強力な機能を提供します。インストール:Laravel CLIを作曲家にグローバルにインストールし、プロジェクトディレクトリにアプリケーションを作成します。ルーティング:ルート/web.phpのURLとハンドラーの関係を定義します。ビュー:リソース/ビューでビューを作成して、アプリケーションのインターフェイスをレンダリングします。データベース統合:MySQLなどのデータベースとのすぐ外側の統合を提供し、移行を使用してテーブルを作成および変更します。モデルとコントローラー:モデルはデータベースエンティティを表し、コントローラーはHTTP要求を処理します。

MySQLをCentos7にインストールする方法 MySQLをCentos7にインストールする方法 Apr 14, 2025 pm 08:30 PM

MySQLをエレガントにインストールするための鍵は、公式のMySQLリポジトリを追加することです。特定の手順は次のとおりです。MYSQLの公式GPGキーをダウンロードして、フィッシング攻撃を防ぎます。 mysqlリポジトリファイルを追加:rpm -uvh https://dev.mysql.com/get/mysql80-community-rease-el7-3.noarch.rpm update yumリポジトリキャッシュ:yumアップデートインストールmysql:yumインストールmysql-server startup mysql sportin

See all articles