mysql2

mysql2

三大范式

三大范式是設(shè)計(jì)數(shù)據(jù)數(shù)據(jù)庫的一個(gè)原則

?1. 對(duì)于屬性(字段)必須是原子性的,不可再進(jìn)行分割

? person表 (name,age,gender,tel,birthday)

2. 對(duì)于記錄的唯一性,要求記錄有唯一標(biāo)識(shí),

? ? 數(shù)據(jù)表中都要求主鍵,而且主鍵盡量不要是業(yè)務(wù)字段,單獨(dú)拿個(gè)字段來做主鍵

? ? 字段與主鍵要有直接關(guān)系,不是間接關(guān)系, 確保一張表中只能存儲(chǔ)一種類型的數(shù)據(jù),不能存儲(chǔ)多種

?3. 對(duì)于字段的冗余性,要求任何字段不能由其他字段派生過來,要求字段沒有冗余性

? ? ?person表 (province, abbreviation, name)??

外鍵

當(dāng)我們進(jìn)行表關(guān)聯(lián)的時(shí)候,我們可以通過外鍵約束一下

? 1. 創(chuàng)建表的時(shí)候直接添加

? Create table 表名(字段 類型,字段 類型,..., constraint [外鍵名稱] foreign key(外鍵字段) references 父表(主鍵字段))

? create table stu(id int primary key auto_increment, name varchar(20), card_id varchar(10),clazz_id int,constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id));

2. 通過alert進(jìn)行修改 (外鍵起名要有一個(gè)命名規(guī)則)

?Alter table 表名 add [constraint 外鍵名字] foreign key(外鍵字段) references 父表(主鍵字段);

? alter table stu add constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id);

3. 刪除外鍵

? alter table [表名] drop foreign key [外鍵名稱];

? alter table stu drop foreign key fk_clazz_id_id;

?4. 查詢外鍵

? show create table [表名]

? 4. 級(jí)聯(lián)操作 (級(jí)聯(lián)更新,級(jí)聯(lián)刪除)

? ? 級(jí)聯(lián)更新 , 當(dāng)父表主鍵發(fā)生變化變化的時(shí)候,從表中外鍵也跟著更新

? alter table stu add constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id) on update cascade;

? ? 級(jí)聯(lián)刪除 ,當(dāng)父表中記錄被刪除時(shí)候,字表外鍵相關(guān)的記錄全部被刪除

? ? alter table stu add constraint fk_clazz_id_id foreign key(clazz_id) references clazz(id) on delete cascade;

? ? 級(jí)聯(lián)更新和級(jí)聯(lián)刪除可以一起使用,默認(rèn)情況下不帶級(jí)聯(lián)更新和級(jí)聯(lián)刪除的

? 連接查詢

? ? ? 內(nèi)連接? inner join? (on 是關(guān)聯(lián)條件)? 兩張表中符合條件的交集

? ? ? ? select * from stu inner join clazz on stu.clazz_id = clazz.id

? ? ?左連接? left join? 把左表中內(nèi)容都列出來,右表有匹配的就匹配,沒有匹配的直接為空

? ? ? ? select * from stu left join clazz on stu.clazz_id = clazz.id

? ? ? 右連接? right join 把右表內(nèi)容都列出來,左表中有匹配的就匹配,沒有匹配的直接為空

? ? ? ? select * from stu right join clazz on stu.clazz_id = clazz.id

?子查詢

一個(gè)查詢的結(jié)果是另外一個(gè)查詢的條件

select name from clazz where id in (select clazz_id from stu where name = 'zhangsan');

?別名(as)

通過as 可以給表起別名, 也可以給字段起別名

select s.name as sname, c.name as cname, c.number cnumber from stu as s inner join clazz as c on s.clazz_id = c.id;

?as 可以省略掉

select s.name sname, c.name cname, c.number cnumber from stu s inner join clazz c on s.clazz_id = c.id;

mysql的函數(shù)

? ? 1. max 最大值

? ? ? 求男生的最大年齡

? ? ? select gender, max(age) mage from stu2 group by gender having gender = 'm';

? ? 2. min? 最小值

? ? ? 求女生最小年齡

? ? ? select gender, min(age) mage from stu2 group by gender having gender = 'g';

? ? 3. count? 數(shù)量和

? ? ? 分別求男生和女生的數(shù)量

? ? ? select gender, count(gender) gcount from stu2? group by gender;

? ? 4. avg 平均數(shù)

? ? 男生和女生的年齡的平均數(shù)

? ? select gender, avg(age) gcount from stu2? group by gender;

? ? 5. concat 字段拼接

? ? ? 全表查詢,把姓名字段和年齡字段拼接輸出

? ? ? select name,age,concat(name,'-','age') cc from stu2;

? ? 6. substring 字段裁剪 substring(字段,begin,count)? begin 是從1開始的

? ? ? 截取姓名的字段的首字母輸出

? ? ? select name ,substring(name,1,1) sub from stu2;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容