• 締切済み
  • 暇なときにでも

索引のカラム定義変更(UX→PK)

例)索引IX_aaaのカラムbbbにUX(一意制約)が付いているがあるとします。テーブルはccc このUXをPKに変更する場合はどのようなSQL文を書けばいいでしょうか? 私なりに考えてみたのですが、わからないのでご教授願います。 それと、変更した後で確認するselect文も教えていただきたいです。 (1) Drop index IX_aaa cascade constraint; Create index IX_aaa on ccc(bbb PRIMARY KEY) [TABLESPACE 表領域名]; (2)Alter table ccc MODIFY (bbb PRIMARY KEY);

共感・応援の気持ちを伝えよう!

  • Oracle
  • 回答数1
  • 閲覧数220
  • ありがとう数2

みんなの回答

  • 回答No.1
  • 3rd_001
  • ベストアンサー率66% (115/174)

ユニーク索引があるなら、その索引を使ってプライマリーキーを追加可能です。索引の名前は変えないようですので、そのままプライマリーキーを追加すればよいのではないでしょうか。 alter table ccc add constraint PK_CCC PRIMARY KEY (bbb); 確認用SQL select * from dba_constraints where table_name ='CCC'; select * from dba_cons_columns where table_name='CCC';

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご回答いただきありがとうございました。

関連するQ&A

  • 同じテーブル設計にしたい

    CREATE TABLE 見積データ ( 見積番号 VARCHAR2(7) NOT NULL, 得意先コード VARCHAR2(7), CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); ******** 上記のようなテーブル設計のSQL文がありますが、私が作ったものではなく都合によりこのテーブルを create table A2 as select from A; 上記のようなコピーを行いました。 あたらしいテーブルでも CONSTRAINT 見積データ_KEY PRIMARY KEY ( 見積番号 ) ) STORAGE ( INITIAL 3020K NEXT 302K PCTINCREASE 0 ) TABLESPACE KNDN2; ALTER INDEX 見積データ_KEY REBUILD TABLESPACE KEC_IND STORAGE ( INITIAL 19K NEXT 2K PCTINCREASE 0 ); この制約と同じものを当てたいのですが、あとから追加するにはこの構文をどのように変えればいいのでしょうか?

  • Postgresqlでのテーブル作成について

    どなたかご教授願えますでしょうか。 <マスタ> <トランザクション> Kaisya Kojin-NO Simei      kaisya saiban-NO Kojin-NO AAA   0001   名前A1      AAA   1     0002 AAA   0002   名前A2      AAA 2     0001 BBB   0001   名前B1  ⇒   BBB 1 0001 BBB   0002   名前B2      BBB 2 0002 CCC   0001   名前C1      CCC 1 0002 CCC   0002   名前C2      CCC 2 0001 マスタのkaisyaとKojin-N0をキーにするべく各項目指定の後に constraint KEY_NAME primary key ( Kojin-NO, kaisya      ) として複合のキー設定をしてテーブルを作成しました。このマスタテーブルは作成できたのですが、 トランザクションを作成しようとCreate Tableを使用しましたが ERROR:relation "Key_name" already Exists となり作成できません。 ちなみにトランザクションのsaiban-NO、KaisyaがPrimary Key Kaisyaとkojin-NOをマスタの外部キーとして設定しようとしていました。 そもそもこの考え方が間違っているのでしょうか。

    • 締切済み
    • PHP
  • WHERE句の条件の記述の順序

    PRIMARY KEYとINDEXがテーブルに設定されている場合、 検索条件に記述する順番はどのようになるのでしょうか? 下記のテーブルがあり、SELECT文をつくろうと 考えています。 テーブル:foo 項目  PRIMARY KEY  INDEX ----------------------------------- a 1 b 2 1 c 3 d 2 (1)PRIMARY KEYを優先してWHERE句の順番を決める↓ SELECT * FROM foo WHERE a = "AAA" AND b = "BBB" AND c = "CCC" AND d = "DDD" (2) それともINDEXが設定されている項目を先に記述する↓ SELECT * FROM foo WHERE b = "BBB" AND d = "DDD"   AND a = "AAA" AND c = "CCC" (1)と(2)ではどちらの性能がよいのでしょうか?

  • 続oracleのプライマリ・キー名の変更について

    oracleのテーブル名を変更します。 運用上ネーミングルールとしてプライマリ・キー名はpk_テーブル名としていますので、 プライマリ・キー名もこの時に変更したいのですが、適切な手順を教えてください。 旧テーブル名:table_a 旧プライマリ・キー名:pk_table_a  ↓ ↓ ↓ 新テーブル名:table_b 新プライマリ・キー名:pk_table_b という質問をさせて頂きました。 回答を頂き、一旦納得した気がしたのですが、どうもうまくいきません。 下記を実行すると4のところでコケます。 既にオブジェクトが存在するというものです。 どうやら 2のところのプライマリキー名変更がうまくいっていないか pk_table_aがどこかにゴミとして残っているように思えます。 オブジェクトブラウザというツールで見てみると、 CONSTRAINTにpk_table_bが INDEXのところにpk_table_aが見えています。 手順がおかしいのか? コマンドが間違えているのか? それともプライマリキー名の変更はしない方が良いのか? ここら辺を教えてください。 --1.TABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) / --2.プライマリキー名変更 ALTER TABLE table_a RENAME CONSTRAINT pk_table_a TO pk_table_b / --3.テーブル名変更 RENAME table_a TO table_b / --4.「1」と同じTABLE 作成 CREATE TABLE table_a ( ITM1 VARCHAR2(10) NOT NULL, ITM2 DATE, CONSTRAINT pk_table_a PRIMARY KEY (ITM1) USING INDEX ) /

  • MySQLで同一カラムからのデーターの取り出し方法

    お世話になります。 MySQL5.6使用です。 同一カラムからのデーターの取り出し方法について教えてください。 下記のようなテーブル(tb1)があります。  item  date cnt  aaa  10  100  bbb  10  100  ccc  10  100  aaa  11  90  bbb  11  80  ccc  11  70  aaa  12  60  bbb  12  50  ccc  12  40 date(列)が10の、cnt(列)の抽出は下記でできます。 select item,cnt from tb1 where date=10; <結果>  item  cnt  aaa  100  bbb  100  ccc  100 同じように、date(列)が11の、cnt(列)の抽出は下記でできます。 select item,cnt from tb1 where date=11; <結果>  item  cnt  aaa  90  bbb  80  ccc  70 この二つのコードを同時に行い 1つの表にする方法が知りたいです。 結果として得たい表は下記のとおりです。     cnt(date=10) cnt(date=11)  aaa  100      90  bbb  100      80  ccc  100      70 (※カラム名はasで変更できることは理解しています。) お手数をお掛けしますが、 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • URL変更に伴うweb.configの変更について

    タイトルにつきまして、設定がうまくいかなく困っております。 明日の夜にて設定変更が予定されておりまして、詳しい方いらっしゃいましたらお手数ですが、アドバイスを頂けますでしょうか。 〈内容〉 ・一部URLの変更があります。数としまして約300ほどあります。 ・URLのパターンは大きく4種類あります。 〈パターン〉 ① 変更前 http://www.aaa.co.jp/bbb/ccc/ 変更後 http://www.aaa.co.jp/bbb/ ⇒/cccをなくす ② 変更前 https://www.aaa.co.jp/bbb/ 変更後 https://www.aaa.co.jp/ ⇒/bbbをなくす ③ 変更前 http://www.aaa.co.jp/bbb/ccc/dd/ee.html 変更後 http://www.aaa.co.jp/bbb/dd/ee.html ⇒/cccをなくす ④ 変更前 https://www.aaa.co.jp/bbb/dd.html 変更後 https://www.aaa.co.jp/dd.html ⇒/bbbをなくす ・既存のweb.configに対して下記の リダイレクト設定を実施 〈リダイレクト設定〉 〈rule name=\\\"/cccなし\\\" stopProcessing=\\\"true\\\"> 〈match url=\\\"(.*)/.csr /> 〈action type=\\\"Redirect\\\" url=\\\".*\\\" redirectType=\\\"Permanent\\\" /> 〈/rule> 〈rule name=\\\"/bbbなし\\\" stopProcessing=\\\"true\\\"> 〈match url=\\\"(.*)/.csr /> 〈action type=\\\"Redirect\\\" url=\\\".*\\\" redirectType=\\\"Permanent\\\" /> 〈/rule> ⇒実際に上記、内容を入れたが上手く変更後のURLにてアクセスができない状況です。 ※内容を記載しましたが、変更前は表示されて変更後のURLがうまく正規表現できなくリダイレクトされない状況です。 上記内容にて未経験で困っております。 詳しい方、何かアドバイス頂けますでしょうか。 よろしくお願い致します。

  • 分岐SQLを一発のSQLで実現したい

    【データベース:SQLServer2005】 SQLのアドバイスを頂きたいです。 【テーブル】 テーブル名:Table1 フィールド名:種類、キー1、キー2 テーブル名:Table2 フィールド名:種類、キー1、キー2 テーブル名:Table3 フィールド名:種類、キー1、キー2 【データ】 Table1 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD Table2 種類、キー1、キー2 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD Table3 種類、キー1、キー2 NULL  AAA  BBB NULL  AAA  CCC NULL  AAA  DDD これをUNIONで取得します。 種類、キー1、キー2 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD NULL  AAA  BBB NULL  AAA  CCC 実現したいのは、 1)同種類、キー1、キー2のデータで、 種類にNULLが含まれていたら、NULLのデータは取得しない 2)同種類、キー1、キー2のデータで、 種類にNULLしかないデータは、取得する 001  AAA  BBB 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD →いる NULL  AAA  BBB →いらない NULL  AAA  CCC →いらない ↓結果 001  AAA  CCC 001  AAA  DDD 002  AAA  BBB 002  AAA  CCC NULL  AAA  DDD 上記を実現する為、UNION後のSQLでも構わないので、 一発のSQLで取得する事は可能でしょうか? 有識者の方にご享受頂ければ幸いです。 どうぞ宜しくお願い申し上げます。

  • 複数のテーブルの全てのカラムを一度に検索するには?

    検索対象のカラムがid(主キー)、bc1~bc40と41個あります。 1つのテーブルに41個のカラムを作り検索させると非常に時間がかかります。 それにインデックスを全部に付けたいですが16個までしかつけられないです。 なので、5つのテーブルにカラムを分けて全部のカラムにインデックスをつけて それぞれを検索させようと思っています。 テーブルが1つだけなら SELECT * FROM `bc` WHERE `bc1`='あいうえおかき' AND `bc2`='あいうえおかき' AND `bc3`='あいうえおかき' AND ・・・ `bc39`='あいうえおかき' AND `bc40`='あいうえおかき' ORDER BY `bc33` DESC LIMIT 0,50; のようにできますが、テーブルが複数の場合はどうしたらよいのでしょうか。 検索を試す前に下記ができるか試してみました。 SELECT COUNT(*) FROM (((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id`) INNER JOIN `eee` ON `ccc`.`id`=`eee`.`id` エラーにはなりませんがカウント数が0になってしまいました。 SELECT COUNT(*) FROM (`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id` これは正確にできてカウント数100000 SELECT COUNT(*) FROM ((`ccc` INNER JOIN `bbb` ON `ccc`.`id`=`bbb`.`id`) INNER JOIN `aaa` ON `ccc`.`id`=`aaa`.`id`) INNER JOIN `ddd` ON `ccc`.`id`=`ddd`.`id` 4つ目のテーブルを入れたところから無理なようです。 他に良い方法はないのでしょうか。

    • ベストアンサー
    • MySQL
  • htmlのソースの一部を変更

    題名の通りなのですが、 あるhtmlに記述されている <img src="./aaa/bbb/ccc1.gif"> <img src="./aaa/bbb/ccc2.gif"> <img src="./aaa/bbb/ccc3.gif"> という画像のソースの「ccc」の部分をphpを使って 一つの操作で3つの「ccc」を変更するというのは可能なのでしょうか? (別に「aaa」「bbb」の部分でも構いません。) 当然、可能な場合には アップロードされているファイル名も変える必要がある為、 ソースだけでなく、アップされているファイル名の 変更が可能かどうかもお聞きしたいのですが、 理想としましては、管理画面などで 各htmlのパスやファイル名を呼び出して、 ブラウザ上なので変更できたら一番望ましいのですが お分かりになる方がおりましたら、是非ご教授ください。

    • 締切済み
    • PHP
  • 条件付の重複レコードの削除 (sqlite3)

    重複レコードの削除で、重複レコード内の日付が最も新しいのだけを残したいのですが sqlite3のクエリをどう書けるのでしょうか? 例えば以下のような構造で、keyの重複を削除するのですが、 keyごとにyear, monthのもっとも新しいのだけ残したのです。 よろしくお願いします。 id, key, year, month, value 1 , aaa, 2000,12, 1000 2 , bbb, 2001, 1, 600 3 , bbb, 2001, 4, 500 4 , bbb, 2000, 2, 400 5, ccc, 2001, 3, 300 6, ccc, 2001, 8, 200 クエリ実行の結果こうしたい↓ 1 , aaa, 2000,12, 1000 3 , bbb, 2001, 4, 500 6 , ccc, 2001, 8, 200

    • ベストアンサー
    • MySQL