天天看點

資料庫02

建立一對多關系的表:邏輯外鍵從表的外鍵對應的都是主表的主鍵 外鍵設定的要求:大小、長度、類型必須與主鍵的一樣

添加外鍵 :alter table +(從表的表名) add constraint +外鍵的名字 +foreign key(從表的那個字段添加外鍵)+erferences+ 主表(對應的哪一個字段(一般是主表的主鍵))

例:ALTER TABLE student ADD CONSTRAINT fk_student FOREIGN KEY(gid) REFERENCES grade(gid);

删除外鍵

ALTER TABLE:修改表的定義

fk_student:外鍵名(自定義)

DROP:删除

FOREIGN KEY:外鍵限制

例:ALTER TABLE student DROP FOREIGN KEY fk_student;

添加層級關系

第一種層疊關系

ON DELETE CASCADE 在删除主表的同時把相關聯的從表的資料都幹掉

例:ALTER TABLE student ADD CONSTRAINT fk_h FOREIGN KEY(gid) REFERENCES grade(gid) ON DELETE CASCADE;

第二種層疊關系,在删除主表的同時把相關取的資料都設定為null

例:ALTER TABLE student ADD CONSTRAINT fk_a FOREIGN KEY(gid) REFERENCES grade(gid) ON DELETE SET NULL;

連接配接查詢分為:

内連接配接,外連接配接(左外連接配接,右外連接配接),字連接配接,等值連接配接,非等值連接配接

内連接配接:inner join+你要連接配接的表 on 比對的條件(兩表的交集資料)

例:SELECT s.StudentNo,s.StudentName,r.StudentResult FROM student s INNER JOIN result r ON s.StudentNo=r.StudentNo;

比對的原則是 左表的每一行資料 與右表的每一行資料進行比對,隻要on後面跟着條件滿足就把資料拿出來

左外連接配接:左表和交集的

用左外連接配接,左外連接配接的特點就是 以左表為基準 右表與左表一一進行比對,如果比對上 直接顯示出來

比對不上的,左表的資料依然顯示,右表的資料設定為null:

例:SELECT s.studentNo,s.studentName,r.studentNo,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,result r WHERE s.StudentNo=r.StudentNo;

非等值連接配接:

例:SELECT s.studentNo,s.studentName,r.studentNo,r.studentResult FROM student s,result r;

子查詢:一個完整的查詢嵌套另一個完整的查詢

題:查詢課程為《高等數學-2》且分數不小于80分的學生的學号和姓名

SELECT s.studentNo,studentName FROM student s WHERE s.studentNo IN(

SELECT r.studentNo FROM result r WHERE r.subjectNo IN(

SELECT subjectNo FROM

subject

sub WHERE sub.subjectName=”高等數學-2”)

AND r.studentResult>=80

);

視圖: 就是一個 假表 作用: 看起來直覺 友善 ,便于我們對資料進行處理

建立一個視圖:

CREATE VIEW v AS SELECT studentNo,studentResult FROM result;

DESC v;

查詢視圖的結果集:SELECT * FROM v;

索引:友善我們快速查找,對SQL的優化非常有幫助 //并不是所有的字段都用索引

前提 這個字段經常被當作查詢對象操作,是一個表裡面不是索引越多越好,根據你具體的、

項目來進行設定。 一張表裡面與其他表裡面關系重合的,不适合加索引.

檢視所有的索引:

INDEX 代表索引的關鍵字, FROM 後面跟的是你要查詢的表

例:SHOW INDEX FROM result;

TABLE表:

1:第二個字段代表是否可以重複 如果是0 代表不可以重複如果是1代表可以重複

2:第三個參數 是索引的名字

3:第四個參數是索引的下表從1;

4:第五個就是我們字段名

5:第六個是 排序規則 預設是從a

建立一個主鍵索引 (唯一,不能為空,不一定是INT類型); id

請注意:在添加唯一索引的時候,資料亂碼是添加不成功

emp:表名

UNIQUE:唯一

例:ALTER TABLE emp ADD UNIQUE(ename);

顯示一下是否添加成功:SHOW INDEX FROM emp;

唯一索引 (主鍵索引在一張表裡面隻能有一個,唯一索引可以有多個)

删除索引

例:ALTER TABLE emp DROP INDEX ename;

全局索引:作用便于我們快速查找到某一行

ALTER TABLE emp ADD INDEX(epwd);

用在你的查詢語句裡面,隻有通過測試工具來看其性能

觸發器 :就相當你的鬧鐘

當你的emp表插入據的時候,另一個表績效同時也插入資料

TRIGGER 觸發器的關鍵字 + 觸發器的名字+在之前執行+INSERT(目前你的emp執行插入操作

例:CREATE TRIGGER t_money BEFORE INSERT ON emp

FOR EACH ROW

INSERT INTO jixiao VALUES(NEW.ename,NEW.salary*0.5);

例:INSERT INTO emp(eid,ename,salary) VALUE(11,"fu",20);
           

備份資料庫:

mysql dump -uroot -proot 庫名 >d:/mysqltextl.sql

查詢的先後順序

【】裡的内容可以要可以不要,如果要,必須按順序來
例:
SELECT [ALL|DISTINCT]
{*|table.*|[table.field1[AS alias1][,table.field2 [AS alias2]][,...]]}
FROM table_name [AS table_alias]
[LEFT|OUT|INNER JOIN table_name2] #聯合查詢
[where...] #指定結果需要滿足的條件
[GROUP BY ...] #指定結果按照哪幾個字段來分組
[HAVING ...] #過濾分組的記錄必須滿足的次要條件
[ORDER BY ...] #指定查詢記錄按一個或一個者多個條件排序
[LIMIT {[OFFSET,] ROW_COUNT |ROW_COUNT OFFSET OFFSET}];
#指定查詢的記錄從哪裡條至哪條