mySQL 2日目

3350 ワード

プライマリ・外部キー、カスケード・オペレーションの複雑なクエリー・インデックス・データベース・バックアップ
create table grade( gid int(4) primary key auto_increment comment“クラスのid”,//主キーgname varchar(20)comment“クラスの名前”,gdesc varchar(30)comment“クラスの説明”,gdate date comment“クラスが作成された時間”
);
create table student( sid int(4) primary key auto_increment,sname varchar(20),spwd varchar(20),gid int(4)外部キー);
外部キーは、他のテーブルのプライマリ・キーに対応します.
insert into grade values(1,“java”,“とても牛”,’2018-7-31’),(2,“andrio”,“中公”,’2018-7-30’);
insert into student values(1,”fujiawei”,”123”,1),(2,”wangda”,”123”,1),(3,”lishu”,”123”,2),(4,”liqian”,”123”,2);
alter table student add constraint fk_gid foreign key(gid) references grade(gid);//外部キーの設定
alter table student drop foreign key fk_gid ;//外部キーの削除
外部キーによるカスケード操作
プライマリ・外部キーの関連付けを行うときに、削除、親テーブル(プライマリ・キー・テーブル)の更新時に、サブテーブル(外部キー・テーブル)に対する対応するアクションを指定できます.
cascade(積層)親テーブル更新または削除時、更新または削除時、更新または削除サブテーブル対応レコードset null(nullとする)親テーブル更新または削除時、サブテーブル対応フィールドはset null restrict(制約)no action(アクションなし):サブテーブル関連レコードの場合、親テーブルは更新できません
alter table student add constraint fk_grade foreign key(gid) references grade(gid) on delete cascade;
alter table student add constraint fk_grade foreign key(gid) references grade(gid) on delete set null;
//データベースバックアップ(可視化ツールを使用しない方法):dosにmysqldump-uroot(u+123)-p 123(p+パスワード)test grade>d:/mysqltxtと入力.sql//データベースのエクスポート
mysqldump -uroot -p123 test grade>d:/mysqltxt.sql
mysqlに:source d:/mysqltxtと入力します.sql;//データベースのインポート
//内部照会SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo;
//等値接続SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s,result r where s.StudentNo=r.Stud
SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s LEFT JOIN result r ON s.StudentNo=r.StudentNo;//左ジョイン、左テーブルがベース、右テーブルに左テーブルの値が存在しない場合、右テーブルの対応する値はnull
SELECT s.StudentNo,s.StudentName,r.SubjectNo,r.StudentResult FROM student s LEFT JOIN result r ON s.StudentNo=r.StudentNo WHERE r.StudentResult IS NULL;
SELECT s.StudentNo,s.StudentName,su.SubjectName,r.StudentResult FROM result r INNER JOIN student s ON r.StudentNo=s.StudentNo INNER JOIN subject su ON r.SubjectNo=su.SubjectNo;
SELECT s.StudentNo,s.StudentName,r.StudentResult FROM result r INNER JOIN student s ON r.StudentNo=s.StudentNo INNER JOIN subject su ON r.SubjectNo=su.SubjectNo WHERE su.SubjectName="データベース構造-1"ORDER BY r.StudentResult DESC;
SELECT s.StudentNo,s.StudentName,r.StudentResult FROM result r INNER JOIN student s ON r.StudentNo=s.StudentNo INNER JOIN subject su ON r.SubjectNo=su.SubjectNo WHERE su.SubjectName="高等数学-2"AND r.StudentResult>=80;
//サブクエリ文で、効果は上と一致するSELECT s.StudentNo,s.StudentName FROM student s WHERE s.StudentNo IN(SELECT r.StudentNo FROM resultr WHERE r.SubjectNo IN(SELECT su.SubjectNo FROM subject su WHERE su.SubjectName="高等数学-2")AND r.StudentResult>=80);
インデックス:利点:クエリーの速度を向上させ、主に通常のインデックスをクエリーするために使用されます.プライマリ・キー・インデックス(空ではなく、一意で、1つのみ)indexインデックスグローバル・インデックス
CREATE TABLE emp(eid INT(4), ename VARCHAR(20), epwd VARCHAR(20) );
ALTER TABLE emp ADD PRIMARY KEY(eid);//プライマリ・キー・インデックスの追加
ALTER TABLE emp ADD UNIQUE KEY(ワードセグメント名);//ユニークインデックスの追加