テーブルの中には通常、Primary Key および Foreign Keyが設定されていると思いますが、あるテーブルの中でどれがPrimary Key および Foreign Keyとされているのか見れるSQLコマンドって、あるのでしょうか、教えてください。

A 回答 (3件)

Primary Key(主キー制約)、Foreign Key(参照整合性制約)は共にデータ整合性をチェックする為の「制約」です。


それらはCreate tableやAlter tableというSQL構文で作成することは出来ますが、どの列に設定されているか参照する為のSQL文はありません。
Oracleの場合、User_ConstraintsやUser_Cons_columnsの「データディクショナリ」表をSelect文で表の情報(もちろん制約の情報も)がわかります。
例:Select * from User_Constraints;
他のデータベース(SYBASEとかSQLSERVERとか)は違うかもしれないので確認した方が宜しいと思います。
    • good
    • 0
この回答へのお礼

pcg733さんのおっしゃるとうり確認してみたところ、データディクショナリ表を見つけることができました。助かりました、ありがとうございます。

お礼日時:2001/03/14 16:17

どのデータベースを使用しているのかわからないのですが、もし「SQLServer」であれば、


 sp_help <テーブル名>
で、テーブルの構成情報が表示されます。
    • good
    • 1

Kchanさんゴメンナサイ。


わたしが知る限りそのようなコマンドはありません。
でも、特定のデータベースにはそのデータベース特有のコマンドとしてある可能性はあります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aと関連する良く見られている質問

QエクセルでDeleteキーを押しても計算式が消えないようにしたい!

エクセルで作成した表の列のセル内に、計算式を入力しています。
セル内の値をクリアする為にDeleteキーを押すと、計算式まで消されてしまいます。
ロックする方法はありますか?
教えて下さい。
お願いします。

Aベストアンサー

No.5です。すみません、編集しているうちに肝心な部分を消してしまいました。余計な"「オプション」ボタン”を消していませんね。はじめ不確かな記憶を頼りに書いて、後で検証しながら修正したつもりでした。

「編集」-「ジャンプ」で[セル選択]ボタンを押します。
[定数]を選択します。[数値]、[文字]、[エラー値」、「論理値」にチェックが入っています。[文字]のチェックをはずします。

バージョンも書いてなかった。
私もExcel2000です。

Qテーブル作成後なんですが、Primary Keyをスクリプトで追加したい

Windows2000でSQLServerを使用しています。

テーブルは作成したのですが、後からある項目にPrimary Key を
エンタープライズマネージャを使用せず、スクリプトで追加したいのですが、
構文がわかりません。
どなたか教えていただけませんでしょうか。
よろしくお願いいたします。

Aベストアンサー

あけましておめでとうございます。
遅くなりましたが再度。

現在、自由にいじれるSQLServerの環境がないので、動作確認はしてないのですが、ちょこっと調べた感じだと、補足の内容はできないようです。
一度DropしてからAddしないとダメ、のようなこと書いてありました。
もしかしたら調べ方が悪いのかも、ですがあまり可能性はなさそうです。

お力になれなくてすみません。

参考URL:http://www.users.gr.jp/

Qテンキーのキー配置はなぜ計算機と電話が上下逆なのでしょうか。

私、よく計算の途中に電話をかける時や、FAXを打つ時に
1と7を間違えます。
なぜ?電話は上から123でPCや計算機が下から123なのでしょうか?
なぜ統一しないのでしょうか、当然時代の新しい方の
計算機が追従する物なのに。 (しかし何度やっても計算機のキー配置が使いやすいですねー。)

Aベストアンサー

こんなページがありましたよ。

参考URL:http://homepage2.nifty.com/osiete/seito193.htm

QPostgreSQL : 多値従属性(第四正規化)のprimary key 設定

一つの項目の主キーを指定する際、
例えば
day date primary key
と指定しますよね。

2つの項目を1つとし、主キーを指定する記述の仕方がわかりません。

確かOracleでは,例えば
(n_code,s_code)primari key
でしたっけ??あまり自信がないですが、こんなような記述の仕方を
していたような覚えがあります。

よろしくお願い致します。

Aベストアンサー

たとえば...

CREATE TABLE hoge (
n_code INTEGER,
s_code INTEGER,
PRIMARY KEY( n_code, s_code )
);

という感じです。

Q%キーを使った計算の仕方をお教えください。

ここへ初めてお世話になりに来ました。小学生頃には数学は得意でしたが、70代が来てさっぱりになりました。割合=パーセントを出すのに小学生なみの計算をしています。(年金の計算に使います)。電卓のパーセントキーを使った事が有りません。これを使った計算の仕方をお教え下さい。

※国民年金(基礎年金)は満額が792,100円です。60歳の誕生日までの納付です。
制度発足の昭和36年4月1日現在で20歳を超えた人其々に=加入月数にばらつきがあります。
※A…加入月数に対するB…納付月数で=C…満額に対する支給年金額のようになっています。
年金特別便の記録面には左に国民年金、次に厚生年金、右が年金加入期間合計欄になっています。でも国民年欄には納付月数と加入月数が有り、それの合計欄もあります。(加入月数―納付月数で=未納月数が出ます)

○年金加入期間合計欄は=国民納付月数+厚生になっています。
○全上は=国民年金加入月数+厚生年金加入月数にはなっていません。
未納期間を引いた年金額の計算をする時、%キーを使った計算が出来ると良いのにと思いお教え頂きに参りました。

分かり難い文面ですが、例の数字なども入れてお教え下さるとありがたいです。よろしくお願申し上げます。

ここへ初めてお世話になりに来ました。小学生頃には数学は得意でしたが、70代が来てさっぱりになりました。割合=パーセントを出すのに小学生なみの計算をしています。(年金の計算に使います)。電卓のパーセントキーを使った事が有りません。これを使った計算の仕方をお教え下さい。

※国民年金(基礎年金)は満額が792,100円です。60歳の誕生日までの納付です。
制度発足の昭和36年4月1日現在で20歳を超えた人其々に=加入月数にばらつきがあります。
※A…加入月数に対するB…納付月数で=C…満額に対する支...続きを読む

Aベストアンサー

引き続きです^^

消費税込みの金額の元値の出し方ですが。。。

税込み金額が525円の商品の元値を計算する場合→
525(525をまず入力)÷(割るのボタンを押す)105(消費税は5%なので
元値を100と考えてプラス5%で105%となります)500(答えの数字が表示
されます)

○1…仮に431月に対して380月は=431月の何パーセントか

この場合。。。
380(380と入力)÷(割るのボタンを押す)431(431と入力)%(ここで%の
ボタンを押す)88.167(答えの数字が表示される)
約88%となります

○2…仮に満額792,000円に対して支給額が700,000円は=満額の何パーセントか。

この場合。。。
700,000(700,000と入力)÷(割るのボタンを押す)792,000(792,000と入力)
%(ここで%のボタンを押す)88.383(答えの数字が表示される)
約88%となります

QFOREIGN KEYのエラーについて

下記おわかりの方、教えてください。

ユーザ情報テーブルは地域テーブルを参照しており、
地域テーブルにデータを追加してからユーザ情報の更新を行おうとしたところ、
下記のエラーがでました。

psql:exec_srfn_xi5_reg_upd_user.sql:5: ERROR: fk_userprovinceid referential int
egrity violation - key referenced from user_info not found in province_info
FETCH r1;

なお、ユーザ情報テーブルには下記のように定義してあります。

ALTER TABLE USER_INFO
ADD CONSTRAINT FK_USERPROVINCEID FOREIGN KEY ( PROVINCE_ID )
REFERENCES PROVINCE_INFO ( PROVINCE_ID ) MATCH FULL;

データを追加するには順番とか関係あったのでしょうか?
(いまさらユーザ情報テーブルをdropすることはできない状況です)
どうすればエラーがとれますか?
どうぞよろしくお願いいたします。

下記おわかりの方、教えてください。

ユーザ情報テーブルは地域テーブルを参照しており、
地域テーブルにデータを追加してからユーザ情報の更新を行おうとしたところ、
下記のエラーがでました。

psql:exec_srfn_xi5_reg_upd_user.sql:5: ERROR: fk_userprovinceid referential int
egrity violation - key referenced from user_info not found in province_info
FETCH r1;

なお、ユーザ情報テーブルには下記のように定義してあります。

ALTER TABLE USER_INFO
ADD CONSTRAINT FK_USER...続きを読む

Aベストアンサー

こちらのエラーは、ユーザ情報テーブル(user_info)にレコードを更新したときに、外部キーであるfk_userprovinceidが、地域テーブル(province_info)に存在しない、というものです。

user_infoの「province_id」とprovince_infoの「province_id」が一致すれば、エラーは解除されるはずです。

-mp

Qキーを押している間の時間を計算してくれるプログラム

はじめまして。
上記のようなプログラムを教えていただきたく、
投稿しました。

わたしは、心理学を専攻する大学院生です。
修士論文の実験でこのようなツールが必要となり、
学校のコンピュータルームに相談に行ったところ、
JavaScriptという言語で、このようなプログラムが
作れると聞き、ここ1月格闘してまいりました。

しかし、プログラムに関してはまったくの素人で、
お手上げ状態です。
したがって、こちらで皆さんのお助けを願ったしだいです。

概要は以下の通りです。
指定した時間の間(たとえば5分間)に、
1.何回キーを押したのか、
2.各回ごとに、どのくらいの時間(ミリ秒単位)押したのか
3.キーを押していた合計時間を測定したいと思っております。

そのために、以下の機能を備えたプログラムを求めています。
1.タイマー機能がついていること(実験開始と終了の操作が自動でできる)。
2.実験を開始・終了した時刻が取得できる。

3.各回のキーを押し始めた時刻が取得できる。
4.各回のキーを離した時刻が取得できる。

以上の説明、わかりにくい点もあるかと思います。
資金に余裕のない学生なので、
ソフトを購入することはできません。
この本を読めば分かる、といったアドバイスもありがたいのですが、プログラムがとても苦手のようです。
これらの点を考慮して、お助けいただける方、
ご回答お願いいたします。

はじめまして。
上記のようなプログラムを教えていただきたく、
投稿しました。

わたしは、心理学を専攻する大学院生です。
修士論文の実験でこのようなツールが必要となり、
学校のコンピュータルームに相談に行ったところ、
JavaScriptという言語で、このようなプログラムが
作れると聞き、ここ1月格闘してまいりました。

しかし、プログラムに関してはまったくの素人で、
お手上げ状態です。
したがって、こちらで皆さんのお助けを願ったしだいです。

概要は以下の通りです。
指定した時間の...続きを読む

Aベストアンサー

一応
>以下の機能を備えたプログラム
を作ってみました。IE用です。
昨今のマシン(メモリやCPU)では、あまり問題にならないスピードで動くとは思いますが、1ミリ秒の精度があるかというと(値は求まっても)かなり疑問です。(データが増えるにつれて画面の更新の時間も(ミリ秒という精度では)影響するかもしれません)
多分、集計するプログラム(処理)は別にあるものと想定し作っていません。
エンターキーを押すと開始します。(マウスで開始ボタンをクリックしても良い)
エンターキーによる開始の場合最初にエンターキーのキーアップが記録されます。
あとは、適当にキーを押します。
-----8<-----8<-----8<-----8<-----8<-----8<-----
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=SHIFT_JIS">
<title>限定された時間内に押されたキーの時間を集計する</title>
<script language="JScript">
<!--
var keyPushState=false; //キーが押されていない
var result; //結果を表示するテキストエリア
var time; //キーが押された時間
var IntervalID;//実行時間制御

window.onload=init;
function init(){
document.body.onkeydown=keyDown;
document.body.onkeyup=keyUp;
document.getElementById("startButton").focus();
result = document.getElementById("result");
IntervalID=undefined;
}
function keyDown(){
time = new Date();
if(!keyPushState){//キーが既に押されている状態である
keyPushState=true;
result.value += String.fromCharCode(window.event.keyCode)+":KeyDown at "+timeFormat(time)+"\n";
}
}
function keyUp(){
time = new Date();
result.value += String.fromCharCode(window.event.keyCode)+":KeyUp at "+timeFormat(time)+"\n";
keyPushState=false;
}
function timeFormat(t){// HH:MM:SS.sss
return (
ZeroFormat(t.getHours(), 2)+":"+
ZeroFormat(t.getMinutes(),2)+":"+
ZeroFormat(t.getSeconds(),2)+"."+
ZeroFormat(t.getMilliseconds(),3)
);
}
function ZeroFormat(num, n){// ZeroFormat(1,3) => "001"
var ret=""+num;
while(ret.length < n){
ret = "0" + ret;
}
return (ret);
}
function start(){
if(IntervalID==undefined){
document.body.onkeydown=keyDown;
document.body.onkeyup=keyUp;
result.value="開始時間"+timeFormat(new Date())+"\n";
IntervalID=setInterval("start()",5*60*1000);//5分
} else {
result.value+="終了時間"+timeFormat(new Date())+"\n";
document.body.onkeydown=null;
document.body.onkeyup=null;
clearInterval(IntervalID);
alert("終了しました");
}
}
//-->
</script>
</head>
<body>
<button id="startButton" type="button" onclick="start()">開始</button><br>
<textarea id="result" cols="60" rows="30" READONLY></textarea><br>
もう一度実行するときは、画面を更新して下さい。
</body>
</html>

一応
>以下の機能を備えたプログラム
を作ってみました。IE用です。
昨今のマシン(メモリやCPU)では、あまり問題にならないスピードで動くとは思いますが、1ミリ秒の精度があるかというと(値は求まっても)かなり疑問です。(データが増えるにつれて画面の更新の時間も(ミリ秒という精度では)影響するかもしれません)
多分、集計するプログラム(処理)は別にあるものと想定し作っていません。
エンターキーを押すと開始します。(マウスで開始ボタンをクリックしても良い)
エンターキーによ...続きを読む

QSQL*Plus:SPOOLコマンドでのSQL出力

Oracle SQL*Plusで、SPOOLコマンドを使用すると、SQL実行の結果はファイルに出力されますが、実行したSQL自身が出力されません。
SETコマンドで制御できるのではないかと思いましたが、ちょっと見当たりませんでした。
何か方法はないでしょうか?
よろしくお願いします。

Aベストアンサー

SET ECHO {ON|OFF}
っていうのがあったと思いますよ

詳しくはマニュアルを参照して下さい

Q計算機のキーの機能

単純な質問ですみませんが、知らないので教えてください。キーにCEってありますよね?これはどういう機能なのですか?Cはクリアで意味が通るんですが、CEもクリアとして使えるようですし。
よろしくお願いします。

Aベストアンサー

#1です補足です。
例えば、5+5の計算の時、間違って、5+6を入力したとしますと、Cを押すと、すべてがクリアされるので、最初からやり直しです。

CEを押して、6を入力すると、5+6の結果が=で得られますので。

Qあるテーブルの内容を基準にして違うテーブルを更新するSQL文

教えて下さい。

あるテーブルに下記の内容があります。
ID│名称
─┼───
1│花
2│木
3│水

もうひとつのテーブルには、
ID│名称
─┼───
1│海
3│水
4│空
となっています。
最初のテーブルの全レコードを対象に、最初のテーブルのIDと同じ値がもうひとつの
テーブルにある場合、もうひとつのテーブルをUPDATEし、存在しなければINSERTしたい
です。
結果を
ID│名称
─┼───
1|花
2│木
3│水
4│空
を期待しています。

このようにするSQL文を教えていただけませんでしょうか。
よろしくお願いします。

Aベストアンサー

良く似た質問が過去に有りました。
回答2がぴったりだと思います。
参考にしてください。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=604829


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング