ALTER TABLEコマンドを作成します。 MySQLリファレンスガイド。 SQLでのALTERコマンドのサンプル

最終更新日:2017/07/07

おそらくある時点で、既存のテーブルを変更します。 たとえば、列を追加または削除するには、列の種類を変更したり、制限を追加または削除したりします。 つまり、テーブルの定義を変更する必要があります。 テーブルの変更はテーブルを変更するために使用されます。

コマンドの一般的な形式構文は次のとおりです。

ALTER TABLE_STOLBETS_NAME | alter列name_stolbet type_data_stolbets | defination_nate | dispration_nate | dispration_nate | defination_nate | defination_nate | defination_nateを追加します

したがって、ALTER TABLEでは、テーブルを変更するための最も異なるシナリオを回すことができます。 それらのいくつかを考慮してください。

新しい列を追加する

テーブルの顧客に新しい列アドレスを追加します。

ALTER TABLE CUSTEMERSアドレスNVARCHAR(50)NULLを追加します。

この場合、アドレス列にはNVARCHAR型があり、NULL属性が定義されています。 しかし、NULL値を作成しないでください列を追加する必要がある場合はどうなりますか? テーブルにデータがある場合は、次のコマンドが実行されません。

ALTER TABLE CUSTEMERSアドレスNVARCHAR(50)NOT NULLを追加します。

したがって、この場合、解決策はデフォルトの属性を介してデフォルト値をインストールすることです。

ALTER TABLE CUSTEMERSアドレスを追加するNVARCHAR(50)NOT NULLのデフォルト「不明」;

この場合、テーブルにデータがすでにデータを持っている場合は、アドレス列の場合は「不明」に追加されます。

列の除去

Customersテーブルからアドレス列を削除します。

ALTER TABLEのお客様は列アドレスを削除します。

列の種類を変更する

NVARCHAR(200)のFirstName列のCustomersテーブルデータ型の変更:

ALTER TABLE CUSTOMERS ALTER列FIRSTNAME NVARCHAR(200)。

チェックの制限を追加します

制限を追加するとき、SQL Serverは制限事項に準拠するために利用可能なデータを自動的にチェックします。 データが制限に対応していない場合、そのような制限は追加されません。 たとえば、Customersテーブルの[年齢]列に対して[年齢]\u003e 21の制限をインストールします。

ALTER TABLEのお客様チェック(AGE\u003e 21)を追加します。

AGE列にこの制限に不適切な値があるテーブルに行がある場合、SQLコマンドはエラーで終了します。 そのようなコンプライアンスチェックを回避し、それでも制限を追加するには、データが不適切なデータの存在にもかかわらず、表現はNOCHECKによって使用されます。

NOCHECKを使用してテーブルのお客様を変更してください(AGE\u003e 21)。

デフォルトでは、チェック付きの値が制限事項に準拠するためにチェックします。

外部キーを追加する

データベース内のデータベースに2つのテーブルを追加し、接続されていません。

テーブルの顧客の作成(ID INTの主キーID、ANY INTデフォルトのID 18、FIRSTNAME NVARCHAR(20)NOT NULL、LASTNAME NVARCHAR(20)NOT NULL、電子メールVARCHAR(30)固有、Phone VARCHAR(20)ユニーク)。 テーブル順序を作成する(ID ID、CUSTERSID INT、CEDUCTEDAT日付)。

CustomerIDカスタマ列列に外部キーの制限を追加します。

ALTER TABLE ORDERS ADD FORIALキー(CustomerID)参照顧客(ID)。

主キーを追加する

上記の順序表を使用して、列IDの主キーを追加します。

ALTER TABLE ORDERS PRIMARY KEY(ID)を追加します。

名前を付けて設定を追加します

制限を追加するときは、制限名が示された後に、それらの名前を制約文を指定することができます。

ALTER TABLE ORDERS ADD制約PK_ORDERS_IDプライマリキー(ID)、制約FK_ORDERS_TO_CUSTOMERES FORIALEキー(CustomerID)参照顧客(ID)。 ALTER TABLE CHUSTERS CONSTRAINC CK_AGE_GREATER_THAN_ZEROチェック(AGE\u003e 0)を追加します。

制限の除去

制限を削除するには、名前を知る必要があります。 制限の名前が確実にわからない場合は、SQL Server Management Studioを通じて見つけることができます。

キーの表を見渡すKeys Journalでは、プライマリキーと外部キーの制限の名前を確認できます。 外部キーの制限の名前は「FK」で始まります。 そして制約では、Pierceのチェックとデフォルトのすべての制限を見つけることができます。 制限名を確認し、「CK」で始まり、デフォルトの制限 - 「DF」が付いています。

たとえば、スクリーンショットでわかるように、Ordersテーブル内の外部キーの制限の名前は "fk_orders_to_customers"と呼ばれます。 したがって、外部キーを削除するには、次の式を使用できます。

ALTER TABLE ORDERSER FK_ODERS_TO_CUSTOMERSを削除します。

あなたのプロジェクトでは、そのサイズがギガバイトによって計算され、そのようなテーブルの構造を変更するためには、いくつかのサービスを停止する必要があります - この記事はあなたのためのものです。

与えられる: いくつかの1ダースギガバイトのデータのテーブル。 タスクはテーブルの構造を変更することです。

すぐに正面で実行されると、メソッドはトランザクションテーブルでのみ機能します。 あなたが数十ギガバイトのためのMyisamテーブルを持っているなら、そのanecdoteのように、 "あなたの問題であなた自身に対処する" この例はInnoDBテーブルに与えられます。

テーブルの構造がこれであるとします。

テーブルの作成 `user``(id` int(11)NOT NULL auto_increment、` email` varchar(40)NOT NULLのデフォルト ""、 `password_hash` char(32)NOT NULLのデフォルト" "、` registrat_date` int(11) NULLのデフォルト "0"、主キー(ID`))Engine \u003d InnoDBデフォルトCharset \u003d UTF8
このテーブルにlast_loginフィールドを追加します。

私たちが持っているオプション

正面から

ALTER TABLE`ユーザー `ADD列` last_login` int(11)nullのデフォルト0;
このオプションは、テーブルのサイズが50,000のエントリを超えていない小さなプロジェクトで完全に心配します。 オプションには合いません。 ALTERは長く実行されますが、この時間はすべて、テーブルが記録と読み取りの両方でブロックされます。 したがって、この時点でサービスを停止する必要があります。

脳をオンにする

それが行ったら、一般的にテーブルにタッチすることができ、別の `users_lastvisits`を作成することができます。
テーブル `users_lastvisits`(` user_id` int(11)NOT NULL、 `last_login` int(11)NOT NULLのデフォルト" 0 "、主キー(` user_id`))Engine \u003d InnoDBのデフォルトCharset \u003d UTF8;
これで、last_loginテーブルと結合するためにlast_loginが必要なすべてのリクエストでできます。 もちろん、遅く、クエリに参加しても、時間がかかりすぎ、一般的には十分に起こり、この時点で停止することがあります。

それでも - あなたはフィールドを追加する必要があります

マスタースレーブレプリケーションを起動し、スレーブサーバーを変更してから場所でそれらを変更することができます。 正直に言うと、私はそのようにうまくいきませんでした、多分それは次のように簡単ですが、レプリケーションを上げることは必ずしも可能ではありません。

私の道は以下のとおりです

新しいテーブルを最後の構造体で作成し、最初のテーブルでトリガーを作成します。これにより、最初のテーブルから2番目のテーブルへのデータの転送が開始され、終わりが変更された "データとテーブルの名前を変更します。

そのため、2つのテーブルを用意します - 最初に希望の構造を持つ、2番目の構造は変更されます。
テーブルの作成 `_users`(id` int(11)NOT NULL auto_increment、` email` varchar(40)NOT NULLのデフォルト ""、 `password_hash` char(32)nullデフォルト" "、` registry_date` int(11) nullのデフォルト "0"、 `lastvisit` int(11)not nullデフォルト0、主キー(` ID`))Engine \u003d InnoDBデフォルトCharset \u003d UTF8; テーブルの作成 `user_updated_rows`(id` int(11)NOT NULL AUTO_INCREMENT、` row_id` int(11)NOT NULLデフォルト "0"、 `Action` enum(" updated "、" deleted ")nullデフォルト" updated "主キー( `ID`))Engine \u003d InnoDBデフォルトCharset \u003d UTF8;
トリガーを入れます:
区切り文字; Trigger Users_After_Deleteの作成各行のユーザーの削除後、users_updated_rowsの値(0、old.id、 "削除された")に挿入を開始します。 終わり ;; Trigger Users_After_Insertごとにユーザーを挿入した後、各行のユーザーに挿入後、users_updated_rows値(0、new.id、 "更新"); 終わり ;; トリガーUSERS_AFTER_UPDATE各行のユーザーのアップデート後に(Old.ID!\u003d New.ID)次にUSERS_UPDATED_ROWS値(0、OLD.ID、「削除済み」)に挿入します。 if; users_updated_rowsの値に挿入(0、new.id、「更新」)。 終わり ;; デリミタ;
今すぐオーバーフローを開始します。 これを行うには、データベースと2つの化合物を開く必要があります。 オーバーフローが促進されます。もう一方の場合、エントリのテーブルをブロックする必要があります。
MySQL\u003e Lock Tablesユーザーの書き込み; Query OK、終了した0行(0.00秒)MySQL\u003e - トリガーはすでにMySQL\u003e Truncate users_updated_rowsをインストールする必要があります。 Query OK、0行の影響を受けました(0.17秒)MySQL\u003e - 別のコンソールで、MySQL\u003e Insert Insert Insect in Insert ID、電子メール、password_hash、register_date、reportion_date、0から0。 MySQL\u003e - 最初のコンソールMySQL\u003eのロック解除テーブルでもう一度。
すべて、テーブルがあふれている間、私たちは瞬間から変更されたデータを注ぐ方法について考える時間があります。 ここでは、一般的には難しくないことはありません - 私はスクリプトを持ってくることはできません、あなたはそれらが追加された順序(主キーで並べ替え)してそれを更新または削除する順序でusers_updated_rowsテーブルから1つのエントリを取る必要があります。 _usersテーブル。

したがって、テーブルの断熱はすでに終了しているので、他のデータを注ぐ必要があります。 スクリプトを実行してください。 スクリプトは常に機能し、テーブルの名前を変更するために必要なすべてのデータを壊したときにログに追加されたすべてのレコードを更新する必要があります。
MySQL\u003e truncate users_updated_rows; Query OK、0行の影響を受ける(0.16秒)MySQL\u003eテーブルユーザーの名前を__usersに名前を変更します。 クエリOK、0行の影響を受けた(0.11秒)
その瞬間には、データの小さな損失が可能であることが注目に値します。 要求は原子的にはありません。 それが重要な場合は、変更の要求がないとしばらくの間サービスをオフにすることがお勧めします。 ユーザーからの書き込み権限と異なるユーザーの下のコマンドを実行する権限を取得できます。

あなたが正しくすべてをするならば、データは失われず、サービス内での休憩はほとんどありません。 必要なもの 同じように、データを別のサーバーに渡すことができ、トランスザイズの方法のみが変更されます。 代わりに
MySQL\u003e _USERSに挿入ID、Eメール、PASSWOND_HASH、RESOGRATION_DATE、ユーザーからの0を選択します。
MySQLDUMPを注ぐ必要があります。
$ mysqldump -h host1 dbユーザー - シングルトランザクション-ECQQ | PV | mysql -h host2。
このようにして、12時間のどこかで60GBと4,000万ラインのサイズでサービスの操作を停止することなく、サービスの操作を停止することなく停止しました。

ちなみに、自転車はすでにFacebookによって発明されており、呼ばれています

テーブルの変更テーブルの定義を変更します

構文

ALTER TABLE [存在する場合] [のみ] 名前 [ * ] 行為 [、...] ALTER TABLE [存在する場合] [のみ] 名前 [*] [列]の名前変更 ナマストルビツァ に。 new_imia_stolbtsy ALTER TABLE [存在する場合] [のみ] 名前 [*]制約の名前を変更します プログラム名 に。 name_name. ALTER TABLE [存在する場合] 名前 の名前を変更します。 新しい名前 ALTER TABLE [存在する場合] 名前 スキーマを設定します。 new_shem ALTER TABLE TABLESPACEのすべて 名前 [が所有している。 ロリーネーム [、...]]表スペースを設定します new_table_space. [NOWAIT] どこ 行為 次のようになる可能性があります。 追加[列] [存在しない場合] ナマストルビツァ type_data. [照合する rule_sion. ] [ restriction_stolbets. [...]]]ドロップ[列] [存在する場合] ナマストルビツァ [制限| カスケード】ALTER [列] ナマストルビツァ [データの設定]タイプ type_data. [照合する rule_sion. ] [使用) 発現 ] ALTER [列] ナマストルビツァ デフォルトを設定してください。 発現 ALTER [列] ナマストルビツァ デフォルトのDROP ALTER [列] ナマストルビツァ (SET | DROP)NOT NULL ALTER [列] ナマストルビツァ 統計を設定します 整数 ALTER [列] ナマストルビツァ セットする ( 属性 = [、...])ALTER [列] ナマストルビツァ リセット( 属性 [、...])ALTER [列] ナマストルビツァ 収納セット(平面|外部|拡張|メイン)追加する restlict_table. [無効ではありません] 制約を変更します。 プログラム名 [遅延可能な] 【初期遅延| .. 最初に即時の識別を検証します プログラム名 ドロップ制約[存在する場合] プログラム名 [制限| カスケード】トリガを無効にする name_trigger | .. すべて| ユーザー]トリガを有効にする[ name_trigger | .. すべて| ユーザー]レプリカトリガを有効にします name_trigger 常にトリガーを有効にします。 name_trigger ルールを無効にします。 name_porivila_peep. イネーブルルール。 name_porivila_peep. レプリカルールを有効にします。 name_porivila_peep. 常にルールを有効にします。 name_porivila_peep. Row Level Securityを無効にする行レベルのセキュリティの行レベルのセキュリティ無効な行レベルのセキュリティクラスタ name_index OIDSセットのないOIDSセットを付けるSET TABLESPACEを設定する new_table_space. セット(ログオンされた)セット Parameter_sheファクトリ = [、...])リセット( Parameter_sheファクトリ [、...])継承されています table_rodel. 継承いいえ。 table_rodel. の。 名前 所有者ではありません( new_vladeller. | .. current_user | session_user)レプリカID(デフォルト|インデックスを使用して name_index | .. フル 何もない) そして restriction_table_p_index: [制約。 プログラム名 ]インデックスを使用した(一次キー) name_index [遅延可能な] 【初期遅延| .. 最初は即時です

description

ALTER TABLE既存のテーブルの定義を変更します。 いくつかの品種を以下に説明する。 さまざまな品種には異なるレベルのロックが必要になることがあります。 他に述べた場合、アクセスは排他的に必要です。 複数のサブコメーションをリストすると、それらによって必要から最も強いロックが要求されます。

列を追加する[存在しない場合]

このフォームはテーブルに新しい列を追加し、同じ構文と同じ構文を作成します。 存在しない場合は、そのような名前を持つ列がすでに存在している場合は、エラーはありません。 ドロップカラム[存在する場合]

このフォームはテーブルから列を削除します。 これにより、この列に関連付けられているテーブルのインデックスと制限が自動的に削除されます。 このテーブルの外側のオブジェクトがこの列に依存している場合は、[外部キー]または[削除]、[削除]、[Cascade]を追加できます。 コマンドが存在するかどうかを示す場合、この列が存在しない場合は、その代わりにコメントを発行するとエラーとは見なされません。 データ型を設定します

このフォームはテーブルの列の種類を変更します。 この列を含むインデックスと単純な表形式の制限は、新しい列タイプを使用するように自動的に変換されます。これは、それらの式を再び定義します。 オプションのCollat\u200b\u200beオファー新しい列のソート規則を設定します。 省略した場合、デフォルトのソート規則は新しい型に選択されます。 オプションのプロポーザルは、列の新しい値が古いからどのように取得されるかを決定します。 欠落している場合は、古いタイプ新規の値の通常の割り当てとしてデフォルトのタイプが実行されます。 新しいタイプの導入を使用した暗黙の態度や割り当てが定義されていない場合は、使用した提案が必須になります。 デフォルト設定/削除

これらのフォームは、列のデフォルトで指定または削除されます。 デフォルト値は、後続の挿入コマンドまたは更新コマンドに対してのみ適用されます。 それらの変更は、表に既存の行には反映されません。 セット/ドロップNULLを設定します

これらのフォームは、列がNULL値を取りますか否かを判断します。 列にNULL値が含まれていない場合にのみ、set not nullを指定できます。 統計を設定します

このフォームは、後続の分析操作の列統計収集ランドマークを設定します。 許容基準値の範囲:0..5000; -1では、デフォルトのシステム値が適用されます(default_statistics_target)。 Statistics Postgres Proクエリスケジューラの使用方法の詳細については、14.2項を参照してください。

Set Statisticsリクエストを共有アップデート排他ロックを共有します。 セットする ( 属性 = [, ... ])
リセット( 属性 [, ... ])

このフォームは属性パラメータを設定またはリセットします。 現在、属性の唯一のパラメータはn_distinctとn_distinct_inheritedです。これは数量_namesの数の推定値をオーバーライドします。これにより、後続の分析操作が行われます。 n_distinct属性は、テーブル自体に沿った統計の計算に影響し、N_Distince_inheritedはテーブルの統計とその子孫にあります。 指定された値が正の場合、Analyzeは列にこの数のさまざまな値がNULLでないことを含むと仮定します。 指定された値が負の場合(-1以上でなければなりません)、Analyzeは、列内の異なる値の数がNULLになっていなかったと仮定します。 正確な数は、テーブルのおおよそのサイズにパラメータの絶対値に乗算することによって得られます。 たとえば、-1では、列内のすべての値は異なり、-0.5で、平均して、各値が2回繰り返されます。 テーブル内の行数への乗算はクエリ計画中にのみ行われるため、テーブルのサイズが時間とともに変化すると便利です。 C 0異なる値の数は通常どおり推定されています。 Statistics Postgres Proクエリスケジューラの使用方法の詳細については、14.2項を参照してください。

共有アップデート排他ロックは、属性パラメータを変更するように要求されます。 ストレージを設定します

このフォームは列記憶モードを設定します。 データがテーブル内または別のトーストテーブル内に格納されているかどうか、およびそれらが圧縮されているかどうかを定義します。 プレーンモードは、整数などの固定長の値に使用する必要があります。 これは圧縮なしで、内部のストレージオプションです。 メインモードは、内部のストレージに使用されますが、圧縮データの外部 - 圧縮データの外部ストレージには、圧縮データの外部ストレージに拡張されます。 ストレージをサポートするほとんどのデータ型では、デフォルトで拡張が使用されます。 外部の使用は、リポジトリのボリュームの損失のため、非常に大きなテキストとバイテの値で部分文字列を使用して操作をスピードアップすることができます。 セットストレージ提案自体がテーブル内のものを変更しないことに注意してください。これは、テーブルの将来の変更で実装される戦略のみを要求します。 詳しくは、62.2項を参照してください。 追加。 restlict_table. [有効ではありません]

このフォームは、テーブルに新しい制限を追加し、CREATE TABLEと同じ構文、および無効な追加の表示を追加します。これは現在外部キーの制限を制限することができます。 制限が無効としてマークされている場合は、すべての行が満足する潜在的に長期的な初期チェックがスキップされます。 それにもかかわらず、この制限は後続の追加またはデータの変更で有効になります(つまり、新しい行がスキャン制限条件に違反した場合、または外部キーの存在でこれらの操作は実行されません。には、これらの操作は実行されません。メインテーブル)。 しかし、データベースは、検証制約命令を使用してチェックされるまで、テーブルのすべての行に対して制限が実行されるとは限りません。 追加。 restriction_table_p_index

このフォームは、既存の一意のインデックスに基づいて、テーブルに新しい主キーまたは固有の制限を追加します。 この制限はこのインデックスのすべての列を含みます。

インデックスは部分的には列式を含めることはできません。 さらに、デフォルトのソート順を持つIndex-Bツリーであるべきです。 このような制限付きでは、追加されたインデックスは、追加のプライマリキーの通常のチームによって作成されたインデックスとは異なり、一意を追加しません。

主キーの場合、索引列がNOT NULLではなくラベル付けされていない場合、このコマンドは各列に対してNOT NOT NULLを実行しようとします。 これにより、列にNULLが含まれていないことを確認するために、テーブルのフルスキャンが必要になります。 他のすべての場合において、これは高速操作です。

制限名が指定されている場合、索引は名前変更され、指定された名前を受け取ります。 それ以外の場合、インデックスの名前は制限名になります。

このコマンドを実行した後、インデックスが次になります "所属する" 通常のチームによって作成されたかのように、正規キーを追加するか、または一意の追加を追加します。 これは、特に制限を取り除くとき、インデックスがそれを取り除くことを意味する。

注意

既存のインデックスに基づいて制限を追加すると、テーブル内の変更が長時間ブロックすることなく追加が必要な状況で役立ちます。 これを行うには、Create Index Concuring Command Indexを作成してから、このエントリを使用して全制限として使用できます。 次の例を参照してください。

制約を変更します。

このフォームは、以前に作成された制限の属性を変更します。 現在、外部キーの制限のみを変更できます。 制約を検証します。

このフォームは、無効になっていない外部キー制限またはテスト制限をチェックし、テーブル全体をスキャンしてすべての行が制限を満たすようにします。 制限がすでに真のマークされている場合は、何も起こりません。

大きなテーブルをチェックすることはかなり長くなる可能性があります。 実際の制限からの検証の分離の意味は、それが活動の少ない間のチェックを延期すること、または既存のエラーとの追加の作業を実行することを可能にし、同時に新しいものを防ぐことを可能にすることです。 なお、検証自体の実装中は、表中の通常の記録コマンドの実行を妨げないことに注意してください。

チェックするときは、共有アップデート排他ターゲットテーブルのブロックのみが要求されます。 外部キー制約の場合、制限が参照するテーブルでも行共有が必要です。 ドロップ制約[存在する場合]

このフォームは指定された表制限を削除します。 存在するIFが指定されていて、指定された制限が存在しない場合、これはエラーとは見なされません。 この場合、発言のみが発行されます。 [レプリカ|を無効/有効にします 常にトリガー

これらのフォームは、テーブルに属するトリガ応答を設定します。 無効なトリガーはシステムに保存されますが、イベントが発生している場合は実行されません。 遅延トリガーの場合、イベントが発生したときに包含状態がチェックされ、トリガ機能が実際に呼び出されたときにはチェックされます。 このコマンドは、テーブルの1つのトリガー、またはテーブルのすべてのトリガー、またはカスタムトリガーのみを無効にするか、またはカスタムトリガー(例えば、外部キーの制限または繰延された一意または例外制限を実装するトリガーを排除する)を無効にすることができます。 生成されたINSTRIPALSTRIPERGERSをオフにするか、または発生するためには、スーパーユーザー権限が必要です。 トリガーが機能しない場合、制限の整合性を保証することは不可能であることが明らかであるので、注意を払ってオフにする必要があります。 トリガ応答メカニズムはsession_replication_role構成変数にも影響します。 追加の命令なしで含まれていないクレストの役割がある場合にトリガーが機能します。 原産地» (デフォルト)または「」 地元 "。 Enable Replicaに含まれているトリガーは、現在のセッションモードがある場合にのみ発生します。 レプリカ»そして、現在のレプリケーションモードに関係なく、常にイネーブルを指定した後。

このコマンドは、共有行排他ロックを要求します。 [レプリカ|を無効/有効にします 常にルール

これらのフォームは、表に関連する書き換え規則の応答を設定します。 切断されたルールはシステムに格納されていますが、要求の書き換え中には適用されません。 本質的に、これらの操作はトリガの操作と似ています。 ただし、これはOn Select Rulesには適用されません - 複製の主な役割を果たさないセッションでも、パフォーマンスが機能し続けることを常に適用されます。 行レベルのセキュリティを無効/有効にします

これらのフォームは、表に関連する行保護ポリシーのアプリケーションを制御します。 防御がオンになっていますが、テーブルのポリシーが定義されていない場合は、デフォルトのアクセスポリシーが適用されます。 保護レベルが無効になっていても、表に政治家を定義できます。この場合、ポリシーが適用されず、それらの制限は無視されます。 ポリシーの作成も参照してください。 無理/力の行レベルのセキュリティはありません

これらのフォームは、ユーザーがその所有者の場合、テーブルに関連する行保護ポリシーの適用を制御します。 この動作がオンになっていると、行の防御ポリシーはテーブルの所有者に行動します。 無効になっている場合(デフォルト)、文字列保護保護はテーブルの所有者であるユーザーには無効になりません。 ポリシーの作成も参照してください。 クラスタのオン。

このフォームは、後続のクラスタ操作のデフォルトインデックスを選択します。 テーブルの実際のクラスタ化は実行されません。

共有アップデート排他的なクラスタ化パラメータを変更するように要求されます。 クラスタなしで設定します。

このフォームはクラスタの最後に指定されたインデックス指定を削除します。 そのアクションは、インデックスが指定されない将来のクラスタリング操作に影響します。

共有アップデート排他的なクラスタ化パラメータを変更するように要求されます。 OIDSで設定してください。

このフォームは、OIDシステム列をテーブルに追加します(5.4項を参照)。 テーブルにすでにそのような列がある場合は、何もしません。

これはAdd Column OID OIDコマンドと同等ではありません(このコマンドはシステム分類を追加しますが、適切な名前のOIDを含む通常の列)。 OIDなしで設定します。

このフォームはテーブルからOIDシステム列を削除します。 OID列がない場合はエラーがないことを除いて、これは列OID制限を削除するのと同じです。 表領域を設定します。

このフォームはテーブルの表領域を指定に変更し、テーブルに関連付けられているデータファイルを新しいスペースに移動します。 利用可能な場合は、テーブルインデックスが移動しないでください。 ただし、それらは追加のコマンドSET TABLESPACEによって別々に移動できます。 All In Tablespaceを使用すると、すべてのテーブルスペースを別の表スペースに転送しますが、最初にすべてのテーブルをブロックしてから、それぞれを転送します。 このフォームは、指定された所有者のテーブルのみが移動される所有者の指示もサポートします。 nowaitパラメータが指定されている場合、必要なロックをすべて直ちに取得できない場合、コマンドはエラーを終了します。 このフォームが動かないシステムディレクトリに注意してください。 移動する必要がある場合は、ALTER DATABASEまたはExplicit Call Alter Tableを使用する必要があります。 Information_schemaの関係は、システム取締役の一部とは見なされず、避難所に対象となります。 表領域の作成も参照してください。 セット(ログ化されていません)

このフォームはテーブルロギング特性を変更し、テーブルジャーナリング/非反射を行います(無効にしてください)。 一時テーブルには適用されません。 セットする ( Parameter_sheファクトリ = [, ... ])

このフォームは1つ以上のテーブルストレージパラメータを変更します。 より許容パラメータは、ストレージパラメータに記述されています。 このコマンドはテーブルの内容を直ちに変更しません。 パラメータによっては、目的の効果を得るためにテーブルを上書きする必要があるかもしれません。 これは、テーブルを強制的に上書きする真空のフル、クラスタコマンド、またはALTER表の形式の1つを使用して行うことができます。

充填係数のパラメータとオートクリーニングのパラメータを変更するには、共有アップデートの排他ロックが要求されます。

注意

CREATE TABLEを使用すると、SYNTAXでOIDを使用することができます( Parameter_sheファクトリ)、ALTER TABLEはStorageパラメータとしてOIDを認識しません。 したがって、OIDの特性を変更するには、SETをOIDで使用し、withot oidsフォームを設定します。

リセット( Parameter_sheファクトリ [, ... ])

このフォームは、1つ以上のストレージパラメータをデフォルト値にリセットします。 セットと同様に、フルテーブルアップデートのテーブルを上書きする必要があるかもしれません。 継承します。 table_rodel.

このフォームは、特定の親テーブルの子孫を持つターゲットテーブルを割り当てます。 続いて、親テーブルへの要求にはレコードとターゲットテーブルが含まれます。 テーブルが子孫になるには、親と同じ列を含める必要があります(追加の列を含めることができます)。 列には同じタイプのデータが必要です。また、それらのうちの一部が親テーブルにNOT NULLの制限を持っている場合は、子孫テーブルにNOT NULLの制限が必要です。

また、表の子孫でも、非外部(つまり、ALTER TABLEによって作成された制約によって作成された... indlet ... indleit no inder)を除いて、親テーブルのすべての制限(つまり、interaint ... inder inderint)によって参加する必要があります。 この場合、子孫テーブルのすべての関連制限は非外部にしないでください。 現在、一意の主キー、外部キーは考慮されませんが、将来的には変更できます。 継承いいえ。 table_rodel.

このフォームは、指定された親テーブルの子孫のリストからターゲットテーブルを削除します。 親テーブルの要求の結果には、ターゲット表から取得したレコードは含まれません。 の。 名前

このフォームは、CREATE TABLEコマンドによって形成されたかのように、テーブルをコンポジット型にバインドします。 同時に、列の名前と種類のリストは、フォームコンポジットタイプとは正確に準拠する必要があります。 OIDシステム列では違いが可能です。 さらに、テーブルは他のテーブルの子孫ではありません。 これらの制限により、CREATE TABLEコマンドが同じ定義を持つテーブルを作成することを確認します。 ではありません。

このフォームは、型付きテーブルのタイプとの接続を分割します。 オーナー

このフォームは、指定されたユーザーのテーブル、シーケンス、表現、マテリアライズドプレゼンテーション、またはサードパーティのテーブルの所有者を変更します。 レプリカのアイデンティティ。

このフォームは、事前識別ログに記録されている情報を変更して、変数または削除行を識別します。 このパラメータは、論理レプリケーションを使用する場合にのみ有効です。 デフォルトモード(デフォルトではないシステムテーブルのデフォルト)では、主キーの列の古い値がその場合は書き込まれます。 使用索引モードでは、指定された索引を構成する列の古い値は、一意でなければならず、部分的ではなく、延期されず、NOT NULLのマークされた列のみを含めます。 フルモードでは、文字列内のすべての列の古い値が記録され、Nothing Mode(システムテーブルのデフォルト)では、古い行に関する情報は記録されません。 すべての場合において、古い値はログに記録され、少なくとも1つの列が記録されるべきものからのものである場合にのみ、新しい行で変更が発生しました。 名前の変更

フォームの名前変更テーブルの名前(またはインデックス、シーケンス、表現、マテリアライズドビューまたはサードパーティのテーブル)、別のテーブル列の名前または表制限の名前を変更します。 格納されているデータには影響しません。 スキーマを設定します。

このフォームはテーブルを別の方式に移動します。 テーブルとともに、関連付けられたインデックスと制限は移動され、テーブルの列に属するシーケンスが移動されます。

名前の変更とSET Schemaを除く1つのテーブルで動作するすべてのタイプのALTER TABLEを複数の変更のリストにまとめて一緒に適用できます。 たとえば、複数の列を追加したり、1つのコマンドで列の種類を変更したりできます。 テーブル全体が1パスで処理されるため、これは大きなテーブルに特に役立ちます。

ALTER TABLEは、対応するテーブルの所有者のみを保持できます。 テーブルの方式または表スペースを変更するには、新しい方式または表形式の空間に右に作成する必要があります。 別のテーブルの子孫を含むテーブルを作成するには、所有者と親の表になる必要があります。 所有者を変更するには、新しい役割の所有者の直接または仲介されたメンバーである必要があり、この役割はテーブルスキーマ内で作成権を持たなければなりません。 (所有者を変更するときには、削除して再作成する権利を持つことが不可能であることは何も起こらず、スーパーユーザーはテーブルの所有者を変更することができます。)列を追加する列の種類を変更するか、必要なデータ型の正しい使用法を持つ列の上に適用します。

パラメーター

変更する既存のテーブルの名前(おそらく補足する)既存のテーブル。 テーブル名が表示されている場合は、指定されたテーブルのみが変更されます。 指定されていない、指定されたテーブルは変更され、そのすべての子孫(もしあれば)。 テーブル名の後、すべての子テーブルが変更の対象となることを明示的に指定するためにオプションの指示*を追加することもできます。 ナマストルビツァ

新規または既存の列の名前。 new_imia_stolbtsy

既存の列の新しい名前。 新しい名前

新しいテーブル名 type_data.

新しい列のデータ型または既存の列の新しいデータ型。 restlict_table.

新しいテーブル制限 プログラム名

新規または既存の制限の名前。 カスケード。

選択した列または制限(この列を含むビュー)に応じてオブジェクトを自動的に削除し、次にすべてのオブジェクトがそれらに依存します(セクション5.13を参照)。 制限します。

オブジェクトがそれらに依存している場合は、列または制限を削除することを拒否します。 これがデフォルトの動作です。 name_trigger

名前はトリガーをオフにします。 すべて。

テーブルに属するすべてのトリガを無効または有効にします。 (これは、発生したinteracepal例外トリガーがこれらのトリガーの中にある場合、外部キーまたは遅延一意性制限および例外など、生成された潜在的な例外トリガが必要です。)ユーザー

例外的なトリガの生成された例外トリガー、たとえば、外部キーの制限を実装したり、一意性と例外に制限を繰り返したりするものを除き、テーブルに属するすべてのトリガを無効または有効にします。 name_index

既存のインデックスの名前。 Parameter_sheファクトリ

テーブルストレージ名

テーブルのStorageパラメータの新しい値。 これは、パラメータに応じて数字または文字列になる可能性があります。 table_rodel.

このテーブルの接続がインストールされているか破れている親テーブル。 new_vladeller.

テーブルの新しい所有者によって指定されたユーザーの名前。 new_table_space.

テーブルが移動する表形式スペースの名前。 new_shem

テーブルが移動する回路の名前。

備考

columnキーワードは意味負荷を負せず、省略することができます。

列が追加列を使用して追加されると、表の既存のすべての文字列で、この列はデフォルト値で初期化されます(または列のデフォルトオファーが欠落している場合はNULL)。 デフォルトオファーが見つからない場合は、メタデータの変更にのみ縮小されます。テーブルへの直接変更は発生しません。 読み取り時にNULL値を追加します。

デフォルトのオファーを持つ列または既存の列の種類の変更には、テーブル全体とそのインデックスが上書きされます。 しかし、既存の列の種類を変更するときに除外することは可能です。使用したプロポーザルが列の内容を変更しない場合、古いタイプが新しいタイプ上の新しい型に有罪とされている場合、または新しいタイプで無制限のドメインである場合、書き換えなしテーブルが必要です。 影響を受ける列を持つすべてのインデックスはまだ再構築する必要がありますが。 OIDシステム列を追加または削除するときは、テーブル全体を上書きする必要があります。 大きなテーブルやそれらのインデックスの再構築は非常に長い手順であり得、それは同時に一時的にディスク容量の2倍を必要とする。

チェックまたはNOT NULLの制約を追加するには、テーブルをスキャンしてすべての既存の行が制限を満たすことを確認するために必要ですが、テーブルを上書きする必要はありません。

一連の変更を1つのALTER TABLEコマンドに組み合わせる機能は、主にこれらの操作によって必要なテーブルのスキャンと上書きを組み合わせることができ、1パスで実行することができます。

ドロップ列の形式は列を物理的に削除しませんが、単にSQL操作には見えません。 この列に追加または変更した後続の操作では、NULL値が記録されます。 したがって、列の削除は迅速に実行されますが、リモートコラムによって占められるスペースが解放されていないため、ディスク上のテーブルのサイズは減少しません。 既存の回線が変わるにつれて、このスペースは時間とともにリリースされます。 (OIDシステム列を削除するときは、テーブルがすぐに実行されるため、この動作は見られません。)

削除された列によって占有されているスペースを強制的に解放するために、テーブル全体を上書きする方法の形式のいずれかを実行できます。 その結果、リモート列にNULLが含まれているように、すべての行が再作成されます。

フォームの上書きALTER TABLEは、MVCCの点で危険です。 上書き後、上書きまで受信したスナップショットを使用して動作する場合、テーブルは並列トランザクションの場合は空になります。 詳しくは、13.5項を参照してください。

セットデータ型の提案を指定する際には、実際に古い行値で式を録音できます。 つまり、変換された列やその他の両方を参照できます。 これにより、SETデータ型で非常に一般的なデータ変換を記録できます。 この柔軟性を考慮して、使用した式はこの列のデフォルト値には適用されません(存在する場合)。 結果は定数式ではなく、デフォルト値に必要です。 つまり、明示的なデバイスがないか古いタイプの割り当てが、使用プロポーザルの使用が適用されているという事実にもかかわらず、設定データ型はデフォルト値変換に対応できません。 このような場合は、DROPデフォルトを使用してデフォルト値を削除し、ALTER TYPEを実行してから、SET DEFAULTを使用して新しいデフォルト値を設定します。 そのような考慮事項は、この列の指標と制限に関して適用可能である。

テーブルに子会社が含まれている場合は、列の種類を追加、名前変更または変更するか、または親テーブルの継承制限の名前を変更することで、すべての子テーブルで同じものを付けずに、不可能です。 つまり、ALTER TABLEのみコマンドは満たされません。 これにより、子テーブルには常に親と同じ列が含まれます。

再帰操作ドロップ列は子テーブルから列を削除します。この列が他の両親から継承されず、子会社では独立して定義されていない場合にのみ、子テーブルから削除されます。 非システムオペレーションドロップ列(すなわち、ALTER TABLE DROP列)は、継承された列を削除しませんが、代わりにそれらを独立して確実にマークします。

アクショントリガー、クラスタ、所有者、および表領域は、子会社に再帰的に配布されません。 つまり、それらは常に示されているように実行されます。 制限の追加操作は、継承なしのラベル付けされていないチェック制限のためだけに再帰的に実行されます。

システムカタログテーブルの変更は許可されていません。

許容パラメータのより詳細な説明については、CREATE TABLEに連絡してください。 さらに、継承は第5章にあります。

TABLEにVARCHAR型列を追加する:

ALTER TABLE配布者列アドレスVARCHAR(30)を追加します。

テーブルから列を削除します。

ALTER TABLE Distributorは、列アドレスのRESTITをドロップします。

1回の操作で既存の2つの列の種類を変更する

ALTER TABLE Distributors Alter Column Address Type VARCHAR(80)、ALTER列名varchar(100);

UNIXのスタイルの時間を含む整数列の変更:オファーを使用したオファーを使用してタイムゾーンタイプのタイムスタンプでの時間を含む。

ALTER TABLE FOO ALTER列FOO_TIMESTAMPデータ型タイムスタンプを使用したタイムゾーンを使用したタイムゾーンを使用したタイム・ゾーンを使用して、「1秒」;

同じことが、列に新しいデータ型に自動的に駆動されないデフォルト値がある場合

ALTER TABLE FOO ALTER列FOO_TIMESTAMP DROPデフォルト、ALTER列FOO_TIMESTAMPタイプタイムゾーン "EPOCH" + FOO_TIMESTAMP *間隔 "1秒"、ALTER COLUMN FOO_TIMESTAMPデフォルト();

既存の列の名前を変更します。

ALTER TABLE Distributors列アドレスの名前を都市に変更します。

既存のテーブルの名前を変更します。

ALTER TABLE Distributisサプライヤーへの名前を変更します。

既存の制限の名前を変更します。

ALTER TABLE Distributorsは、制約ZIPCHKをzip_checkに変更します。

NULLの制限を列に追加します。

ALTER TABLE Distributors Alter Column Street Set Not NULLを変更します。

NOT NULLの制限を列から削除する:

ALTER TABLE Distributors alter column street dolpがnullではなく、

テーブルとそのすべての子孫での制限チェックを追加します。

ALTER TABLE Distributorsの追加制約ZIPCHKチェック(CHAR_LENGTH(ZIPCODE)\u003d 5)。

テーブルにのみチェック制限を追加しますが、その子孫ではありません。

ALTER TABLEディストリビューターの追加制約ZIPCHKチェック(CHAR_LENGTH(ZIPCODE)\u003d 5)継承なし。

(この制限時間は継承されず、将来の子孫もあります。)

テーブルとそのすべての子孫からのチェック制限を削除します。

ALTER TABLE Distributors Drop Constraint Zipchkをドロップします。

テーブル自体からのみチェック制限を削除します。

ALTER TABLEのみDisplicutis Drop Constraint ZipChk;

(制限検査はすべての子会社に残ります。)

テーブルへの外部キーの制限を追加します。

ALTER TABLEディストリビューターの追加制約DISTFK外部キー(アドレス)参照アドレス(アドレス)。

他人の作業に最低の影響を与える外部キーの制限を追加する:

ALTER TABLE Distributorsの追加制約DISTFK外部キー(アドレス)参照アドレス(アドレス)有効ではありません。 ALTER TABLE DistributionalSyntraint Distfkを検証します。

テーブルへの一意性制限を追加する(複数の列):

ALTER TABLE Distributors拘束dist_id_zipcode_key一意(dist_id、zipcode)を追加します。

自動名称でプライマリキーテーブルに追加する(テーブルに1つの主キーが1つだけ存在する可能性があることに注意してください)。

ALTER TABLE Distributorsプライマリキー(DIST_ID)を追加します。

テーブルを別の表領域に移動します。

ALTER TABLE Distributors TableSpace FastableSpaceを設定します。

テーブルを別のスキームに移動します。

ALTER TABLE MYSCHEMA.DISTRIBUTORS SCHEMA yourschemaを設定します。

インデックスを再構築するプロセスの変更をブロックせずに、主キーの制限を再作成します。

分配和(dist_id)に並行した固有のインデックスを同時に作成します; rest_id_temp_idxを作成します。 ALTER TABLE Distributors Drop Constraint DistributorS_PKEY、index dist_id_temp_idxを使用して制約除去業者を追加します。

互換性

フォームを追加する(インデックスを使用せずに)、ドロップ、デフォルトを設定し、データ型を設定します(使用せずに)SQL規格に準拠しています。 その他の形式は、Postgres Proで実装されているSQL規格の拡張機能です。 さらに、拡張子は、1つのコマンドでALTER TABLEのいくつかの変更を指定する機能です。

ALTER TABLE DROP列を使用すると、単一のテーブル列を削除し、列のないテーブルを残します。 これはSQL規格の拡張です。これは、列の存在を持つテーブルの存在を許可しません。

SQL ALTER TABLEコマンドは、表が既に存在する場合は、データベーステーブル列の構造を変更するように設計されています。

列を追加および削除するためのALTER TABLE、デフォルト値

テーブルに新しい列を追加するためのALTER TABLEコマンドへの要求には、次の構文があります。

ALTER TABLE NAME_TABLE ADDNAME_NAME_STOLBET TYPE_DATA.

実施例1。 会社の会社があります。 従業員テーブル(従業員)があります。 このテーブルのセックス(階)に新しい列を追加する必要があります。 対応する要求は次のとおりです。

ALTER TABLE EMPLOYEDセックスチャーを追加する(1)

これで、デフォルトテーブル内のレコードの値を設定する必要があります。 この目的のためのALTER TABLEコマンドへの要求には、別のコマンド - ALTER列が含まれており、次の構文があります。

ALTER TABLE_NAME_STOLBETSのalter column_name_stolbetsデフォルト "value_pu_umol"を設定します

実施例2。 会社で、そのデータベースは会社と呼ばれ、ほとんど女性に勤務しています。 データベース管理者は、Sex列データ(性別)を記入するプロセスを軽減し、そのデフォルト値を設定するプロセスを減少させることを決定しました - 「F」を設定します。 対応する要求は次のとおりです。

ALTER TABLE EMPLOYEDE ALTER列セックスセットデフォルト "F"

現在、新しい従業員が男性である場合にのみ、SEX列に値 "M"を設定する必要があります。ほとんどの場合、値はデフォルトで設定されます - "f"。

ALTER TABLEコマンドでクエリを使用すると、テーブルから列を削除できます。 コマンドの構文は次のとおりです。

ALTER TABLE NAME_TABLE DROP COLUMN_STOLB.

実施例3。 Employee Tableからの同じ会社データベースにあるとしますので、Sex Column(Floor)を削除する必要があります。 対応する要求は次のとおりです。

ALTER TABLE従業員のドロップカラムセックス

したがって、新しい列がテーブルに表示され、その値は文字型を受け取り、1つのシンボルで構成されています。

キーを追加するためのテーブルを変更します

データベーステーブルのキーについて - クラスの中で リレーショナルデータモデル 。 データベーステーブルの作成時に主キー(主キー)が定義されていない場合は、ALTER TABLEコマンドを使用して実行できます。 次に単純な主キーが発生した場合のチーム構文。

ALTER TABLE NAME_TABLE追加プライマリキー(SIDENTIFIER_NAME)

複合主キーの場合のコマンドの構文。

ALTER TABLE NAME_TABLE ADD主キーを追加します

実施例4。 私たちは同じ会社のデータベースで、従業員の列を使って働きます。 この列の単純な主キーを従業員識別子の形式で追加して、次のようにします。

ALTER TABLE EMPLOYEEの追加主キー(EMP_ID)

従業員識別子と従業員が機能する部門識別子からなる複合キーを使用することを決定した場合は、次の要求を使用します。

ALTER TABLE EMPLOYEEの追加主キー(EMP_ID、DEPT_ID)

制限を追加および削除するためのALTER TABLE.

整合性の制限は何ですか、クラスで言った リレーショナルデータモデル 。 簡単にすると、あるテーブル(1)から任意の行を削除すると、別の表(2)で表(1)の行を参照する文字列は、表(1)に含まれていない参照がないはずです。 、つまりどこにもなるリンク。

ALTER TABLEコマンドは、そのようなリンクにNULL値を設定する必要があるかもしれません。 その構文は次のとおりです。

ALTER TABLE_NAME_TABLE_TABLESの追加制約外部キー名称名_date references_table_table_name_tela_teleteセットNULL

実施例5。 同じ会社のデータベースでは、参照制限をインストールする必要があるとします.EmployeeテーブルのDEPTテーブルから部署を削除すると、これらの部門へのリンクが含まれている場合は、リンク値(外部キー)をNULLで設定する必要があります(完全に)。未定義)。 対応する要求は次のとおりです。

ALTER TABLE EMPLOYEMの追加制約DEPT_ID外部キー(DEPT_ID)参照削除セットNULL

したがって、突然排除された部門で働いていて、それの記録がDEPTテーブルから削除されていることがある場合は、この従業員の録音で、DEPT_ID列の値がNULLの値を取ります。

表(2)の表(2)の項目が表(1)で参照する表(2)の項目が少なくとも1つある場合には、ALTER TABLEコマンドへの要求をテーブル(1)からの参照エントリを削除するために禁止することもできる。 そのような要求の構文は次のとおりです。

ALTER TABLE NAME_SHIK_TABLE ADD制約外部キー名称_NAME REFERENCES_NAME_TABLE_NAME_TE_TE_TES_DELETCLICT

ALTER TABLE式を備えた次のコマンドは、このグループの少なくとも1つの薬物がある場合、グループテーブルからの準備グループを削除するための禁止を確立します。これは、作成テーブルの記録によって決定されます。

aLTER TABLE準備の追加制約GR_ID外部キー(GR_ID)参照グループの削除制限

この薬局の少なくとも1人の従業員がある場合、薬局テーブルから薬局の削除の禁止を確立します。これは、従業員テーブルの記録によって決定されます。

aLTER TABLE EMPLOYEM追加契約PH_ID外部キー(PH_ID)参照の参照制限事項

ALTER TABLEコマンドへの要求は、表(2)のエントリを削除すると、表(1)のエントリを参照すると、表(1)のすべての対応するレコードを削除する必要があります(カスケード削除)。 。 そのような要求の構文は次のとおりです。

ALTER TABLE_NAME_TABLE_TABLE ADD制約外部キー_NAME_NAME_TABLE_TABLE_NAME_NAME_TELA_TELETEカスケードを追加します

実施例7。

可用性テーブルを再変更し、準備テーブルから準備を取り除くと、この薬物のすべてのレコードを可用性テーブルで削除する必要があると判断します。

aLTER TABLE可用性ADD制約PR_ID外部キー(PR_ID)参照の作成の準備カスケード

今度は薬局テーブルから薬局を削除した場合、この薬局のすべてのレコードを利用可能性表で削除する必要があることを定義します。

aLTER TABLE可用性ADD制約PH_ID外部キー(PH_ID)は削除カスケードで薬局を参照しています

次のコマンドは赤字テーブルを変更し、準備テーブルからの準備を削除すると、この薬物のすべてのレコードを赤字テーブルで削除する必要があると判断します。

aLTER TABLE赤字追加制約PR_ID外部キー(PR_ID)参照の準備Cascadeの削除の準備

IVクラス\u003d "偶数"\u003e

赤字テーブルを変更し、薬局テーブルから薬局を削除すると、この薬局のすべてのレコードを赤字テーブルで削除する必要があると判断します。

aLTER TABLE赤字追加制約PH_ID外部キー(PH_ID)参照カスケードの削除に関する薬局

ALTER TABLEコマンドを使用したクエリをチェック制限にインストールできます。 そのような要求の構文は次のとおりです。

ALTER TABLE NAME_TABLICEの追加制約check_data check(verable_long)

実施例8。 薬局ネットワークのデータベースと協力し続けています。

可用性テーブルを変更し、同じレコードにDateStartテーブルの属性の値が日付の値よりも小さくしないようにする必要があります。

ALTER TABLE可用性の追加制約check_dataチェック(DATESTART.

赤字テーブルを変更し、同じレコードにDATESTARTテーブルの属性の値が日付の値より小さくないことを確認します。

ALTER TABLE赤字追加制約CHECK_DATAチェック(DATESTART.

リレーショナルデータベースとSQL言語

テーブルの操作は、基本オブジェクトを操作するときに管理者データベースとプログラマが実行される最も一般的なアクティビティの1つです。 テーブルの作成と変更方法について詳しく説明します。

ANSI規格は、CREATE TABLEの標準バージョンとALTER TABLEの命令のすべての機能ではなく、各製造元によって実装されていますが、すべての製造業者の最小の一般的な分母のようなものです。 それにもかかわらず、ANSI規格はすべてのプラットフォームで使用できる基本的な形式です。

次に、プラットフォームは、CREATE TABLEおよびALTER TABLE ANSI規格の命令にさまざまな拡張機能を提供します。

原則として、プロジェクトプロジェクトとそれを作成する方法について考える必要があります。 このプロセスはデータベース設計と呼ばれます。 テーブルの関係を独自のデータとデータベース内の他のテーブルとの関係を分析するプロセスは正規化と呼ばれます。 データベースコマンドを作成する前に、プログラマとデータベース管理者が設計と正規化の原則を学習することをお勧めします。

SQL 2003構文

Table命令の作成を実行すると、データベース内のSQL 2003規格は定数または一時テーブルを作成します。 構文は次のものです。

作成[(ローカル一時)グローバル一時)]テーブル名称_tableique(name longBits type_data属性[、...])| [オプションオプション付きウォーカー名] | | .. (システム生成|ユーザー生成|派生)] [、...]] [definition_table]] name_table type_dan属性] | set default_name name call_po_umolite] | defaft default_name] | 品質名範囲を追加するname_table | scope_name(制限| CASCADE)] | 制限事項名前(制限された|カスケード)] | | ..

キーワード

一時的。

ローカル(ローカル)またはグローバル(グローバル)アクション領域から定数または一時的な(一時的な)テーブルを発表しました。 ローカルの一時テーブルは、セッション作成されたセッションからのみ使用可能で、セッションが作成されたときに自動的に削除されます。 グローバル一時テーブルはすべてのアクティブセッションから入手できますが、セッションが作成されたときに自動的に削除されます。 スキーマ名を指定して一時テーブル名を指定しないでください。

(LongBits Type_Data属性[、])の名前

1つ以上の列がコンマ、データ型、および追加の属性を介してリストされているリストは、null(nullability)値などの追加の属性です。 各テーブル宣言には、次のように指定できる少なくとも1つの列を含める必要があります。

ナマストルビツァ

列の名前が示されています。 特定のSURBDの規則の観点から許容される識別子であるべきです。 名前は意味があるはずです!

type_data.

列をname_name名でバインドします。特定のデータ型。 長さを指定できるデータ型の場合は、追加のパラメータ長、たとえばVARCHAR(255)があります。 データ型はSURBDで許可されている必要があります。 特定のメーカーの許容データ型とそのオプションの詳細については、第2章属性に連絡してください。

指定された制限属性に列を列挙します。 name_nameという名前の1列の場合は、いくつかの属性を指定できます。 コンマは必須ではありません。 典型的なANSI属性には以下が含まれます。

ヌルではありません

NULL値は列内で禁止されています(またはNOT NULLオファーが省略されている場合は許可されています)。 NOT NULL属性を持つ列にNULL値を配置しようとする任意の挿入および更新手順は実行されず、ロールバックが発生します。

デフォルト式

挿入または更新命令が任意の値を入力しない場合、列は式の値を使用します。 式は、列のデータ型に対して許可されている必要があります。 たとえば、整数型の列では、文字記号は使用できません。 式は文字列または数値リテラルであり得るが、カスタム関数またはシステム機能を指定することもできます。 SQL 2003規格では、NULL、USER、CURRENTJSER、SESSION_USER、SYSTERJJSER、CURRENT_PATH、CURRENT_D、およびそれら、CurrentJime、LocalTime、CurrentJimestamp、LocalTjmestamp、Array、またはArrayの既定のオファーで次のシステム機能を使用できます。

collat\u200b\u200be_name_name.

使用される照合順序、つまり、対応する列のソート順序が決定されます。 比較の名前はプラットフォームによって異なります。 一致する名前が定義されていない場合は、列で使用される文字セットのデフォルトマッピングが受け入れられます。 参照はチェックされているチェックパラメータによって、アクション領域オプション(スコープ)で定義されたREF列で参照がチェックされるかどうかを決定します。 DELETEの追加オファーは、リモートエントリによって参照されるレコードに値があるかどうかを決定し、NULLにインストールされるか、または制限が操作にかかるようになります。

制約限界名[タイプ参照[制限]]

パラメータは制限列を割り当て、制限の名前を希望する場合は。 制限の種類については、第2章で説明しています。制限事項は、制限事項の宣言において、この制限のこの列が唯一のものになると仮定されています。 テーブルが作成された後、制限はテーブルレベルを制限すると見なされます。

ナマストルビツァ

列は、アクション領域オプション(スコープ)、デフォルト値オプション(デフォルト)などの特別なオプションで決定され、列レベルまたは照合オファーを制限します。 多くの実装では、withオプションの提案はオブジェクト(型付き)テーブルの作成に限定されています。

name_tableのように

新しいテーブルは、既存の表Name_Tableと同じ列定義で作成されます。

REFISシステム:システム生成|ユーザーが生成した派生由来

オブジェクト(型付き)テーブルのオブジェクト識別子列(オブジェクト識別子、OID)が決定されます。 オブジェクト識別子は、テーブルの階層内のルートであるテーブルに必要です。 このパラメータに従って、REF列はシステムによって自動的に生成され(システム生成)、文字列(ユーザ生成)または別のREF列に基づいて作成されるときにユーザを手動で指定します。 パラメータは、allol_name列をオンにする必要があります。属性属性

制約限界タイプ[制限名] [、...]

テーブルには1つ以上の制限が割り当てられています。 このパラメータは、列レベルの制限が接続されている列にのみ適用されると仮定されるため、列レベルの制限とは著しく異なります。 テーブルレベルの制限の場合、複数の列の制限と接続する可能性があります。 たとえば、Salesテーブルでは、store_id clutch鍵、order_id、order_dateの一意の制限を宣言する必要があるかもしれません。 これはテーブルレベルを制限するだけで行うことができます。 制限の詳細については、第2章を参照してください。

名前【定義_table】

テーブルは完成したユーザータイプに基づいていると発表されます。 この状況では、テーブルは構造化型の各属性に対して1つの列を1つだけ持つことができ、REFで定義されている追加の列が提案です。 REFデータ型の詳細は「作成/変更」の項で詳細に説明されています。 この提案は、同じ命題名とは互換性がありません。 どこ:

スーパーテック[定義/テーブル]の下

同じ方式で現在のテーブルに対して即時のスーパーテーブルが宣言されています(存在する場合)。 必要に応じて、スーパーテーブルに完全な定義を指定して、列、制限などで埋めます。

コミットで(行を保存する行削除行]

コミット保存行は、コミット命令を実行するときに一時テーブルデータ文字列を設定します。 ON COMMIT DELETE RO WSオファーは、コミット命令を実行するときに一時テーブル内のすべてのデータ行を削除します。

names_stolbet type_data属性を追加します

適切なデータ型と属性を持つ列がテーブルに追加されます。

alter_stolbet_nameデフォルト値を設定します

デフォルト値が列に追加されます(存在しない場合)、または既存の値とともに異なります。

ALTER DROP DEFAULT_STOLB.

デフォルト値は指定された列から完全に削除されます。

alter_stolbet nameスコープ名を追加します

指定された列はアクション領域(スコープ)を追加します。 スコープはユーザーデータ型へのリンクです。

DREP SCOPEのドロップスコープを変更します

スコープは指定された列から削除されます。 制限付きおよびカスケードオファーは、このリストの最後に説明されています。

drop column_stolbetの名前

指定された列はテーブルから削除されます。 制限付きおよびカスケードオファーは、このリストの最後に説明されています。

tabular_caminationを追加します

テーブルは、指定された名前と特性に制限を追加します。

ドロップ制限の名前

既存の制限はテーブルから削除されます。

制限します。

このプロポーザルを指定すると、このオブジェクトに依存しているオブジェクトがデータベースにある場合、SURBDはコマンドをキャンセルします。

このプロポーザルを指定すると、SURBDはこのオブジェクトに応じて他のすべてのオブジェクトを削除します。

トピックを続ける:
インターネット

Windowsブートディスクを作成する最も一般的な方法の1つは、この記事で説明されている方法です。 そしてより正確に創造の中で、それは遠い世界で私たちを助けるでしょう...