会社では SQLSERVER と MYSQL を使用しており、サーバーとデータベースの数が比較的多いため
MYSQL の学習期間中、SQLSERVER と比較していました
この期間は主に MYSQL 基本構文の学習です
構文の違い
1. デフォルトの制約
違い: mysql の DEFAULT キーワードの後に括弧を追加する必要はありません
MYSQL には自動インクリメント列が必要です。インデックス列の場合、シード値をテーブルの最後に設定する必要があります
自動インクリメント列のステップ サイズを設定します。グローバル レベルとグローバル レベルに分割できます。セッションレベル
セッションレベルの場合、ユーザーが新しいセッションを作成すると、ステップサイズはグローバルレベルに戻るため、mysqlのステップサイズはsqlserverのステップサイズとは大きく異なります
mysqlは設定できませんテーブルレベルのステップサイズに! !
mysql サーバーは、グローバル変数とセッション変数の 2 種類の mysql システム パラメータ (システム変数) を維持します。
それらの意味と違いはそれぞれの名前に示されているとおりです。セッション変数への変更はこのセッションにのみ影響します。グローバル変数への変更はすべての新しいセッションに影響します。セッションは、次回 mysql サーバーが再起動されるまで保持されます (変更が行われても、既存のセッションは影響を受けません)。
その変更の影響は再起動にまたがることはできないことに注意してください。mysql サーバーの再起動時に新しい値を使用したい場合は、コマンドラインで変数オプションを指定するか、オプション ファイルを変更することによってのみ指定できます。 SET ではこれを実現できません。
すべてのシステム変数にはデフォルト値があり、mysql システムのコンパイル時に決定されます。
システム変数を指定するには、通常、サーバーの起動時にコマンドラインで、またはオプションファイルを通じてオプションを指定できます。
もちろん、ほとんどのシステム変数は、システムの実行中に set コマンドを通じて値を指定できます。 。
システムの現在のデフォルトの自動インクリメント列のシード値とステップ値を確認してください
質問: フィールド ID を持つ自動インクリメント主キーを持つテーブルがある場合、10 個のデータがテーブルに挿入された後、 table で、ID 8、9、10 のデータを削除し、mysql を再起動して、データを挿入します。このデータの ID 値は 8 ですか? 11 ですか?
これは、2 種類のストレージ エンジンが異なる方法で最大 ID レコードを保存するためで、MyISAM テーブルは最大 ID をデータ ファイルに記録し、自動インクリメントされた主キーの最大 ID 値は失われません。 mysql を再起動します
そして、InnoDB は最大 ID 値をメモリに記録するため、mysql を再起動するか、テーブルに対して OPTIMIZE 操作を実行すると、最大 ID 値が失われます。
ところで、MYSQL には現在のテーブルの自動インクリメント値を取得する 4 つの方法があります
1. 特定のテーブルの SELECT MAX(id) FROM person
2. 任意のテーブルの SELECT LAST_INSERT_ID() 関数
3. SELECT @@identity 任意のテーブルの場合、
@@identity は、データが最後に ID 属性を持つテーブルに挿入されたときの、対応する自動インクリメント列の値を表します (つまり、自動インクリメント列)。これはシステム定義です。グローバル変数。
通常、システム定義のグローバル変数は @@ で始まり、ユーザー定義変数は @ で始まります。
@@identity を使用するための前提条件は、挿入操作を実行した後、select @@identity を実行するときに接続が閉じられていないことです。そうでない場合、結果は NULL 値になります。
4. SHOW TABLE STATUS LIKE 'person'
特定のテーブルをターゲットにしている場合は、このメソッドを使用することをお勧めします
結果には、対応するテーブル名レコードに Auto_increment フィールドがあり、値が含まれています次の自動インクリメント ID です。
3. テーブル定義を確認します
MYSQL
4.
テーブル名の変更にも違いがあります。 テーブル emp を emp2 に変更します
5. フィールドのデータ型を変更します
id フィールドの int 型を bigint に変更します
6フィールド名を変更します
MYSQL でフィールド名を変更する場合は、フィールドのデータ型を追加する必要があります。追加しないとエラーが報告されます。また、CHANGE は MODIFY と同じ効果を達成するためにデータ型を変更することしかできません
。 SQL文の「新しいフィールド名」と「古いフィールド名」を同じ名前に設定し、「データ型」だけを変更することです
データ型を変更します。たとえば、先ほどの例で言えば、 id 列を bigint データ型に変更します
フィールド名を変更します
7. フィールドを追加します
フィールドを追加する構文は似ていますが、MYSQL の FIRST キーワードと AFTER キーワードを使用して指定できます。追加されたフィールドの場所
8. フィールドを削除する
MYSQL ではフィールドを削除するために COLUMN キーワードを追加する必要はありません
9. 外部キー制約を削除する
MYSQL と MYSQL では制約を削除する方法にも大きな違いがあります。 SQLSERVER
SQLSERVER では、一意制約、チェック制約、外部キー制約のいずれであっても、次の SQL ステートメントを使用して削除できます
しかし、MYSQL では、それが外部キー制約の場合、 DROP FOREIGN KEYを使用する必要があります。主キー制約の場合は、DROP PRIMARY KEYを使用する必要があります。少し面倒です
10. テーブルを削除します
テーブルを削除するための構文は同じです
しかし、複数のテーブルを同時に削除したい場合、または削除する前に判断する必要がある場合は、MYSQL の方がはるかに便利です
SQLSERVER は一度に 1 つのテーブルを判断し、その後 1 つのテーブルを削除する必要があります時々
MYSQLは異なります。構文は非常に簡潔です: DROP TABLE IF EXISTS emp1, emp2
概要
この記事では、MYSQL と SQLSERVER の構文の違いを簡単に紹介するだけです
MYSQL の違いについてはさらに記事を書きます今後の SQLERVER の紹介や、この時期の MYSQL の使用体験なども書いていきますので、どうぞお楽しみにo(∩ _∩)o
何か間違った点がございましたら、お気軽にコメントくださいo(∩_∩)o
2014-7-16 に追加
innodb エンジンまたは MYISAM エンジンに関係なく、存在できるのは自動インクリメント列のみであり、自動インクリメント列はセカンダリ インデックスであるかどうかに関係なく、インデックス列である必要があります。これは SQLSERVER とは異なります。SQLSERVER ではテーブルに複数の自動インクリメント列を含めることができ、
にインデックスを作成する必要はありません。シリーズ 1: 簡単な構文 関連コンテンツの詳細については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。