SQL理論(7)

5539 ワード

データベース内のテーブル構造=オブジェクト
DDLオブジェクトの作成、変更、削除に使用される言語
オブジェクトタイプ
-表:デフォルトの保管単位、行および列で構成されます.
  • ビュー:データのアクセス制限、誰も私の給与と住所を表示できません.
  • シーケンス:PK指定時によく使用され、デジタル自動完了時に
  • を使用する
  • インデックス:検索速度を速める
  • 同義語:オブジェクトに別の名前を付ける
  • ≪表の作成|Create Table|emdw≫:表の名前、列名、データ型および長さを指定します.
    命名規則(table,column)
    1.業務上のその他の正確な命名
    2.アルファベットで始まる
    3.1~30文字
    4.A~Z、a~z、0から9、$、#
    5.同じユーザが所有する他のオブジェクトは名前と重複しない
    6.oracleサーバ予約語ではない
    表の作成:必須コンポーネント
    表の作成方法:表の作成-insertを使用して行を挿入-コミット
    データ型(数値、文字、日付、時刻)
    テキストデータ
    char():予め作成したストレージスペースを使用しますが、残りのスペースは使用しません.
    varchar 2():入力されたデータ値に基づいて記憶領域を設定する
    charの性能はいいですが、空間利用率は高くなく、varchar 2の性能はよくありませんが、空間利用率はいいです.charが格納されているため、dictionaryとdbは更新されない可能性がありますが、残りのスペースは使用できません.そのため、ディスクフラグメントの整理が増加します.
    理想的なデータサイズは私が入力したデータ*20%です.
    ディスクの断片化
    ディスクからコンテンツを読み込むと、ディスクは順番に検索されます.10~40の中の30を探すなら、10から見ます.更新情報とはdelete+insertのことで、そうするとスペースが空になる=ディスクI/O、これらのスペースを空にする=ディスクフラグメント、ディスクフラグメントをまとめて削除=ディスクフラグメント整理=ディスクフラグメント
    したがって、トランザクション集中型ストレージによりI/Oストレージスペースを最小限に抑え、パフォーマンスを維持
    数値データ
    number:+-可変性が大きすぎて性能が悪い
    number(p):整数
    number(p,s):整数pから小数点sまで最大使用可能
    日付、時刻
    date:オペレーティングシステム上の言語体系に基づいて日付フォーマットを決定する
    タイムスタンプ:小数点以下の秒を含む日付
    サブクエリ構文を使用したテーブルの作成
    creat table dept80
    as
    select employee_id, last_name, salary*12 ANNSAL, hire_date
    from employees
    where department_id = 80;
    サブクエリの結果をそのままテーブル化すると、サブクエリのカラム、名前、タイプ、および長さがそのままテーブルにインポートされます.しかし、これはあまり使われない方法です.>>ビューを使用すると、サブクエリによって作成されたテーブルが元のテーブルに関連付けられないため、更新できず、最終的にデータの違いが発生します.
    データベースを変更する概念があります.alter tableと呼ばれています.しかしこれを使うと、最初からデータベースに大きなエラーがあり、整合性が損なわれるので、実際にはあまり使いにくいです.
    add:columnを追加すると、新しいcolumnのデータ値はnullになります.そのため、データを入れるにはupdateを追加する必要があります.どうしてINSERTじゃないの?Insertは行単位だから!
    modify:既存のカラムのデータ型の長さを調整しますが、既存のデータ値より小さくすることはできません.
    drop:既存の列、テーブルは削除できますが、参照関係面は削除できません
    rename, truncate...
    削除コマンド
    delete:DML文、消去行、保存領域、リカバリロールバックは、特定の行を消去するために元に戻すことができます.
    truncate:DDL文、消去行、消去行、削除行の領域、保持表記憶領域、復元不可-自動コミット機能
    drop:DDL文、行および表消去、すべてのデータ消去、リカバリ不可-自動コミット機能
    *TruncateとDropは、リカバリまたは削除のためにバックアップが必要です
    制約:テーブル内のデータ整合性を確保するための条件
  • 列に従ってインストール(添付):
  • 、各列が重複することを許可するとは限らない
  • は、1つの列に複数の制約を与える
  • である.
    not null:値が必要
    unique:nullが値ではないため、重複は許されません.
    primary key:not null+unique、テーブルはpkを指定する必要があります
    ≪外部キー|External Key|oem_src≫:リレーションを外部キーに設定する参照キー
    *FKは他の表の特定の列を参照し、参照する列はPK、UKを指定しなければFKを参照できません!!
    check:カスタマイズ、自分で作った条件
    制約規則
    1.名前を指定しないとsys 101と同じになるので、いい名前を付けてもいいです.
    2.制約の作成:create talbの作成時に制約を指定し、後で変更しないようにする
    制約の宣言
    制約制約名
    tablecol制約の略語
    方法まずカラムを明示し、次にコンストレイント条件を個別に宣言します.
    create table dept
    (did number(5),
    dname char(10),
    constraint dept_did_pk primary key(did)    
    // 설치할 컬럼의 이름이 마지막에 명시 = table level 에서의 지정방법
    );
    方法列と制約の同時実行
    create table dept
    (did number(5), constraint dept_did_pk primary key, 
    // 컬럼이 앞에 명시됨 = column level에서의 지정방법
    dname char(10)
    );
    ただし、現在の業界では、pk、ck、uk、fkの制約条件に名前を付けることでテーブルレベルを宣言します.
    not null名前のないカラムで宣言
    create table dept
    (did number(5),
    dname char(10) not null, 
    loc char(10),
    constraint dept_did_pk primary key(did)
    );
    参照先の指定
    check制約:列に条件を指定する
    実習の時.sql拡張子の作成と練習
    save test.sqlを作成し、C:oraclexeapporacleproduct11.2.0serverbinパスで検索するとtestという名前が作成され、ここでDBが作成されます!
    そして元のSQL,@testに戻ります.sqlは私が作成したDBです
    メニューを想像すると

    左は生成するDBリスト、「このようにDBを作成してください」
    右側はこのように符号化されたデータ値です.
    drop table名カスケード制約;db作成時のみ更新
    また、文字値については必ず「」に書きます.
    また、挿入行は直接insertですべて入力する必要があります!


    保存されたsqlテーブルの名前はempptです.sql
    drop table dept cascade constraints;
    drop table emp cascade constraints;
    create table dept
    (deptno number(2),
    dname varchar2(14) not null,
    loc varchar2(13) not null,
    constraint dept_deptno_pk primary key(deptno)
    );
    create table emp
    (empno number(4),
    ename varchar2(10) not null,
    gender char(10) not null,
    job varchar(9) not null,
    mgr number(4),
    hiredate date not null,
    sal number(7,2) not null,
    comm number(7,2),
    deptno number(2),
    constraint emp_empno_pk primary key(empno),
    constraint emp_gender_ck check (gender in('man', 'woman')),
    constraint emp_deptno_fk foreign key(deptno) references dept(deptno)
    );
    insert into dept
    values(10, 'Adminstration', 1700);
    insert into dept
    values(20, 'Marketing', 1800);
    insert into dept
    values(30, 'Purchasing', 1700);
    insert into dept
    values(40, 'Human', 2400);
    insert into dept
    values(50, 'Shipping', 1500);
    insert into emp
    values(100, 'King', 'man', 'AD_PRES', null, '1987-01-17', 24000, null, 10);
    insert into emp
    values(101, 'Kochar', 'man', 'AD_VP', 100, '1989-09-21', 17000, null, 50);
    insert into emp
    values(102, 'DE Hean', 'woman', 'AD_VP', 100, '1993-01-13', 17000, null, 50);
    insert into emp
    values(103, 'Hunold', 'man', 'IT_PROG', 102, '1990-07-03', 9000, null, 40);
    insert into emp
    values(104, 'Ernst', 'woman', 'IT_PROG', 103, '1997-07-25', 4800, null, 40);
    *注意:文字の値は「」、空の値は空です.
    こうして得られた結果

    結論:データベースを構築するときはよくやりましょう.これからは修正できません.