這篇文章主要介紹“Java數(shù)據(jù)庫(kù)知識(shí)點(diǎn)有哪些”,在日常操作中,相信很多人在Java數(shù)據(jù)庫(kù)知識(shí)點(diǎn)有哪些問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Java數(shù)據(jù)庫(kù)知識(shí)點(diǎn)有哪些”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
創(chuàng)新互聯(lián)專(zhuān)注于金鳳網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供金鳳營(yíng)銷(xiāo)型網(wǎng)站建設(shè),金鳳網(wǎng)站制作、金鳳網(wǎng)頁(yè)設(shè)計(jì)、金鳳網(wǎng)站官網(wǎng)定制、微信小程序定制開(kāi)發(fā)服務(wù),打造金鳳網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供金鳳網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
知識(shí)點(diǎn)1:SQL的select語(yǔ)句完整的執(zhí)行順序。
(1)from子句組裝來(lái)自不同數(shù)據(jù)源的數(shù)據(jù);
(2)where子句基于指定的條件對(duì)記錄行進(jìn)行篩選;
(3)group by子句將數(shù)據(jù)劃分為多個(gè)分組;
(4)使用聚集函數(shù)進(jìn)行計(jì)算;
(5)使用having子句篩選分組;
(6)計(jì)算所有的表達(dá)式;
(7)select的字段;
(8)使用order by對(duì)結(jié)果集進(jìn)行排序。
知識(shí)點(diǎn)2:SQL之聚合函數(shù)
聚合函數(shù)是對(duì)一組值進(jìn)行計(jì)算并返回單一的值的函數(shù),它經(jīng)常與select語(yǔ)句中的group by子句一同使用。
(1)avg():返回的是指定組中的平均值,空值被忽略。
(2)count():返回的是指定組中的項(xiàng)目個(gè)數(shù)。
(3)max():返回指定數(shù)據(jù)中的最大值。
(4)min():返回指定數(shù)據(jù)中的最小值。
(5)sum():返回指定數(shù)據(jù)的和,只能用于數(shù)字列,空值忽略。
(6)group by():對(duì)數(shù)據(jù)進(jìn)行分組,對(duì)執(zhí)行完group by之后的組進(jìn)行聚合函數(shù)的運(yùn)算,計(jì)算每一組的值。最后用having去掉不符合條件的組,having子句中的每一個(gè)元素必須出現(xiàn)在select列表中。
知識(shí)點(diǎn)3:SQL之連接查詢(xún)
外連接:
左連接(左外連接):以左表作為基準(zhǔn)進(jìn)行查詢(xún),左表數(shù)據(jù)會(huì)全部顯示出來(lái),右表如果和左表匹配的數(shù)據(jù)則顯示相應(yīng)字段的數(shù)據(jù),如果不匹配則顯示為 null。
右連接(右外連接):以右表作為基準(zhǔn)進(jìn)行查詢(xún),右表數(shù)據(jù)會(huì)全部顯示出來(lái),左表如果和右表匹配的數(shù)據(jù)則顯示相應(yīng)字段的數(shù)據(jù),如果不匹配則顯示為 null。
全連接:先以左表進(jìn)行左外連接,再以右表進(jìn)行右外連接。
內(nèi)連接:顯示表之間有連接匹配的所有行。
知識(shí)點(diǎn)4:SQL之sql注入
通過(guò)在 Web表單中輸入(惡意)SQL語(yǔ)句得到一個(gè)存在安全漏洞的網(wǎng)站上的數(shù)據(jù)庫(kù),而不是按照設(shè)計(jì)者意圖去執(zhí)行 SQL語(yǔ)句。舉例:當(dāng)執(zhí)行的 sql為 select * from user where username = “admin” or “a”=“a”時(shí),sql語(yǔ)句恒成立,參數(shù) admin毫無(wú)意義。防止 sql注入的方式:
(1)預(yù)編譯語(yǔ)句:如,select * from user where username =?,sql語(yǔ)句語(yǔ)義不會(huì)發(fā)生改變,sql語(yǔ)句中變量用?表示,即使傳遞參數(shù)時(shí)為“admin or ‘a’= ‘a’”,也會(huì)把這整體當(dāng)做一個(gè)字符創(chuàng)去查詢(xún)。
(2)Mybatis框架中的 mapper方式中的 #也能很大程度的防止 sql注入($無(wú)法防止 sql注入)。
知識(shí)點(diǎn)5:MySQL性能優(yōu)化
(1)當(dāng)只要一行數(shù)據(jù)時(shí)使用 limit 1
查詢(xún)時(shí)如果已知會(huì)得到一條數(shù)據(jù),這種情況下加上 limit 1會(huì)增加性能。因?yàn)?mysql數(shù)據(jù)庫(kù)引擎會(huì)在找到一條結(jié)果停止搜索,而不是繼續(xù)查詢(xún)下一條是否符合標(biāo)準(zhǔn)直到所有記錄查詢(xún)完畢。
(2)選擇正確的數(shù)據(jù)庫(kù)引擎
Mysql中有兩個(gè)引擎 MyISAM和 InnoDB,每個(gè)引擎有利有弊。MyISAM 適用于一些大量查詢(xún)的應(yīng)用,但對(duì)于有大量寫(xiě)功能的應(yīng)用不是很好。甚至你只需要update一個(gè)字段整個(gè)表都會(huì)被鎖起來(lái)。而別的進(jìn)程就算是讀操作也不行要等到當(dāng)前 update操作完成之后才能繼續(xù)進(jìn)行。另外,MyISAM對(duì)于 select count(*)這類(lèi)操作是超級(jí)快的。
InnoDB的趨勢(shì)會(huì)是一個(gè)非常復(fù)雜的存儲(chǔ)引擎,對(duì)于一些小的應(yīng)用會(huì)比 MyISAM還慢,但是支持“行鎖”,所以在寫(xiě)操作比較多的時(shí)候會(huì)比較優(yōu)秀。并且,它支持很多的高級(jí)應(yīng)用,例如:事物。
(3)用 not exists代替 not in
Not exists用到了連接能夠發(fā)揮已經(jīng)建立好的索引的作用,not in不能使用索引。Not in是最慢的方式要同每條記錄比較,在數(shù)據(jù)量比較大的操作紅不建議使用這種方式。
(4)對(duì)操作符的優(yōu)化,盡量不采用不利于索引的操作符
如:in not in is null is not null <>等某個(gè)字段總要拿來(lái)搜索,為其建立索引:Mysql中可以利用 alter table語(yǔ)句來(lái)為表中的字段添加索引,語(yǔ)法為:alter table表明add index (字段名);
知識(shí)點(diǎn)6:Mysql數(shù)據(jù)庫(kù)架構(gòu)圖
知識(shí)點(diǎn)7:Mysql性能優(yōu)化
下面代碼創(chuàng)建了一個(gè)叫 pr_add的 MySQL存儲(chǔ)過(guò)程,這個(gè) MySQL存儲(chǔ)過(guò)程有兩個(gè) int類(lèi)型的輸入?yún)?shù)“a”、“b”,返回這兩個(gè)參數(shù)的和。
(1)drop procedure if exists pr_add;(備注:如果存在 pr_add的存儲(chǔ)過(guò)程,則先刪掉)
(2)計(jì)算兩個(gè)數(shù)之和(備注:實(shí)現(xiàn)計(jì)算兩個(gè)整數(shù)之和的功能)
create procedure pr_add ( a int, b int ) begin declare c int; if a is null then set a = 0;
end if;
if b is null then set b = 0; end if;
set c = a + b;
select c as sum;
知識(shí)點(diǎn)8:MySQL中文亂碼問(wèn)題完美解決方案
解決亂碼的核心思想是統(tǒng)一編碼。我們?cè)谑褂?MySQL建數(shù)據(jù)庫(kù)和建表時(shí)應(yīng)盡量使用統(tǒng)一的編碼,強(qiáng)烈推薦的是 utf8編碼,因?yàn)樵摼幋a幾乎可以兼容世界上所有的字符。
數(shù)據(jù)庫(kù)在安裝的時(shí)候可以設(shè)置默認(rèn)編碼,在安裝時(shí)就一定要設(shè)置為 utf8編碼。設(shè)置之后再創(chuàng)建的數(shù)據(jù)庫(kù)和表如果不指定編碼,默認(rèn)都會(huì)使用 utf8編碼,省去了很多麻煩。數(shù)據(jù)庫(kù)軟件安裝好之后可以通過(guò)如下命令查看默認(rèn)編碼:
(1)查詢(xún)數(shù)據(jù)庫(kù)軟件使用的默認(rèn)編碼格式
show variables like“%colla%”;
show varables like “%char%”
(2)修改數(shù)據(jù)庫(kù)默認(rèn)編碼為 utf8
SET character_set_client='utf8';
SET character_set_connection='utf8';
SET character_set_results='utf8';
(3)創(chuàng)建數(shù)據(jù)庫(kù)的時(shí)候指定使用 utf8編碼
CREATE DATABASE `test`
CHARACTER SET 'utf8'
COLLATE 'utf8_general_ci';
(4)創(chuàng)建表的時(shí)候指定使用 utf8編碼
CREATE TABLE `database_user` (
`ID` varchar(40) NOT NULL default '',
`UserID` varchar(40) NOT NULL default '',
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(5)修改具體某數(shù)據(jù)庫(kù)或表的編碼
ALTER DATABASE `db_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE `tb_name` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
到此,關(guān)于“Java數(shù)據(jù)庫(kù)知識(shí)點(diǎn)有哪些”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!