多表鏈結查詢
員工表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類...