mysql資料庫續論

2021-10-23 17:50:57 字數 2969 閱讀 6568

多表鏈結查詢

員工表emp、部門表dept

部門表:id、dname(部門名稱)、loc(部門所在地)

員工表:id、deptid(部門id)、ename(姓名)、salary(工資)

笛卡爾積:兩張表的記錄的乘積(查詢條件不準確)

select * from emp,dept where emp.deptid=dept.id;

select * from emp e,dept d where e.deptid=d.id;

select * from emp inner join dept on emp.deptid=dept.id;

外鏈結查詢:除了把滿足鏈結條件的資料查出來,還要把不滿足鏈結條件的資料查出來

left outer join (left左邊的表叫左表)

select * from emp left outer join dept on emp.deptid=dept.id;

右外鏈結查詢:除了把滿足鏈結條件的資料查出來,還要把右表不滿足鏈結條件的資料查出來

right outer join(right右邊的表叫右表)

select * from dept right outer join emp on emp.deptid=dept.id;

全外鏈結查詢:oracle資料庫裡的概念

oracle資料庫裡 ------- full outer join

mysql資料庫裡 ------- union(模擬全外鏈結)

外來鍵約束

create table emp(

id int auto_increment primary key,

…foreign key(deptid)references dept(id)

);完整性約束

insert into emp (ename,salary,deptid)values(『張三』,8000,5);

如果部門表裡沒有id=5的部門,員工表設定了外來鍵的話,上面語句會報錯,違反了完整性約束

子查詢需求:顯示工資高於張三的員工資訊

select *

from emp

where salary>(select salary from emp where ename=『張三』);

分頁 limit

select *

from emp

limit 0,2;

0表示從哪條開始,2表示一頁顯示多少條資料

資料庫的備份

匯出資料庫

終端 -> mysqldump -uroot -p db_test1 > d:/dbtest1.sql;

mysqldump -u使用者名稱 -p 資料庫名 > 備份位置;

匯入資料庫

方法一:

mysql客戶端

新建庫------create database abc;

終端mysql -uroot -proot abc < d:/dbtest1.sql;

mysql -u使用者名稱 -p密碼 庫名 < 備份位置;

方法二:

mysql客戶端

source d:/dbtest1.sql;

pl/sql程式設計

把增刪改查進行了封裝

儲存過程和函式

返回指定的id的姓名

儲存過程

delimiter //(定義結束符號,以雙斜線為結束符)

create procedure pro_emp(pid int, in out pname varchar(40))

begin

select ename into pname from emp where id=pid;

end//

delimiter ;

call pro_emp(1,@name);

select @name;

in-----輸入引數,預設,可省

out-----輸出引數

儲存函式

delimiter //

create function fun_emp(pid int) returns varchar(40)

begin

declare vname varchar(40);

select ename into vname from emp where id=pid;

return vname;

end//

delimiter ;

select fun_emp(1);

儲存過程和儲存函式的區別:

過程不能有返回值,函式必須有返回值

觸發器

需求:修改emp表的ename,把修改之前的ename儲存到test_emp表中

create table test_emp(

id int auto_increment primary key,

test_name varchar(40)

);delimiter //

create trigger tri_emp before update on emp

for each row begin

insert into test_emp(test_name) values(old.ename);

end //

delimiter ;

update emp set ename=『zhangsan』 where id=1;

emp表只要發生修改,就會觸發觸發器,把修改之前的ename儲存到test_emp表中

mysql資料庫效能資料 MYSQL資料庫效能優化

1.選取最適用的字段屬性 表中字段的寬度設得盡可能小 char 的上限為 255 位元組 固定占用空間 varchar 的上限 65535 位元組 實際占用空間 text 的上限為 65535。盡量把字段設定為 not null,執行查詢的時候,資料庫不用去比較 null 值。2.使用連線 join...

資料庫設計過程 續1

二 資料庫概念模型設計 資料庫概念模型 1 能真實 充分地反映現實世界,包括事物和事物之間的聯絡,能滿足使用者對資料的處理要求。是對現實世界的乙個真實模型。2 易於理解,從而可以用它和不熟悉計算機的使用者交換意見,使用者的積極參與是資料庫的設計成功的關鍵。3 易於更改,當應用環境和應用要求改變時,容...

MFC ODBC資料庫開發技術(續)

1.查詢記錄 使用crecordset類從資料來源中提取記錄集,並對記錄集進行操作。如果查詢的記錄是多條的,可以利用crecordset類的move,movenext,moveprev,movefirst,movelast方法移動記錄到指定的位置。在操作記錄集之前,需要定義乙個crecordset類...