日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mapengpeng1999@163.com 数据库的设计

發(fā)布時(shí)間:2024/3/13 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mapengpeng1999@163.com 数据库的设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

糟糕的數(shù)據(jù)庫設(shè)計(jì):

1.數(shù)據(jù)冗余、浪費(fèi)空間

2.數(shù)據(jù)插入刪除很麻煩

3.程序性能差

良好的數(shù)據(jù)庫設(shè)計(jì):

1.節(jié)省內(nèi)存空間(不存在多個(gè)表中出現(xiàn)重復(fù)字段)

2.保證數(shù)據(jù)庫完整性

3.方便我們開發(fā)系統(tǒng)

軟件開發(fā)中,關(guān)于數(shù)據(jù)庫的設(shè)計(jì)

1.分析需求:分析業(yè)務(wù)和需要處理的數(shù)據(jù)庫的需求

2.概要設(shè)計(jì):設(shè)計(jì)關(guān)系圖(E-R圖)

設(shè)計(jì)數(shù)據(jù)庫的步驟:(個(gè)人博客)

1.收集信息、分析需求

用戶表(用戶登入注銷,用戶的個(gè)人信息,寫博客,創(chuàng)建分類(多個(gè)人))

分類表(文章分類,誰創(chuàng)建的)

文章表(文章的信息)

評論表:

友情鏈接(發(fā)鏈接信息)

說說表:(發(fā)表心情,id,content,create_time)

自定義表(系統(tǒng)信息,某個(gè)關(guān)鍵的字,或者一些主字段) key: value

數(shù)據(jù)庫命名用下劃線區(qū)分不用大駝峰,因?yàn)閿?shù)據(jù)庫不區(qū)分大小寫。

用戶表(user):id,username,password,sex,age,sign(個(gè)人簽名)

分類表(category):id(分類id),category_name(分類標(biāo)題),create_user_id(創(chuàng)建用戶的id)

文章表(blog):id(文章id),title(文章標(biāo)題),author_id(寫文章的用戶),category_id(文章分類),content(文章內(nèi)容),create_time(創(chuàng)建時(shí)間),update_time(修改時(shí)間),love(喜歡點(diǎn)贊)

評論表:id(評論id),blog_id(所屬文章),user_id(評論人),content(評論內(nèi)容),create_time(評論時(shí)間),user_id_parent(回復(fù)人的id)

友情鏈接表:id(友情鏈接id),links(網(wǎng)站名稱),href(網(wǎng)站鏈接),sort(排序,int型)

標(biāo)識表之間的關(guān)系:

寫博客:user-blog

創(chuàng)建分類:user-category

關(guān)注:user-user

友情鏈接:links

評論表:user-user-blog

數(shù)據(jù)庫三大范式

第一范式:

原子性:保證每一列不可再分。

第二范式:

前提是滿足第一范式,每張表只描述一件事。

第三范式:

前提是滿足第一范式和第二范式,第三范式需要保證數(shù)據(jù)表中的每一列數(shù)據(jù)都和主鍵直接相關(guān),而不能間接相關(guān)。

規(guī)范和性能問題

關(guān)聯(lián)查詢的表不得超過三張表

1.考慮商業(yè)化的需求和目標(biāo),(成本 用戶體驗(yàn))數(shù)據(jù)庫的性能更加重要。

2.在規(guī)范性能的問題的時(shí)候,需要適當(dāng)?shù)目紤]一下規(guī)范性。

3.故意給某些表增加一些冗余的字段(從多表查詢中變?yōu)閱伪聿樵?#xff09;

4.故意增加一些計(jì)算列(從大數(shù)據(jù)量降低為小數(shù)據(jù)量的查詢:索引)

事務(wù)

要么都成功,要么都失敗。

ACID原則

原子性:要么全部完成,要么都不完成。

一致性:總數(shù)不變

隔離性:多個(gè)進(jìn)程互不干擾

持久性:一旦提交不可逆,持久化到數(shù)據(jù)庫了

隔離性的問題:

臟讀:一個(gè)事務(wù)讀取了另一個(gè)沒有提交的事務(wù)

不可重復(fù)度:在同一個(gè)事務(wù)內(nèi),重復(fù)讀取表中的數(shù)據(jù),表數(shù)據(jù)發(fā)生了改變

虛讀(幻讀):在一個(gè)事務(wù)內(nèi),讀取到了別人插入的數(shù)據(jù),導(dǎo)致前后讀出來的結(jié)果不一致。

JAVA代碼實(shí)現(xiàn):

1.開啟事務(wù) conn.setAutoCommit(false);

2.一組業(yè)務(wù)sql執(zhí)行完畢,提交事務(wù)

3.可以在catch語句中顯示的定義回滾語句,出現(xiàn)異常就回滾

數(shù)據(jù)庫連接池

數(shù)據(jù)庫連接,執(zhí)行完畢,釋放。頻繁的連接釋放很浪費(fèi)系統(tǒng)資源。

池化技術(shù):準(zhǔn)備好一些預(yù)先的資源,過來就連接預(yù)先準(zhǔn)備好的

假如常用連接數(shù)10個(gè),最小連接數(shù)就設(shè)為10個(gè)(根據(jù)常用連接數(shù)來設(shè)置的), 最大連接數(shù):15個(gè)(業(yè)務(wù)最高承載上限)超過了就排隊(duì)等待,例如等待超時(shí):100ms

編寫連接池,實(shí)現(xiàn)一個(gè)接口DataSource

開源數(shù)據(jù)源實(shí)現(xiàn)

DBCP C3P0 Druid:阿里巴巴 使用了這些數(shù)據(jù)庫連接池之后,在項(xiàng)目開發(fā)中就不需要編寫連接數(shù)據(jù)庫的代碼了。 DBCP:需要用到的jar包,commons-dbcp-1.4,commons-pool-1.6 C3P0: 需要用到的jar包,c3p0-0.9.5.5,mchange-commons-java-0.2.19 總結(jié):無論使用什么數(shù)據(jù)源,本質(zhì)還是一樣的,DataSource接口不會(huì)變,方法就不會(huì)變。 數(shù)據(jù)庫中的數(shù)據(jù)類型,int后的()可省略,大小會(huì)自動(dòng)在1到12之間判斷, char()長度固定的字符數(shù)浪費(fèi)空間,varchar()長度不固定的字符數(shù)很靈活建議使用 date YYYY-MM-DD,日期格式 time HH:mm:ss,時(shí)間格式 datetime YYYY-MM-DD HH:mm:ss 最常用的時(shí)間格式 日期時(shí)間類型后面不加(),內(nèi)容為字符串加單引號。null,空的沒有值 注意:不要使用NULL進(jìn)行運(yùn)算,結(jié)果為NULL

關(guān)于數(shù)據(jù)庫引擎

INNODB:默認(rèn)使用

MYISAM:早些年使用的

MYISAMINNODB
事務(wù)支持不支持支持
數(shù)據(jù)行鎖定不支持(表鎖)支持(行鎖,效率高)
外鍵約束不支持支持
全文索引(搜索到文章內(nèi)容)支持不支持
表空間大小(內(nèi)存)較小較大,約為MYISAM的2倍

常規(guī)的使用操作:

MYISAM:節(jié)約空間,速度較快

INNODB:安全性高,支持事物的處理,支持外鍵就支持多表多用戶操作。

在物理空間存放的位置:

所有的數(shù)據(jù)庫文件都存放在data目錄下,一個(gè)文件夾就是一個(gè)數(shù)據(jù)庫,本質(zhì)是文件的存儲(chǔ)。

在隱藏目錄(C:\ProgramData)C:\ProgramData\MySQL\MySQL Server 5.5\data下

MYSQL引擎在物理文件上的區(qū)別:

INNODB:在數(shù)據(jù)庫表中只有一個(gè)*.frm文件,以及上級目錄下的ibdata1文件 MYISAM對應(yīng)文件:*.frm 表結(jié)構(gòu)的定義文件 *.MYD 數(shù)據(jù)文件(data)*.MYI 索引文件(index)

設(shè)置數(shù)據(jù)庫的字符集編碼

CHARSET=utf8 不設(shè)置的話,會(huì)是mysql默認(rèn)的字符集編碼(不支持中文) MYSQL的默認(rèn)編碼是Latin1,不支持中文 在my.ini中配置默認(rèn)的編碼 character-set-server=utf8 不建議這樣操作,把物理文件改了,只能在我電腦不亂碼,在別人電腦一樣亂碼 所有的創(chuàng)建和刪除操作盡量加上判斷 drop table if exists teacher; create table if not exists teacher;外鍵(物理外鍵,數(shù)據(jù)庫級別的外鍵,不建議使用,避免數(shù)據(jù)庫過多造成困擾) 1.表與表之間有聯(lián)系刪除很麻煩。2.表多外鍵多就很亂。 constraint給外鍵起個(gè)別名,references引用 1.創(chuàng)建表時(shí)添加外鍵,不能兩個(gè)表同時(shí)在創(chuàng)建時(shí)添加外鍵, 因?yàn)榱硗庖粋€(gè)表還沒有創(chuàng)建這個(gè)表就無法關(guān)聯(lián)上另外那個(gè)表的字段。 2.創(chuàng)建后添加外鍵:(建表的時(shí)候最好不加約束,需要的時(shí)候再添加) alter table student add constraint FK_gradeid foreign key(gradeid) references grade(gradeid); 刪除有外鍵關(guān)系的表時(shí),必須先刪除引用別人的表(從表),再刪除被引用的表(主表) alter table 給哪個(gè)表加外鍵 add constraint 給外鍵約束起個(gè)別名 foreign key(作為外鍵的列) references 引用哪個(gè)表(引用哪個(gè)表中的哪個(gè)字段)總結(jié): 1.數(shù)據(jù)庫就是單純的表,只用來存數(shù)據(jù),只有行(數(shù)據(jù))和列(字段) 2.如果想使用多張表的數(shù)據(jù),想使用外鍵(用程序去實(shí)現(xiàn)) 不能使用外鍵與級聯(lián),一切外鍵概念必須用JAVA代碼解決。 原因:每次做DELETE和UPDATE都必須考慮外鍵約束會(huì)很麻煩。

數(shù)據(jù)庫的意義:數(shù)據(jù)存儲(chǔ),數(shù)據(jù)管理。

DML語言:數(shù)據(jù)操作語言,insert,update,delete

insert into 表名(字段1,字段2,字段3...) values (值1,值2,值3...); 可以只插入某些指定字段: insert into grade(gradename) values ('大四'); 主鍵自增就可以省略添加的主鍵字段。 如果不寫添加表的字段,默認(rèn)給表中所有的字段添加值。 寫插入語句,一定要數(shù)據(jù)和字段一一對應(yīng)。 插入多個(gè)字段:一定要數(shù)據(jù)和字段一一對應(yīng)。 insert into student(name,age,sex) values ('大四',21,'女'), ('大三',20,'女'),('大二',18,'男'); update修改 update student set name = '馬鵬鵬' where id = 1; 帶有修改條件 update student set name = '馬鵬鵬'; 會(huì)改動(dòng)所有的表 update student set name = '馬鵬鵬',email='mpp_123@163.com' where id = 1; 修改多個(gè)屬性用逗號隔開 MYSQL中不等于號有<>和!=兩種,BETWEEN AND為閉區(qū)間。delete刪除 delete from student;刪除全部表數(shù)據(jù),避免這樣寫 delete from student where id = 1;刪除指定數(shù)據(jù) truncate清空 作用:完全清空一個(gè)數(shù)據(jù)庫表,表結(jié)構(gòu)和索引約束不會(huì)變(表結(jié)構(gòu)和索引delete清空也不會(huì)變) 清空表: truncate student; delete刪除和truncate清空區(qū)別: 相同點(diǎn):都能刪除數(shù)據(jù),都不會(huì)刪除表結(jié)構(gòu)。 不同點(diǎn): truncate清空,會(huì)重新設(shè)置自增列,計(jì)數(shù)器會(huì)歸零。不會(huì)影響事務(wù)。 delete刪除的問題,就是在重啟數(shù)據(jù)庫會(huì)發(fā)現(xiàn)這么一個(gè)現(xiàn)象: 如果引擎是INNODB,自增列會(huì)從1開始(存儲(chǔ)在內(nèi)存中,斷電即失,沒有持久化) 如果引擎是MYISAM,自增列繼續(xù)從上一個(gè)自增量開始(存儲(chǔ)在文件中的,不會(huì)丟失)

DQL數(shù)據(jù)查詢語言:

分析需求,分析查詢的字段來自哪些表(2張表就要連接查詢) 確定使用哪種連接查詢? 自連接:自己和自己連接

索引:

索引:幫助MYSQL高效快速獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。 索引在小數(shù)據(jù)量的時(shí)候,用途不大,但是在大數(shù)據(jù)量的時(shí)候,區(qū)別十分明顯。 在一個(gè)表中,主鍵索引只能有一個(gè),唯一索引可以有多個(gè)。索引的分類: 主鍵索引(PRIMARY KEY):唯一標(biāo)識,主鍵不可重復(fù),只能有一個(gè)列作為主鍵 唯一索引(UNIQUE KEY):避免重復(fù)的列出現(xiàn),唯一索引可以重復(fù),多個(gè)列都可以標(biāo)識為唯一索引 常規(guī)索引(KEY/INDEX):默認(rèn)的,可以用index或key關(guān)鍵字來設(shè)置 全文索引(fullText):在特定的數(shù)據(jù)庫引擎下才有,MyISAM。快速定位數(shù)據(jù)

索引原則:

1.索引不是越多越好 2.不要對進(jìn)程變動(dòng)數(shù)據(jù)加索引 3.小數(shù)據(jù)量的表不需要加索引 4.索引一般加在常用來查詢的字段上

索引的數(shù)據(jù)結(jié)構(gòu):

http://blog.codinglabs.org/articles/theory-of-mysql-index.html

MYSQL備份:

為什么要備份:
保證重要的數(shù)據(jù)不丟失
數(shù)據(jù)轉(zhuǎn)移
MYSQL數(shù)據(jù)庫備份的方式:
1.直接拷貝物理文件

在隱藏目錄(C:\ProgramData)C:\ProgramData\MySQL\MySQL Server 5.5\data下

2.在Sqlyog這種可視化工具中手動(dòng)導(dǎo)出

在想要導(dǎo)出的表或者庫中,右擊,選擇備份或?qū)С觥?/p>

3.使用命令行導(dǎo)出 mysqldump 命令行的使用

總結(jié)

以上是生活随笔為你收集整理的mapengpeng1999@163.com 数据库的设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。