Mysql數(shù)據(jù)庫中數(shù)據(jù)表的優(yōu)化、外鍵與三范式用法實(shí)例分析
本文實(shí)例講述了Mysql數(shù)據(jù)庫中數(shù)據(jù)表的優(yōu)化、外鍵與三范式用法。分享給大家供大家參考,具體如下:
數(shù)據(jù)表優(yōu)化
將商品信息表進(jìn)行優(yōu)化
1.創(chuàng)建商品種類表:
create table if not exists goods_cates( id int unsigned primary key auto_increment, name varchar(40) not null );
2.將商品種類寫入商品種類表中:
注意:插入另一個表的查詢結(jié)果不需要加values
insert into goods_cates(name) (select cate_name from goods group by cate_name);
3.將商品種類表更新到商品表中:
將商品表與種類表連接,用種類表id代替商品表種類內(nèi)容
update (goods_cates inner join goods on goods_cates.name=goods.cate_name) set goods.cate_name=goods_cates.id;
4.修改表結(jié)構(gòu):
將商品表商品種類名字段名cate_name重命名為cate_id
alter table goods change cate_name cate_id int unsigned not null;
外鍵
1.外鍵的使用:
添加外鍵約束,插入數(shù)據(jù)線判斷cate_id是否存在于goods_cates中的id,不存在,則插入數(shù)據(jù)失敗
alter table 表名1 add foreign key (字段名1) references 表名2(字段名2);
(設(shè)置外鍵后可以防止非法數(shù)據(jù)的錄入)
foreign key(字段名1) references 表名2(字段名2);
(也可在創(chuàng)建表時直接設(shè)置外鍵,前提是要連接的表存在)
2.外鍵的缺點(diǎn):
雖然外鍵可以有效防止非法數(shù)據(jù)的錄入,但是會極大降低表的更新效率,所以實(shí)際開發(fā)中,一般不適用外鍵約束,可以再事務(wù)層面去判斷數(shù)據(jù)的合法性。
3.外鍵的刪除:
顯示創(chuàng)建表的語句
show create table goods;
獲取外鍵名稱后刪除外鍵:
alter table goods drop foreign key goods_ibfk_1;
三范式
1.第一范式(1NF):強(qiáng)調(diào)列的原子性,即列不能再分成其他列。
2.第二范式(2NF):基于1NF,表必須有一個主鍵,非主鍵字段必須完全依賴與主鍵,而不是只依賴于主鍵的一部分。
3.第三范式(3NF):基于2NF,非主鍵列必須直接依賴于主鍵,不能存在傳遞依賴。
符合第三范式的數(shù)據(jù)庫,是比較合理的數(shù)據(jù)庫。
更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《MySQL查詢技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲過程技巧大全》及《MySQL數(shù)據(jù)庫鎖相關(guān)技巧匯總》
希望本文所述對大家MySQL數(shù)據(jù)庫計有所幫助。
相關(guān)文章
MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法
這篇文章主要給大家介紹了MySQL數(shù)據(jù)庫所在服務(wù)器磁盤滿了的故障分析和解決方法,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-02-02詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理
這篇文章主要介紹了詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2021-01-01淺談MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問題
本文主要介紹了MySql整型索引和字符串索引失效或隱式轉(zhuǎn)換問題,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-11-11MySQL跨服務(wù)器數(shù)據(jù)映射的實(shí)現(xiàn)
本文主要介紹了MySQL跨服務(wù)器數(shù)據(jù)映射的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03MySQL在grant時報錯ERROR?1064?(42000)的原因及解決方法
網(wǎng)上查到的grant方式大多會報錯,主要原因是MySQL版本8.0后不能再使用原來的方式,這篇文章主要介紹了MySQL在grant時報錯ERROR?1064?(42000),需要的朋友可以參考下2022-08-08