今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(テーブル定義)」からの出題です。
ALTER TABLEでテーブルにUNIQUE制約を追加することはできるが、PRIMARY KEY制約を追加することはできない。
ALTER TABLEでテーブルの列にデフォルト値(DEFAULT)を設定あるいは変更することができるが、これにより既存のデータの列の値が変更されることはない。
テーブルの作成先のスキーマが何であろうと、テーブルを作成したユーザ、つまりCREATE TABLEを実行したユーザが、そのテーブルの所有者となる。
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2013年5月15日
テーブルを作成するには、作成先のスキーマへのCREATE権限が必要です。データベースにデフォルトで存在しているpublicスキーマには、publicに対してCREATE権限が付与されているので、誰でも新規にテーブルを作成できますが、新しく作成したスキーマにテーブルを作成するときは、そのスキーマの所有者以外のユーザはCREATEをGRANTされる必要があります。CREATETABLEという権限はありません。
ALTER TABLEはPRIMARY KEYも含め、どんな制約の追加、削除も可能です。ただし、既存のデータの内容によっては制約の変更が制限される場合もあります。
テーブルの列のデフォルト値は、あくまでも新規に追加(INSERT)されるデータについてのデフォルト値を定めるものなので、ALTER TABLEで設定が変更されても、既存のデータには影響がありません。
テーブルを作成するとき、CREATE TABLE schema_name.table_name...のようにして作成先のスキーマを指定することができます。上で述べた通り、作成先のスキーマへのCREATEがGRANTされている必要はありますが、作成されたテーブルの所有者は、そのスキーマの所有者とは無関係にCREATE TABLEを実行したユーザになります。
テーブルの所有者はテーブルに対するすべての権限を有しており、GRANTやREVOKEを実行することができます。自分自身のSELECT権限をREVOKEすることも可能で、この場合、自分が所有するテーブルからSELECTすることができなくなります。この状態でも、自分にSELECT権限をGRANTすることは可能で、そうすれば再び、SELECTできるようになります。
従って、正解はCとDです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.