mysql數(shù)據(jù)庫(kù)中 :
database : 文件夾
table : 數(shù)據(jù)表(數(shù)據(jù)文件)
進(jìn)入mysql
mysql -u 用戶(hù)名 -p 輸入密碼
顯示系統(tǒng)的database(文件夾)
查看存在的數(shù)據(jù)庫(kù)
show databases;
創(chuàng)建database
create database 名稱(chēng);
選擇database
use database名稱(chēng);
在當(dāng)前database可以隨時(shí)選擇其他的database 只需要直接use 名稱(chēng)即可
顯示數(shù)據(jù)文件
show tables;
顯示數(shù)據(jù)文件必須要在選擇database之后才可以進(jìn)行
刪除database
drop database 名稱(chēng);
查看表的詳細(xì)數(shù)據(jù)
desc 表名;
創(chuàng)建table
create table 表名(列名 類(lèi)型,列名1 類(lèi)型1,...列名N 類(lèi)型N);
刪除表
drop table 名稱(chēng);
插入數(shù)據(jù)
1.insert (into )表名 values(列值,列值1,...列值N);
該種插入方式必須與表中的列順序一致
2.insert (into) 表名(列名,列名1,...列名N) values(列值,列值1,...列值N);
制定某些列之后插入相對(duì)應(yīng)的值,可以不按照表中列順序插入,
并可以只插入一部分?jǐn)?shù)據(jù)
查詢(xún)數(shù)據(jù)
select 列名,列名1,...列名N from 表名;
最簡(jiǎn)單的查詢(xún)方式 :select * from 表名;
- 一種通配符,用來(lái)代表所有列 一般情況下苍狰,工作中不使用
因?yàn)樾枰嘁淮伪闅v查詢(xún)表內(nèi)列名
刪除數(shù)據(jù)
條件刪除 delete from 表名 where 列名 = 列值;
刪除全部數(shù)據(jù) delete from 表名;
更改數(shù)據(jù)
條件更改 update 表名 set 列名 = 列值 where 列名1 = 列值1;
更改全部數(shù)據(jù) update 表名 set 列名 = 列值;
別名機(jī)制
在數(shù)據(jù)庫(kù)中 一個(gè)列名之后直接添加一個(gè)未定義的單詞瓤帚,相當(dāng)于對(duì)該列進(jìn)行別名操作
例:select ename name from emp; name既是ename的別名 中間略寫(xiě)了關(guān)鍵字as
數(shù)據(jù)表也可以起別名份企,sql語(yǔ)句的執(zhí)行順序?yàn)?br>
from起向右執(zhí)行君旦,執(zhí)行完畢后再?gòu)膕elect開(kāi)始向右執(zhí)行
條件查詢(xún)
查詢(xún)工資大于5000的員工的編號(hào)贡蓖、姓名和工資
select empno,ename,salary from emp where salary > 5000;
查詢(xún)工資大于5000且小于10000的員工的編號(hào)甩牺、姓名和工資
select empno,ename,salary from emp where salary > 5000 and salary < 10000;
查詢(xún)工資小于5000或大于10000的員工的編號(hào)蘑志、姓名和工資
select empno,ename,salary from emp where salary < 5000 or salary > 10000;
查詢(xún)工資在5000到10000之間的員工的編號(hào)、姓名和工資
select empno,ename,salary from emp
where salary between 5000 and 10000;
比較運(yùn)算符 > < = <>(!=) >= <=
在mysql中支持!=運(yùn)算符 但是贬派,部分?jǐn)?shù)據(jù)庫(kù)不支持!=運(yùn)算符急但,
一般情況下,<>運(yùn)算符是數(shù)據(jù)庫(kù)的通用"不等于"運(yùn)算符
邏輯運(yùn)算符 and(&&) or(||)
在mysql中支持&&和||運(yùn)算符搞乏,但是通用的邏輯運(yùn)算使用and和or
在做區(qū)間判斷時(shí)where 列名 between (列值begin) and (列值end)
between and是一個(gè)全閉區(qū)間波桩,左右值均包含
條件刪除、條件更新请敦、條件查詢(xún)都可以使用數(shù)據(jù)庫(kù)中的通用比較運(yùn)算符
查詢(xún)員工的月工資
select empno,ename,salary+ifnull(bonus,0) sal_month from emp;
列之間相加镐躲,就是列之間的值一一相加
查詢(xún)員工的姓名,編號(hào)侍筛,月工資萤皂,一年的基本工資,一年總獎(jiǎng)金匣椰,一年的總工資
select empno,ename,
salary+ifnull(bonus,0) sal_month,
salary12 sal_base_year,
bonus12 bonus_year,
(salary+ifnull(bonus,0)) *12 sal_year from emp;
列還可以直接與一個(gè)常量做運(yùn)算裆熙,并且運(yùn)算結(jié)果依然可以做二次運(yùn)算
查詢(xún)員工編號(hào)為1001,1003,1005的員工編號(hào),姓名
select empno,ename from emp where empno in(1001,1003,1005);
in 查詢(xún)一個(gè)集合 但效率比較低 一般情況下不使用 一般情況下用exists替換
查詢(xún)出名字叫Lacus的員工的編號(hào)禽笑、姓名入录、工資
select empno,ename,salary from emp where ename = 'Lacus';
在mysql中查詢(xún)字符串信息時(shí)不區(qū)分大小寫(xiě),但在其他數(shù)據(jù)庫(kù)中區(qū)分
需要使用upper和lower做相應(yīng)的轉(zhuǎn)換
通用函數(shù)
ifnull(列名佳镜,value) 如果該列的某一個(gè)值為NULL僚稿,則修改為value
在部分?jǐn)?shù)據(jù)庫(kù)中該函數(shù)叫nvl
upper(列名) 將該列的值轉(zhuǎn)換為大寫(xiě)(對(duì)字符串列操作)
lower(列名) 將該列的值轉(zhuǎn)換為小寫(xiě)(對(duì)字符串列操作)
求出公司里的人數(shù)
select count(empno) emp_count from emp;
使用一個(gè)不會(huì)是空的列進(jìn)行查詢(xún),一般情況下使用編號(hào)列
求出公司員工所有人的總工資
select sum(salary + ifnull(bonus,0)) sum_sal from emp;
求出公司員工的平均工資
select avg(salary+ifnull(bonus,0)) avg_sal from emp;
求出公司員工的編號(hào)蟀伸、姓名蚀同、工資并按照工資從小到大的順序排序
select empno,ename,salary from emp order by salary asc;
asc : 正序 默認(rèn)排序方式 可省略
desc : 逆序 當(dāng)逆序排序時(shí) 在最后添加
當(dāng)條件查詢(xún)語(yǔ)句需要排序時(shí),要在語(yǔ)句最后添加排序
組函數(shù)
count(列名) 根據(jù)該列的值望蜡,返回相應(yīng)的數(shù)量
sum(列名) 根據(jù)該列的值唤崭,返回該列值的總和
avg(列名) 根據(jù)該列的值,返回該列的平均數(shù)
max(列名) 根據(jù)該列的值脖律,返回該列的最大值
min(列名) 根據(jù)該列的值谢肾,返回該列的最小值
查詢(xún)出公司每個(gè)部門(mén)的部門(mén)編號(hào)、該部門(mén)的人數(shù)小泉、該部門(mén)的工資總和
select deptno,count(empno),sum(salary) from emp group by deptno;
平均工資大于5000元的部門(mén)編號(hào)和平均工資芦疏,沒(méi)有部門(mén)的不算
select avg(salary) avg_sal,deptno from emp
group by deptno having avg_sal > 5000;
當(dāng)分組之后不可以使用where條件查詢(xún)只可以使用having
哪些職位的人數(shù)超過(guò)1個(gè)人冕杠?
select job,count(empno) from emp group by job
having count_emp > 1;
查詢(xún)調(diào)用組函數(shù)時(shí),如果語(yǔ)句中帶有普通列查詢(xún)酸茴,則必須做分組處理
group by 列名
分組處理的列一般情況下分预,就是所查詢(xún)的普通列,并且該列的值是有重復(fù)的
查詢(xún)出沒(méi)有獎(jiǎng)金的員工編號(hào)和姓名
select empno,ename from emp where bonus is NULL;
NULL的特性
1.任何與NULL做運(yùn)算的結(jié)果 都是NULL
2.被組函數(shù)忽略
3.在mysql中NULL默認(rèn)最小,在oracle中NULL默認(rèn)最大
4.在數(shù)據(jù)庫(kù)中判斷是否為NULL不可以用比較運(yùn)算符判斷
判斷是NULL is NULL 不是NULL is not NULL
子查詢(xún)
查詢(xún)出工資比Lacus高的員工的編號(hào)薪捍、姓名笼痹、工資
select empno,ename,salary from emp where salary >
(select salary from emp where ename = 'Lacus');
查詢(xún)出工資比Lacus低的員工的編號(hào)、姓名酪穿、工資,按照工資的從小到大的順序排序
select empno,ename,salary from emp where salary <
(select salary from emp where ename = 'Lacus') order by salary;
查詢(xún)出比部門(mén)20人數(shù)多的部門(mén)編號(hào)和部門(mén)人數(shù)
select deptno,count(empno) count_emp from emp group by deptno
having count_emp > (select count(empno) from emp where deptno = 20);
當(dāng)子查詢(xún)返回多列時(shí)
all 所有的 any 任意一個(gè)
誰(shuí)比所有的Lacus工資高
select empno,ename,salary from emp where salary >
all(select salary from emp where ename = 'Lacus');
誰(shuí)比任意一個(gè)Lacus工資高
select empno,ename,salary from emp where salary >
any(select salary from emp where ename = 'Lacus');
關(guān)聯(lián)子查詢(xún)
哪些員工的薪水比本部門(mén)的平均薪水低凳干?
select empno,ename,salary from emp e1 where salary <
(select avg(salary) from emp e2 where e1.deptno = e2.deptno);
求每個(gè)部門(mén)的最高工資的員工的編號(hào)和姓名
select empno,ename,salary from emp e1 where salary =
(select max(salary) from emp e2 where e1.deptno = e2.deptno);
exists
哪些人是其他人的經(jīng)理?
select empno,ename from emp where empno in
(select mgr from emp where mgr is not null);
select empno,ename from emp where empno = any
(select mgr from emp where mgr is not null);
select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.empno = e2.mgr);
exists 判斷時(shí) 判斷的是一個(gè)bool類(lèi)型被济,不判斷列值是否相同
書(shū)寫(xiě)時(shí) 直接按照where exists的方式使用
子查詢(xún)中 select不需要返回一個(gè)列值救赐,只需要返回一個(gè)bool值
所以不需要查詢(xún)某一列 一般情況下我們用select 1(一個(gè)常量)做查詢(xún)條件
誰(shuí)和拉克絲同部門(mén)?列出除了拉克絲的人
select empno,ename from emp where deptno in
(select deptno from emp where ename = 'Lacus')
and ename <> 'Lacus';
select empno,ename from emp where deptno = any
(select deptno from emp where ename = 'Lacus')
and ename <> 'Lacus';
select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.deptno = e2.deptno and e2.ename = 'Lacus')
and ename <> 'Lacus';
誰(shuí)是拉克絲的下屬只磷?
select empno,ename from emp where mgr in
(select empno from emp where ename = 'Lacus');
select empno,ename from emp where mgr = any
(select empno from emp where ename = 'Lacus');
select empno,ename from emp e1 where exists
(select 1 from emp e2 where e1.mgr = e2.empno and e2.ename = 'Lacus' );
in between...and... exists
都可以在使用前面添加not 用來(lái)表示不在這些數(shù)據(jù)中
哪些人不是別人的經(jīng)理经磅?
select empno,ename from emp where empno not in
(select mgr from emp where mgr is not null);
in的方式中需要去掉null值 否則判斷不正確
select empno,ename from emp where empno <> all
(select mgr from emp where mgr is not null);
select empno,ename from emp e1 where not exists
(select 1 from emp e2 where e1.empno = e2.mgr);
哪些部門(mén)沒(méi)有員工?
select deptno from dept where deptno not in
(select deptno from emp);
select deptno from dept where deptno <> all
(select deptno from emp);
select d.deptno from dept d where not exists
(select 1 from emp e where d.deptno = e.deptno);
表間關(guān)聯(lián)查詢(xún) 表A join 表B on 條件
查詢(xún)出所有員工的編號(hào)钮追、姓名预厌、部門(mén)名和工作地點(diǎn)
select e.empno,e.ename,d.dname,d.location from emp e,dept d
where e.deptno = d.deptno; 部分?jǐn)?shù)據(jù)庫(kù)不支持
select e.empno,e.ename,d.dname,d.location from
emp e (inner) join dept d on e.deptno = d.deptno;
inner 可略
默認(rèn)按照inner的方式關(guān)聯(lián) 內(nèi)聯(lián)聯(lián)接 取兩個(gè)表中的交集
外連接
左外連接 驅(qū)動(dòng)表 left outer join 匹配表 on 條件
顯示驅(qū)動(dòng)表中的所有數(shù)據(jù),匹配表進(jìn)行匹配
查詢(xún)出所有員工的編號(hào)元媚、姓名配乓、部門(mén)名和工作地點(diǎn) 把沒(méi)有部門(mén)的員工也顯示出來(lái)
select e.empno,e.ename,d.dname,d.location from
emp e left outer join dept d on e.deptno = d.deptno;
select e.empno,e.ename,d.dname,d.location from
dept d right outer join emp e on e.deptno = d.deptno;
右外連接 驅(qū)動(dòng)表 right outer join 匹配表 on 條件
顯示匹配表中的所有數(shù)據(jù),驅(qū)動(dòng)表進(jìn)行匹配
查詢(xún)出所有員工的編號(hào)惠毁、姓名、部門(mén)名和工作地點(diǎn) 把沒(méi)有員工的部門(mén)也顯示出來(lái)
select e.empno,e.ename,d.dname,d.location from
emp e right outer join dept d on e.deptno = d.deptno;
select e.empno,e.ename,d.dname,d.location from
dept d left outer join emp e on e.deptno = d.deptno;
全外連接
select e.empno,e.ename,d.dname,d.location from
emp e left outer join dept d on e.deptno = d.deptno
union
select e.empno,e.ename,d.dname,d.location from
emp e right outer join dept d on e.deptno = d.deptno;
full outer mysql不支持 在其他數(shù)據(jù)庫(kù)中均支持
select e.empno,e.ename,d.dname,d.location from
emp e full outer join dept d on e.deptno = d.deptno;
union 聯(lián)合 返回兩次查詢(xún)的結(jié)果 去掉重復(fù)的數(shù)據(jù)
將不重復(fù)的結(jié)果都打印
一般情況下 用于全外連接和做合計(jì)相關(guān)的數(shù)據(jù)查詢(xún)
注:聯(lián)合的后段查詢(xún)結(jié)果 不會(huì)顯示相應(yīng)的列名崎页,
而是按照前段的查詢(xún)結(jié)果顯示
在程序接收數(shù)據(jù)時(shí)有可能造成接收困難
自鏈接 當(dāng)前表與當(dāng)前表的另外一個(gè)別名進(jìn)行表間關(guān)聯(lián)查詢(xún)
顯示員工的編號(hào)鞠绰、姓名和他的上司姓名
select e1.empno,e1.ename,e2.ename from emp e1
join emp e2 on e1.mgr = e2.empno;
模糊條件查詢(xún) like
需要配合通配符使用
% 寫(xiě)在查詢(xún)的值的內(nèi)部
例:like '%valueTemp%' 數(shù)據(jù)中存在valueTemp的值都查詢(xún)
注:可以操作基本數(shù)字類(lèi)型,只是操作時(shí)依然需要添加'' 因?yàn)閙ysql在這種情況飒焦,
將數(shù)據(jù)轉(zhuǎn)換為varchar類(lèi)型
_ 寫(xiě)在查詢(xún)的值得內(nèi)部
例:like 'valueTemp' 一共三個(gè)值 第二個(gè)值是valueTemp的數(shù)據(jù)
注:一般情況下是配合%使用的通配符蜈膨,獨(dú)立使用的情況比較少
例:like '_valueTemp%' 查詢(xún)出第二個(gè)值是valueTemp的數(shù)據(jù)
查詢(xún)出名字里第三個(gè)字母是e的員工的編號(hào)、姓名牺荠、工資翁巍、工作部門(mén)名稱(chēng)和工作地點(diǎn)
按照工資從大到小的順序排序
select e.empno,e.ename,e.salary,d.dname,d.location from
emp e join dept d on e.deptno = d.deptno
where e.ename like '__e%' order by e.salary desc;
去重 distinct
加在列名之前
查詢(xún)公司的職位都有哪些?
select distinct job from emp;
注:一個(gè)select對(duì)應(yīng)下 一般情況只有一個(gè)distinct,
并且一般情況下不會(huì)出現(xiàn)去重列后查詢(xún)其他列
因?yàn)槿ブ亓惺菬o(wú)法判斷行數(shù)的休雌,會(huì)導(dǎo)致數(shù)據(jù)混亂
復(fù)制表
create table 表名 select 列名 from 表名
復(fù)制結(jié)果集
復(fù)制表內(nèi)數(shù)據(jù)
insert into 表名 select 列名 from 表名
在數(shù)據(jù)庫(kù)中 對(duì)比于c/c++新增了一個(gè)新的類(lèi)型date
專(zhuān)門(mén)用于存儲(chǔ)日期類(lèi)型的數(shù)據(jù)類(lèi)型
在mysql date的延伸類(lèi)型 time timestamp datetime year
timestamp 默認(rèn)存儲(chǔ)當(dāng)前時(shí)間灶壶,當(dāng)修改同一行數(shù)據(jù)時(shí)會(huì)默認(rèn)修改
在mysql中 時(shí)間函數(shù) :
now() : yyyy-mm-dd hh:mm:ss 年-月-日 時(shí):分:秒
current_time() : hh:mm:ss 時(shí):分:秒 可略寫(xiě)為curtime();
current_date() : yyyy-mm-dd 年-月-日 可略寫(xiě)為curdate();
求出所有員工的編號(hào)、姓名和工作天數(shù)
select empno,ename,to_days(curdate())-to_days(hiredate) work_day from emp;
select empno,ename,datediff(curdate(),hiredate) work_day from emp;
索引 index
類(lèi)似于目錄式另外的一個(gè)數(shù)據(jù)文件 當(dāng)條件查詢(xún)時(shí)可以加快
< >= <= in not in <> between...and... not between...and...
但是提高查詢(xún)效率的同時(shí)杈曲,會(huì)降低插入驰凛、修改和刪除的效率胸懈,因?yàn)樗饕募?br>
會(huì)與表本身同步更新
索引文件會(huì)根據(jù)表中數(shù)據(jù)的增大而增大,占用硬盤(pán)空間恰响,容易造成服務(wù)器硬盤(pán)溢出
創(chuàng)建一個(gè)一般索引
create index 名稱(chēng) on 表名(列名);
刪除一個(gè)一般索引
drop index 名稱(chēng) on 表名
索引還區(qū)分為 組合索引趣钱,主鍵索引,聚簇索引
事務(wù) begin
在mysql中默認(rèn)情況下 想要進(jìn)行事務(wù)處理
需要先進(jìn)行一次begin操作
begin執(zhí)行后才可以進(jìn)行一下操作
commit
提交 確定begin之后的操作 使其不可以rollback
rollback
撤銷(xiāo) begin之后的操作可以退回到?jīng)]有操作時(shí)的狀態(tài)
事務(wù)操作只可以操作上一次事務(wù)胚宦,無(wú)法連續(xù)撤銷(xiāo)
set autocommit = 1/0 可以設(shè)置開(kāi)啟事務(wù)或關(guān)閉事務(wù)
contraint 約束
not null 不可為空
unique 不可重
primary key 主鍵(主鍵索引)
default value 默認(rèn)值
auto_increment 自增長(zhǎng)列
foreign key 外鍵約束(組合索引)
在表的基本列寫(xiě)完之后首有,按照以下方式:
foreign key(本表列名) references 主表名(主表列)
約束可以提高插入數(shù)據(jù)的準(zhǔn)確性,但是因?yàn)橄到y(tǒng)需要匹配約束條件枢劝,所以會(huì)降低修改數(shù)據(jù)的效率
修改數(shù)據(jù)表結(jié)構(gòu)
alter table 表名 action
action :
add 添加
set 設(shè)置
change 改變
modify 修改
CHANGE 對(duì)列進(jìn)行重命名或更改列的類(lèi)型井联,需給定舊的列名稱(chēng)和新的列名稱(chēng)、當(dāng)前的類(lèi)型
MODIFY 可以改變列的類(lèi)型呈野,此時(shí)不需要重命名(不需給定新的列名稱(chēng))
drop 刪除
engine 改變類(lèi)型
rename 改名
什么是觸發(fā)器低矮?
什么是事務(wù)寒瓦?什么是鎖赦肃?
什么叫視圖?游標(biāo)是什么怎茫?
數(shù)據(jù)庫(kù)中常見(jiàn)的幾種約束有哪些昨悼?
分別代表什么意思蝗锥?如何使用?
1, 數(shù)據(jù)庫(kù)編程(每小題3分)
有如下表:
Student(S#,Sname,Sage,Ssex) 學(xué)生表
Course(C#,Cname,T#) 課程表
SC(S#,C#,score) 成績(jī)表
Teacher(T#,Tname) 教師表
注:S#為學(xué)生編號(hào)率触,C#為課程編號(hào)终议,T#為教師編號(hào)
查詢(xún)“001”課程比“002”課程成績(jī)高的所有學(xué)生的學(xué)號(hào)
select s1.S# from SC s1 join SC s2 on s1.S# = s2.S# and s1.score > s2.score and s1.C# = 001 and s2.C# = 002;查詢(xún)平均成績(jī)大于60分的同學(xué)的學(xué)號(hào)和平均成績(jī)
select S#,avg(score) avg_score from SC group by S#
having avg_score > 60;查詢(xún)所有同學(xué)的學(xué)號(hào)、姓名葱蝗、選課數(shù)穴张、總成績(jī)
select s.S#,s.Sname,count(sc.C#) count_course,
sum(sc.score) sum_score from Student s
join SC sc on s.S# = sc.S# group by s.s#;查詢(xún)沒(méi)學(xué)過(guò)“葉平”老師課的同學(xué)的學(xué)號(hào)、姓名
select S#,Sname from Student s1 where not exists
select 1 from Student s2 join SC sc
on s.S# = sc.S# where s1.S# = s2.S# and sc.C# =
(select C# from Course where T# =
(select T# from Teacher where Tname = '葉平'));刪除學(xué)習(xí)“葉平”老師課的SC表記錄
delete from SC where C# =
(select C# from Course c
join Teacher t on c.T# = t.T# and
t.Tname = '葉平');查詢(xún)不同老師所教不同課程平均分從高到低顯示
select avg(score) avg_score from SC sc
join Course c on sc.C# = c.C#
group by c.T# order by avg_score desc;查詢(xún)兩門(mén)以上不及格課程的同學(xué)的學(xué)號(hào)及其平均成績(jī)
select S#,avg(score) avg_score from SC sc1
where exists(select 1 from
(select S#,score from score where score < 60) sc
where sc1.S# = sc.S#
group by sc.S# having count(sc.S#) >= 2)
group by S#;查詢(xún)各科成績(jī)前三名的記錄:(不考慮成績(jī)并列情況)
select score,C# from SC sc1 where sc1.score =
(select score from SC sc2 where sc1.C# = sc2.C#
order by score desc limit 1) or sc1.score =
(select score from SC sc2 where sc1.C# = sc2.C#
order by score desc limit 1,1) or sc1.score =
(select score from SC sc2 where sc1.C# = sc2.C#
order by score desc limit 2,1) order by C#;查詢(xún)各科成績(jī)最高和最低的分:以如下形式顯示:課程ID两曼,最高分皂甘,最低分
select C#,max(score) max_score ,min(score) min_score from SC group by C#;查詢(xún)學(xué)過(guò)“001”并且也學(xué)過(guò)編號(hào)“002”課程的同學(xué)的學(xué)號(hào)、姓名;
select S#,Sname from Student s
where exists(
select 1 from SC sc1 where C# = 1
and exists
(select 1 from SC sc2 where C# = 2
and sc1.S# = sc2.S#) and s.S# = sc1.S#);
主鍵:唯一確定一條記錄悼凑〕フ恚可以由一個(gè)或多個(gè)字段產(chǎn)生。
create table student(stuId int not null auto_increment primary key
, stuName varchar(32) not null default 'NewStu'
, stuSex char(7) not null default 'male'
, stuAge int not null default 18
, stuPart varchar(32) not null default 'computer');
create table teacher(tecId int not null auto_increment
, tecName varchar(32) not null default 'NewTec'
, salary float not null default 3000
, primary key(tecId));
外鍵:若表中的某字段的值需要依賴(lài)于其他表中的某個(gè)字段户辫,則把該字段申明為外鍵
create table course(couId int not null auto_increment
, couName varchar(32) not null default 'NewCou'
, tecId int not null
, primary key(couId)
, foreign key(tecId) references teacher(tecId));
create table score(stuId int not null
, couId int not null
, mark float not null default 60
, primary key(stuId, couId)
, foreign key(stuId) references student(stuId)
, foreign key(couId) references course(couId));
刪除
mysql> delete from student where id = 10009; //如果不加條件--delete from student渐夸,則會(huì)將表中數(shù)據(jù)全部清除
修改重置
update student set age = 20 where id = 10005; //如果不加條件--update student set age = 20,則會(huì)將表中所有age字段的設(shè)置為20
mysql> update student set age=age-4,dept='math' where id = 10007;
mysql> update student set age=age+3 where age >= 20;