① sql書籍推薦
1、《SQL必知必會》
福達著, 鍾鳴、劉曉霞譯
這本書由淺入深地講解了SQL的基本概念和語法,涉及數據的排序、過濾和分組,以及表、視圖、聯結、子查詢、游標、存儲過程和觸發器等內容,實例豐富,便於查閱。新版增加了針對ApacheOpenOfficeBase、MariaDB、SQlite等DBMS的描述,並根據新版本的Oracle、SQLServer、MySQL和PostgreSQL更新了相關示例,非常適合初學者。
2、《SQL基礎教程》
MICK 著, 孫淼、羅勇 譯
這本書豆瓣評分9.0,重印13次,第2版基於新版本RDBMS全面升級,並新增一章介紹從應用程序執行SQL語句的方法。本書從資料庫、表的結構到查詢、更新表的語法,常用的函數,表的聯結等,內容逐步深入。對於初學者常見的疑難點,均通過專欄進行講解。各章節後精心設計了練習題,幫助讀者鞏固理解
3、《SQL Cookbook》
Anthony Molinaro 著
本書是一本指南,其中包含了一系列SQL 的常用問題以及它們的解決方案,希望能對讀者的日常工作有所幫助。有150 多個小節,這還僅僅是SQL 所能做的事情的一鱗半爪,而這本書更主要的是讓讀者看到,SQL 能夠做多少一般認為是SQL 問題范圍之外的事情。
4、《深入淺出SQL(中文版)》
貝里 著,O『Reilly Taiwan 譯
這本對所有沒SQL基礎的人來說都是本好書,幽默的語言,緊湊的內容,而且還有生動的圖畫,這無非給了初學者一個很好的開始,不僅會信心大增,也會提高學習興趣,同時對後續的提高也打下了基礎。著重基本語法的理解和基本概念的闡述,穿插在各個章節的練習題恰好提供了鞏固作用,如果你正苦於尋找一本SQL入門書籍,那麼它一定是不二之選
5、《SQL 反模式》
Bill Karwin 著,譚振林 / Push Chen 譯
《SQL反模式》是一本廣受好評的SQL圖書。它介紹了如何避免在SQL的使用和開發中陷入一些常見卻經常被忽略的誤區。它通過講述各種具體的案例,以及開發人員和使用人員在面對這些案例時經常採用的錯誤解決方案,來介紹如何識別、利用這些陷阱,以及面對問題時正確的解決手段。另外,《SQL反模式》還涉及了SQL的各級範式和針對它們的正確理解。
② sql入門新手教程
1、打開電腦瀏覽器,在網路搜索框中輸入:w3cschool,然後點擊網路按鈕,如圖所示。
③ sql入門新手教程是什麼
在關系資料庫實現過程中,第一步是建立關系模式,定義基本表的結構,即該關系模式是哪些屬性組成的,每一屬性的數據類型及數據可能的長度、是否允許為空值以及其它完整性約束條件。
定義基本表:
CREATE TABLE([列級完整性約束條件]
[,[列級完整性約束條件]]…
[,[列級完整性約束條件]]
[,表列級完整性約束條件]);
說明:
1、中是SQL語句必須定義的部分,[]中是SQL語句可選擇的部分,可以省略的。
2、CREATE TABLE表示是SQL的關鍵字,指示本SQL語句的功能。
3、是所要定義的基本表的名稱,一個表可以由一個或若干個屬性(列)組成,但至少有一個屬性,不允許一個屬性都沒有的表,這樣不是空表的含義。
多個屬性定義由圓括弧指示其邊界,通過逗號把各個屬性定義分隔開,各個屬性名稱互不相同,可以採用任意順序排列,一般按照實體或聯系定義屬性的順序排列,關鍵字屬性組在最前面,這樣容易區分,也防止遺漏定義的屬性。
4、每個屬性由列名、數據類型、該列的多個完整性約束條件組成。其中列名一般為屬性的英文名縮寫,在Microsoft Access 2010中也可以採用中文,建議不要這樣做,編程開發時不方便。
5、完整性約束條件,分為列級的完整性約束和表級的完整性約束,如果完整性約束條件涉及該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級也可以定義在表級。
這些完整性約束條件被存入系統的數據字典中,當用戶操作表中數據時由RDBMS自動檢查該操作是否違背這些完整性約束,如果違背則RDBMS拒絕本次操作;
這樣保持了資料庫狀態的正確性和完整性,不需要用戶提供檢查,提高了編程的效率,降低了編程難度。列級的完整性通常為主關鍵字的定義、是否允許為空。表級的完整性約束條件一般為外碼定義。
數據操縱
數據操縱語言是完成數據操作的命令,一般分為兩種類型的數據操縱。
1、數據檢索(常稱為查詢):尋找所需的具體數據。
2、數據修改:插入、刪除和更新數據。
數據操縱語言一般由 INSERT(插入)、 DELETE(刪除)、 UPDATE(更新)、 SELECT(檢索,又稱查詢)等組成。由於 SELECT經常使用,所以一般將它稱為查詢(檢索)語言並單獨出現。
④ 有哪些管理漏洞可以導致全部猝死
打開APP
我叫火柴
關注
常見的極易容易導致致命危險的安全漏洞 轉載
2022-07-16 15:02:30
我叫火柴
碼齡13年
關注
上期,提到了系統中不常見但不容忽視的網站漏洞,這篇我們就回顧一下一些常見甚至致命的高危漏洞
1. SQL 注入,可利用該漏洞獲取網站資料庫信息。
SQL 注入漏洞的產生原因是網站程序在編寫時,沒有對用戶輸入數據的合法性進行判斷,導致應用程序存在安全隱患。SQL 注入漏洞攻擊就是利用現有應用程序沒有對用戶輸入數據的合法性進行判斷,將惡意的 SQL 命令注入到後台資料庫引擎執行的入侵者攻擊手段。
2. 越權漏洞,可利用該漏洞越權獲取其他用戶信息。
越權訪問(Broken Access Control,簡稱 BAC),是一種在 web 程序中常見的安全缺陷,其原理是對用戶提交的參數不進行許可權檢查和跨越訪問控制而造成的。比如修改一個賬號的昵稱,介面參數是賬戶ID,後端只校驗賬號ID 正確就可以修改,那就可以任意修改其他人的賬戶昵稱了
3. 邏輯漏洞,可利用該漏洞造成網站業務邏輯混亂。
4. XSS 漏洞,可利用該漏洞篡改網站頁面,獲取其他用戶 Cookie。
跨站腳本攻擊簡稱為 XSS 又叫 CSS (Cross Site Script Execution),是指伺服器端的 CGI 程序沒有對用戶提交的變數中的 HTML 代碼進行有效的過濾或轉換,允許攻擊者往 WEB 頁面里插入對終端用戶造成影響或損失的 HTML 代碼。
5. csrf 漏洞,可利用該漏洞獲取其他用戶信息
跨站請求偽造(Cross-site request forgery,縮寫為 CSRF),也被稱成為「oneclick attack」或者 session riding,通常縮寫為 CSRF 或者 XSRF,是一種對網站的惡意利用。盡管聽起來像跨站腳本(XSS),但它與 XSS 非常不同,並且攻擊方式幾乎相左。XSS 利用站點內的信任用戶,而 CSRF 則通過偽裝來自受信任用戶的請求來利用受信任的網站。與 XSS 攻擊相比,CSRF 攻擊往往不大流行(因此對其進行防範的資源也相當稀少)和難以防範,所以被認為比 XSS 更具危險性。
5. 會話管理漏洞,可利用該漏洞登錄網站系統。
會話管理主要是針對需授權的登錄過程的一種管理方式,以用戶密碼驗證為常見方式,通過對敏感用戶登錄區域的驗證,可有效校驗系統授權的安全性。一般可出現以下漏洞
用戶口令易猜解
通過對表單認證、HTTP 認證等方式的簡單口令嘗試,以驗證存在用戶身份校驗的登錄入口是否存在易猜解的用戶名和密碼。
沒有驗證碼防護
驗證碼是有效防止暴力破解的一種安全機制,通過對各登錄入口的檢查,以確認是否存在該保護機制。
存在易暴露的管理登錄地址
某些管理地址雖無外部鏈接可介入,但由於採用了容易猜解的地址(如:/admin/login)而導致登錄入口暴露,從而給外部惡意用戶提供了可乘之機。
提供了不恰當的驗證錯誤信息
某些驗證程序返回錯誤信息過於友好,如:當用戶名與密碼均錯誤的時候,驗證程序返回「用戶名不存在」等類似的信息,通過對這一信息的判斷,並結合
HTTP Fuzzing 工具便可輕易枚舉系統中存在的用戶名,從而為破解提供了機會。
Session 隨機字元串簡單又規律
Session 作為驗證用戶身份信息的一個重要字元串,其隨機性是避免外部惡意用戶構造 Session 的一個重要安全保護機制,通過抓包分析 Session 中隨機字元串的長度及其形成規律,可對Session 隨機性進行驗證,以此來確認其安全性。
6. 暴力破解漏洞,可利用該漏洞暴力破解用戶帳戶。
服務端介面沒有對請求次數做限制,導致攻擊者可以通過暴力的方式,不斷的嘗試賬號,密碼,驗證碼對介面請求,尤其遇到弱口令的密碼或者驗證碼。所以建議在請求之前做人機校驗防護,和請求次數防護
7、不安全的對象引用,可通過構造敏感文件名而達成下載服務端敏感文件的目的
不安全的對象引用是指程序在調用對象的時候未對該對象的有效性、安全性進行必要的校驗,如:某些下載程序會以文件名作為下載程序的參數傳遞,而在傳遞後程序未對該參數的有效性和安全性進行檢驗,而直接按傳遞的文件名來下載文件,這就可能造成惡意用戶通過構造敏感文件名而達成下載服務端敏感文件的目的。
文章和自己個人網站同步:
常見的極易容易導致致命危險的安全漏洞_我叫火柴-個人博客
我叫火柴,」火柴「這個昵稱還是第一次玩QQ的時候注冊的,然後公司花名,網上昵稱就都這么用了,希望這輩子,用盡一生,只求一次,燃盡自己,轟轟烈烈的愛一次。年輕時總喜歡強說愁。等長大了看了大話,幾乎看過不下幾十次,從笑看到哭,從無知看到無奈,原來自己也不過芸芸眾生的一條狗罷了。
https://www.gcb1988.cn/article/1988_049.html
原文鏈接:https://www.gcb1988.cn/article/1988_049.html
打開CSDN,閱讀體驗更佳
蘋果系統新致命漏洞,黑客可以隨意控制您的手機設備
國內知名黑客組織東方聯盟的安全研究人員發現了蘋果一個新的漏洞,可能會讓黑客在您不知情的情況下訪問您的iPhone和iPad。一旦用戶授權他們的設備與黑客連接到同一個Wi-Fi網路,他們稱這種漏洞為「信任劫持」,從而允許您無線管理iOS設備。東方聯盟創始人兼黑客教父郭盛華:「一旦建立起這種信任關系,一切皆有可能,它引入了一種新的攻擊媒介。」第一步需要您在安裝完成後通過USB電纜將設備連接到計算機,但...
繼續訪問
網站設計中致使網站失敗的幾個最致命錯誤設計
網站設計中致使網站失敗的幾個最致命錯誤設計 早在一九九六年,我們就匯總了網站的10種錯誤設計。今年,我們訪問了215位英美用戶,就當代網站存在的錯誤設計進行了新一輪大規模可用性研究。從小型的地方性商業網站、娛樂網站,到非盈利性網站,再到國際組織機構的官方網站,通過對43個網站的分析,總結了當代網站10大最常見和最具破壞力的錯誤設計。這些錯誤設計,不但傷害了用戶,也對網站的業務指標造成了負面影響。
繼續訪問
軟體 Bug 五種等級,一級最致命
以下內容來自公眾號逆鋒起筆,關注每日干貨及時送達作者|strongerHuang微信公眾號|strongerHuang軟體工程師,對一個詞很敏感,那就是Bug。只要聽到說自己寫的代碼有Bu...
繼續訪問
高通被曝致命晶元漏洞,危及全球企業和個人雲數據
近日,網路安全供應商 Check Point 發表了聲明,說該公司在一項代號為「Achilles」研究中,對高通驍龍的數字信號處理(DSP)晶元進行了廣泛的安全性評估,發現其中存在大量漏洞,總數多達400多。 研究人員表示,由於易受攻擊的DSP晶元「幾乎見於世界上所有的安卓手機上」,導致全球受此漏洞影響的機型超過40%,其中不乏有全球知名品牌手機。 報告中指出,攻擊者利用這些漏洞不僅可以將手機變成一個完美的監聽工具,而且還能夠使手機持續無響應,或者鎖定手機上的所有信息,使用戶永遠不可訪問。此外,攻擊者還可
繼續訪問
Log4j安全漏洞持續爆雷,啥時候是個頭?
近期工信部網路安全管理局通報稱,阿里雲計算有限公司(以下稱:阿里雲)在 11 月 24 日發現了 Log4j2 安全漏洞隱患後率先向 Apache 基金會披露了該漏洞,未及時向中國工信部通報相關信息,未有效支撐工信部開展網路安全威脅和漏洞管理。經研究,工信部網路安全管理局決定暫停阿里雲作為上述合作單位 6 個月。暫停期滿後,根據阿里雲整改情況,研究恢復其上述合作單位。 根據工信部官網消息,工業和信息化部網路安全威脅和漏洞信息共享平台 12 月 9 日收到有關網路安全專業機構報告後,立即組織有關...
繼續訪問
智能輸液系統可能致命?黑客可以利用漏洞遠程式控制制輸注速度
輸液設備是一種常見的給葯裝置,在臨床上輸液皮條主要為一簡單中空管道,一次只能掛接一袋/瓶葯液,當葯液輸送完畢後,需要護士進行人為的更換另一袋/瓶葯液,由於患者多且每個患者均可能需要多袋液體,一起頻繁的更換使得醫護人員的工作量極大,同時在換葯過程中也很容易將需要按照一定順序輸入的葯袋搞混,使得輸液順序打亂或輸液葯袋/葯瓶搞錯,給病人帶來不可預知的危險。 因此隨著醫療行業的日漸發展,為了智...
繼續訪問
高通DSP晶元被曝6個漏洞事件引發的安全危機猜想
近日,國外知名安全研究機構Check Point發現,高通驍龍系列晶元的數字信號處理晶元(DSP)中存在大量漏洞,總數多達400多。研究人員表示,由於易受攻擊的DSP晶元「幾乎見於世界上所有的安卓手機上」,導致全球受此漏洞影響的機型超過40%,其中不乏有全球知名品牌手機。 報告中指出,攻擊者利用這些漏洞不僅可以將手機變成一個完美的監聽工具,而且還能夠使手機持續無響應,或者鎖定手機上的所有信息,使用戶永遠不可訪問。此外,攻擊者還可以利用惡意軟體和其他惡意代碼完全隱藏惡意活動。 目前,高通已發表聲明確認這些
繼續訪問
車輛碰撞起火事故的規律特點及常見起火原因 | 事故分析
來源:交通言究社導 語6月30日,內蒙古阿爾山市境內省道203線230公里處發生一起三車相撞並起火燃燒事故,造成6人死亡、38人受傷。近年來,因車輛碰撞導致起火燃燒的道路交通事故時有...
繼續訪問
熱門推薦 【網路攻防】常見的網路攻防技術——黑客攻防(通俗易懂版)
幾種常見的網路攻防技術 前言 一、SQL注入 二、XSS 攻擊 1.反射型 2.存儲型 三、CSRF 攻擊 四、DDoS 攻擊 五、DNS劫持 六、JSON 劫持 七、暴力破解 文章同樣適用於非專業的朋友們,全文通俗化表達,一定能找到你親身經歷過的網路攻擊(建議大家認真看完,這篇文章會刷新你對網路攻防的認知)。文章暫不談網路攻防具體操作實現過程,我們用通俗易懂的語言一塊聊聊——神秘的「網路攻防」
繼續訪問
模糊測試--強制性安全漏洞發掘
文檔分享地址鏈接:http://pan..com/share/link?shareid=2723797392&uk=2485812037 密碼:r43x 前 言 我知道"人類和魚類能夠和平共處" 。 --George W. Bush, 2000年9月29日 簡介 模糊測試的概念至少已經流傳了20年,但是直到最近才引起廣泛的關注。安全漏洞困擾了許多流行的客戶端應用程序
繼續訪問
疫情期間網路攻擊花樣翻新,全年 81748 起安全事件背後暗藏規律!
2020年是新冠疫情構成主旋律的一年,全球經濟形勢、科技發展乃至人們的日常工作生活都受到疫情影響。在疫情催化各行業數字化轉型更加依賴網路世界的同時,互聯網安全也受到了前所未有的挑戰。
繼續訪問
常見web安全隱患及解決方案
Abstract 有關於WEB服務以及web應用的一些安全隱患總結資料。 1. 常見web安全隱患 1.1.完全信賴用戶提交內容 開發人員決不能相信一個來自外部的數據。不管它來自用戶提交表單,文件系統的文件或者環境變數,任何數據都不能簡單的想當然的採用。所以用戶輸入必須進行驗證並將之格式化以保證安全。具體如下: ⑴ 始終對所有的用戶輸入執行驗證,...
繼續訪問
常見web安全隱患及解決方案(轉)
Abstract 有關於WEB服務以及web應用的一些安全隱患總結資料。 1. 常見web安全隱患 1.1.完全信賴用戶提交內容 開發人員決不能相信一個來自外部的數據。不管它來自用戶提交表單,文件系統的文件或者環境變數,任何數據都不能簡單的想當然的採用。所以用戶輸入必須進行驗證並將之格式化以保證安全。具體如...
繼續訪問
Unix主機安全漏洞分析及漏洞掃描器的設計與實現
Unix主機安全漏洞分析及漏洞掃描器的設計與實現2002年04月30日 16:00 來源:ChinaUnix文檔頻道 作者:HonestQiao 編輯:周榮茂級別: 初級薛靜鋒 ([email protected])北京理工大學計算機科學工程系2002 年 5 月 01 日自從1993年Internet上首次採用第一種圖形用戶界面NCSA MOSAIC以來,這一全球最...
繼續訪問
Web通用型漏洞簡介
本篇文章主要簡單介紹一下(我能想到的)Web通用型漏洞(以OWASP體系為主,非組件引起的,可能出現在任何語言任何環境中的web漏洞)的原理以及簡單的攻擊者利用方式。註:看本篇文章不會學到任何新技術,但如果本篇文章里存在任何你感興趣卻不了解的技術,可以去其他地方查閱資料。當然文章中也有很多錯誤,也希望能獲得指正。 文章目錄注入SQL注入基於利用方式分類union回顯注入報錯回顯注入布爾盲注延時盲注...
繼續訪問
如何使用人工智慧保護API的安全
數字轉型是基於一種可驅動新的操作模型的API,提供對業務邏輯、應用程序和數據的直接訪問。雖然這種訪問對於員工,合作夥伴和客戶來說非常方便,但它也使API成為黑客和惡意網路的攻擊目標。隨著越來越多的攻擊和漏洞,擴展安全性現在變得越來越重要。 現有的解決方案(例如訪問控制,速率限制等)提供基本保護,但不足以完全阻止惡意攻擊。今天的安全團隊需要識別並響應動態變化的攻擊,這些攻擊利用了各個API的自我漏
網路安全教程(一)
1-網路安全概述 1-1基礎概念 1-1-1計算機網路安全的定義 國際標准化組織ISO將計算機網路安全定義為:「為數據處理系統建立和採取的技術與管理的安全保護,保護網路系統的硬體,軟體及其系統中的數據不因偶然的或者惡意的原因而遭受到破壞、更改、泄露,系統連接可靠、正常的運行,網路服務不中斷。」 1-1-2網路安全的5項特徵 網路安全的5項特徵: 保密性:信息不泄露給非授權用戶、實體或過程,或供其利用的特性。 完整性:數據未經授權不能進行改變的特性。即信息在存儲或傳輸過程中保持不...
繼續訪問
最新發布 十年老碼農現身說法:凜冬將至,為什麼我不勸退互聯網
人生艱難,職業發展也不容易。這些除了依靠個人努力,更需要天時地利人和等外在條件。這不是個人做一點選擇就可以搞定的,勸退、轉行容易,但是想要因此一帆風順、平步青雲難。 人生不只是選擇題,不是會選就能贏,更何況很多人的選擇還是盲目做出的。我理解很多人因為行情不好而焦慮,因為焦慮而打退堂鼓。但相比於因為受到鼓動草草做出一個前途未
⑤ 一文講懂SQL子查詢
大家好,我是寧一。
今天講解SQL教程第18課:子查詢。
SQL語句可以嵌套,最常見的就是查詢語句的嵌套。
基本語法:
我們一般稱外面嵌套的語句為主查詢,裡面被嵌套的語句為子查詢,有時也會叫外查詢、內查詢,大家知道意思就好。
子查詢要用括弧括起來。子查詢不僅可以放在WHERE的後面,還可以放在SELECT、FROM的後面,我們一個個來講解。
1、子查詢+WHERE子句
SQL執行時,會先執行括弧內的子查詢,子查詢最常與WHERE子句結合使用。子查詢的結果作為WHERE子句的篩選條件,完成更復雜的數據檢索。
實例: 在Students表中,找出所有在"寧一"後面出生的學生。
實例解析: 需要先確定"寧一"的生日,再將生日作為WHERE篩選條件,得到最終數據。
第一步:找到"寧一"的生日
第二步:將生日作為WHERE篩選條件,得到最終數據,子查詢語句要用括弧括起來。
SELECT語句的子查詢經常與聚合函數結合使用。因為我們使用聚合函數的時候,記錄會合成一條,其它數據細節就不能顯示了。
比如: 我們想要查看學生表中所有的學生姓名、學生生日、學生的最大生日。
示例結果:
錯誤寫法:
像上面這樣寫是會報錯的,因為聚合函數與其他表中的列(Sname,Sage),同時放在SELECT的後面。需要用GROUP BY語句將這些表中的列(Sname,Sage)分組。
上面的語句後面加上 GROUP BY Sname,Sage 就可以了。
但是這樣寫,會將每組的數據聚合成1條數據,比如每組有3條數據,使用聚合函數MAX()+GROUP BY,最終每組只會顯示1條最大值的數據。
我們需要展現Students表中所有的學生,這樣寫不能滿足我們的需求。
正確寫法: 結合子查詢來實現。
子查詢與FROM子句結合使用,子查詢結果被當成了一個「表」,可以用SELECT語句做進一步的篩查。
比如:我們先寫一個SELECT查詢語句
將上面的查詢語句放在FROM的後面,則上面查詢到的結果,就會被當成一個「表」。
這里有一個特別要注意的地方,放在FROM後面的子查詢,必須要加別名。
復雜的子查詢再嵌套進 FROM 里會讓整個查詢看起來過於復雜,我們一般會將子查詢結果儲存為視圖,然後再直接使用視圖作為來源表,視圖會SQL高階課程中詳細講解。
其實子查詢就是查詢語句嵌套,沒有什麼新的東西,只是多了一個層級,由內向外地一層層梳理就會很清楚了。
作業: 結合Students表,從Teachers表中找出當班主任的老師(通過子查詢實現)。
作業解析: 先從Students表中,找出所有班主任的Tid並去重,將查詢結果作為篩選條件,放在WHERE語句中。
⑥ SQL怎麼用
掌握SQL四條最基本的數據操作語句:Insert,Select,Update和Delete。
練掌握SQL是資料庫用戶的寶貴財 富。掌握四條最基本的數據操作語句—SQL的核心功能—來依次介紹比較操作符、選擇斷言以及三值邏輯。當你完成這些學習後,顯然你已經開始算是精通SQL了。
在我們開始之前,先使用CREATE TABLE語句來創建一個表(如圖1所示)。DDL語句對資料庫對象如表、列和視進行定義。它們並不對表中的行進行處理,這是因為DDL語句並不處理資料庫中實際的數據。這些工作由另一類SQL語句—數據操作語言(DML)語句進行處理。
SQL中有四種基本的DML操作:INSERT,SELECT,UPDATE和DELETE。由於這是大多數SQL用戶經常用到的,我們有必要在此對它們進行一一說明。在圖1中我們給出了一個名為EMPLOYEES的表。其中的每一行對應一個特定的雇員記錄。請熟悉這張表,我們在後面的例子中將要用到它。
INSERT語句
用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員John Smith的記錄插入到本例的表中,可以使用如下語句:
INSERT INTO EMPLOYEES VALUES
('Smith','John','1980-06-10',
'Los Angles',16,45000);
通過這樣的INSERT語句,系統將試著將這些值填入到相應的列中。這些列按照我們創建表時定義的順序排列。在本例中,第一個值「Smith」將填到第一個列LAST_NAME中;第二個值「John」將填到第二列FIRST_NAME中……以此類推。
我們說過系統會「試著」將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字元串填入到類型為數字的列中),系統將拒絕這一次操作並返回一個錯誤信息。
如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因為SQL提供對事務的支持。一次事務將資料庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之為回退)到此事務之前的狀態。
回到原來的INSERT的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字元串和日期類型的值都要用單引號來區別。為了增加可讀性而在數字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。
同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標識符。
對於日期類型,我們必須使用SQL標准日期格式(yyyy-mm-dd),但是在系統中可以進行定義,以接受其他的格式。當然,2000年臨近,請你最好還是使用四位來表示年份。
既然你已經理解了INSERT語句是怎樣工作的了,讓我們轉到EMPLOYEES表中的其他部分:
INSERT INTO EMPLOYEES VALUES
('Bunyan','Paul','1970-07-04',
'Boston',12,70000);
INSERT INTO EMPLOYEES VALUES
('John','Adams','1992-01-21',
'Boston',20,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Pocahontas','1976-04-06',
'Los Angles',12,100000);
INSERT INTO EMPLOYEES VALUES
('Smith','Bessie','1940-05-02',
'Boston',5,200000);
INSERT INTO EMPLOYEES VALUES
('Jones','Davy','1970-10-10',
'Boston',8,45000);
INSERT INTO EMPLOYEES VALUES
('Jones','Indiana','1992-02-01',
'Chicago',NULL,NULL);
在最後一項中,我們不知道Jones先生的工薪級別和年薪,所以我們輸入NULL(不要引號)。NULL是SQL中的一種特殊情況,我們以後將進行詳細的討論。現在我們只需認為NULL表示一種未知的值。
有時,像我們剛才所討論的情況,我們可能希望對某一些而不是全部的列進行賦值。除了對要省略的列輸入NULL外,還可以採用另外一種INSERT語句,如下:
INSERT INTO EMPLOYEES(
FIRST_NAME, LAST_NAME,
HIRE_DATE, BRANCH_OFFICE)
VALUE(
'Indiana','Jones',
'1992-02-01','Indianapolis');
這樣,我們先在表名之後列出一系列列名。未列出的列中將自動填入預設值,如果沒有設置預設值則填入NULL。請注意我們改變了列的順序,而值的順序要對應新的列的順序。如果該語句中省略了FIRST_NAME和LAST_NAME項(這兩項規定不能為空),SQL操作將失敗。
讓我們來看一看上述INSERT語句的語法圖:
INSERT INTO table
[(column { ,column})]
VALUES
(columnvalue [{,columnvalue}]);
和前一篇文章中一樣,我們用方括弧來表示可選項,大括弧表示可以重復任意次數的項(不能在實際的SQL語句中使用這些特殊字元)。VALUE子句和可選的列名列表中必須使用圓括弧。
SELECT語句
SELECT語句可以從一個或多個表中選取特定的行和列。因為查詢和檢索數據是資料庫管理中最重要的功能,所以SELECT語句在SQL中是工作量最大的部分。實際上,僅僅是訪問資料庫來分析數據並生成報表的人可以對其他SQL語句一竅不通。
SELECT語句的結果通常是生成另外一個表。在執行過程中系統根據用戶的標准從資料庫中選出匹配的行和列,並將結果放到臨時的表中。在直接SQL(direct SQL)中,它將結果顯示在終端的顯示屏上,或者將結果送到列印機或文件中。也可以結合其他SQL語句來將結果放到一個已知名稱的表中。
SELECT語句功能強大。雖然表面上看來它只用來完成本文第一部分中提到的關系代數運算「選擇」(或稱「限制」),但實際上它也可以完成其他兩種關系運算—「投影」和「連接」,SELECT語句還可以完成聚合計算並對數據進行排序。
SELECT語句最簡單的語法如下:
SELECT columns FROM tables;
當我們以這種形式執行一條SELECT語句時,系統返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個結果表。這就是實現關系投影運算的一個形式。
讓我們看一下使用圖1中EMPLOYEES表的一些例子(這個表是我們以後所有SELECT語句實例都要使用的。而我們在圖2和圖3中給出了查詢的實際結果。我們將在其他的例子中使用這些結果)。
假設你想查看雇員工作部門的列表。那下面就是你所需要編寫的SQL查詢:
SELECT BRANCH_OFFICE FROM EMPLOYEES;
以上SELECT語句的執行將產生如圖2中表2所示的結果。
由於我們在SELECT語句中只指定了一個列,所以我們的結果表中也只有一個列。注意結果表中具有重復的行,這是因為有多個雇員在同一部門工作(記住SQL從所選的所有行中將值返回)。要消除結果中的重復行,只要在SELECT語句中加上DISTINCT子句:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES;
這次查詢的結果如表3所示。
現在已經消除了重復的行,但結果並不是按照順序排列的。如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果:
SELECT DISTINCT BRANCH_OFFICE
FROM EMPLOYEES
ORDER BY BRANCH_OFFICE ASC;
這一查詢的結果如表4所示。請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的,這就是我們想要對其進行排序的列。為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序,即使它們並不顯示出來。列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列。如果你希望以降序排列,那麼可以用關鍵字DESC。
同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序;並不影響原來的表。
假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表。除了工資括弧中的內容,我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表。以下是你將要用到的語句:
SELECT BRANCH_OFFICE,FIRST_NAME,
LAST_NAME,SALARY,HIRE_DATE
FROM EMPLOYEES
ORDER BY SALARY DESC,
HIRE_DATE DESC;
這里我們進行了多列的選擇和排序。排序的優先順序由語句中的列名順序所決定。SQL將先對列出的第一個列進行排序。如果在第一個列中出現了重復的行時,這些行將被按照第二列進行排序,如果在第二列中又出現了重復的行時,這些行又將被按照第三列進行排序……如此類推。這次查詢的結果如表5所示。
將一個很長的表中的所有列名寫出來是一件相當麻煩的事,所以SQL允許在選擇表中所有的列時使用*號:
SELECT * FROM EMPLOYEES;
這次查詢返回整個EMPLOYEES表,如表1所示。
下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項,允許在其中選擇一項。):
SELECT [DISTINCT]
(column [{, columns}])| *
FROM table [ {, table}]
[ORDER BY column [ASC] | DESC
[ {, column [ASC] | DESC }]];
定義選擇標准
在我們目前所介紹的SELECT語句中,我們對結果表中的列作出了選擇但返回的是表中所有的行。讓我們看一下如何對SELECT語句進行限制使得它只返回希望得到的行:
SELECT columns FROM tables [WHERE predicates];
WHERE子句對條件進行了設置,只有滿足條件的行才被包括到結果表中。這些條件由斷言(predicate)進行指定(斷言指出了關於某件事情的一種可能的事實)。如果該斷言對於某個給定的行成立,該行將被包括到結果表中,否則該行被忽略。在SQL語句中斷言通常通過比較來表示。例如,假如你需要查詢所有姓為Jones的職員,則可以使用以下SELECT語句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones';
LAST_NAME = 'Jones'部分就是斷言。在執行該語句時,SQL將每一行的LAST_NAME列與「Jones」進行比較。如果某一職員的姓為「Jones」,即斷言成立,該職員的信息將被包括到結果表中(見表6)。
使用最多的六種比較
我們上例中的斷言包括一種基於「等值」的比較(LAST_NAME = 'Jones'),但是SQL斷言還可以包含其他幾種類型的比較。其中最常用的為:
等於 =
不等於 <>
小於 <
大於 >
小於或等於 <=
大於或等於 >=
下面給出了不是基於等值比較的一個例子:
SELECT * FROM EMPLOYEES
WHERE SALARY > 50000;
這一查詢將返回年薪高於$50,000.00的職員(參見表7)。
邏輯連接符
有時我們需要定義一條不止一種斷言的SELECT語句。舉例來說,如果你僅僅想查看Davy Jones的信息的話,表6中的結果將是不正確的。為了進一步定義一個WHERE子句,用戶可以使用邏輯連接符AND,OR和NOT。為了只得到職員Davy Jones的記錄,用戶可以輸入如下語句:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones' AND FIRST_NAME = 'Davy';
在本例中,我們通過邏輯連接符AND將兩個斷言連接起來。只有兩個斷言都滿足時整個表達式才會滿足。如果用戶需要定義一個SELECT語句來使得當其中任何一項成立就滿足條件時,可以使用OR連接符:
SELECT * FROM EMPLOYEES
WHERE LAST_NAME = 'Jones' OR LAST_NAME = 'Smith';
有時定義一個斷言的最好方法是通過相反的描述來說明。如果你想要查看除了Boston辦事處的職員以外的其他所有職員的信息時,你可以進行如下的查詢:
SELECT * FROM EMPLOYEES
WHERE NOT(BRANCH_OFFICE = 'Boston');
關鍵字NOT後面跟著用圓括弧括起來的比較表達式。其結果是對結果取否定。如果某一職員所在部門的辦事處在Boston,括弧內的表達式返回true,但是NOT操作符將該值取反,所以該行將不被選中。
斷言可以與其他的斷言嵌套使用。為了保證它們以正確的順序進行求值,可以用括弧將它們括起來:
SELECT * FROM EMPLOYEES
WHERE (LAST_NAME = 'Jones'
AND FIRST_NAME = 'Indiana')
OR (LAST_NAME = 'Smith'
AND FIRST_NAME = 'Bessie');
SQL沿用數學上標準的表達式求值的約定—圓括弧內的表達式將最先進行求值,其他表達式將從左到右進行求值。
以上對邏輯連接符進行了說明,在對下面的內容進行說明之前,我們再一次對SELECT語句的語法進行更新:
SELECT [DISTINCT]
(column [{, column } ] )| *
FROM table [ { , table} ]
[ORDER BY column [ASC] | [DESC
[{ , column [ASC] | [DESC } ] ]
WHERE predicate [ { logical-connector predicate } ];
NULL和三值邏輯
在SQL中NULL是一個復雜的話題,關於NULL的詳細描述更適合於在SQL的高級教程而不是現在的入門教程中進行介紹。但由於NULL需要進行特殊處理,並且你也很可能會遇到它,所以我們還是簡略地進行一下說明。
首先,在斷言中進行NULL判斷時需要特殊的語法。例如,如果用戶需要顯示所有年薪未知的職員的全部信息,用戶可以使用如下SELECT語句:
SELECT * FROM EMPLOYEES
WHERE SALARY IS NULL;
相反,如果用戶需要所有已知年薪數據的職員的信息,你可以使用以下語句:
SELECT * FROM EMPLOYEES
WHERE SALARY IS NOT NULL;
請注意我們在列名之後使用了關鍵字IS NULL或IS NOT NULL,而不是標準的比較形式:COLUMN = NULL、COLUMN <> NULL或是邏輯操作符NOT(NULL)。
這種形式相當簡單。但當你不明確地測試NULL(而它們確實存在)時,事情會變得很混亂。
例如,回過頭來看我們圖1中的EM-PLOYEES表,可以看到Indiana Jones的工薪等級或年薪值都是未知的。這兩個列都包含NULL。可以想像運行如下的查詢:
SELECT * FROM EMPLOYEES
WHERE GRADE <= SALARY;
此時,Indiana Jones應該出現在結果表中。因為NULL都是相等的,所以可以想像它們是能夠通過GRADE小於等於SALARY的檢查的。這其實是一個毫無疑義的查詢,但是並沒有關系。SQL允許進行這樣的比較,只要兩個列都是數字類型的。然而,Indiana Jones並沒有出現在查詢的結果中,為什麼?
正如我們早先提到過的,NULL表示未知的值(而不是象某些人所想像的那樣表示一個為NULL的值)。對於SQL來說意味著這個值是未知的,而只要這個值為未知,就不能將其與其他值比較(即使其他值也是NULL)。所以SQL允許除了在true 和false之外還有第三種類型的真值,稱之為「非確定」(unknown)值。
如果比較的兩邊都是NULL,整個斷言就被認為是非確定的。將一個非確定斷言取反或使用AND或OR與其他斷言進行合並之後,其結果仍是非確定的。由於結果表中只包括斷言值為「真」的行,所以NULL不可能滿足該檢查。從而需要使用特殊的操作符IS NULL和IS NOT NULL。
UPDATE語句
UPDATE語句允許用戶在已知的表中對現有的行進行修改。
例如,我們剛剛發現Indiana Jones的等級為16,工資為$40,000.00,我們可以通過下面的SQL語句對資料庫進行更新(並清除那些煩人的NULL)。
UPDATE EMPLOYEES
SET GRADE = 16, SALARY = 40000
WHERE FIRST_NAME = 'Indiana'
AND LAST_NAME = 'Jones';
上面的例子說明了一個單行更新,但是UPDATE語句可以對多行進行操作。滿足WHERE條件的所有行都將被更新。如果,你想讓Boston辦事處中的所有職員搬到New York,你可以使用如下語句:
UPDATE EMPLOYEES
SET BRANCH_OFFICE = 'New York'
WHERE BRANCH_OFFICE = 'Boston';
如果忽略WHERE子句,表中所有行中的部門值都將被更新為'New York'。
UPDATE語句的語法流圖如下面所示:
UPDATE table
SET column = value [{, column = value}]
[ WHERE predicate [ { logical-connector predicate}]];
DELETE語句
DELETE語句用來刪除已知表中的行。如同UPDATE語句中一樣,所有滿足WHERE子句中條件的行都將被刪除。由於SQL中沒有UNDO語句或是「你確認刪除嗎?」之類的警告,在執行這條語句時千萬要小心。如果決定取消Los Angeles辦事處並解僱辦事處的所有職員,這一卑鄙的工作可以由以下這條語句來實現:
DELETE FROM EMPLOYEES
WHERE BRANCH_OFFICE = 'Los Angeles';
如同UPDATE語句中一樣,省略WHERE子句將使得操作施加到表中所有的行。
DELETE語句的語法流圖如下面所示:
DELETE FROM table
[WHERE predicate [ { logical-connector predicate} ] ];
現在我們完成了數據操作語言(DML)的主要語句的介紹。我們並沒有對SQL能完成的所有功能進行說明。SQL還提供了許多的功能,如求平均值、求和以及其他對表中數據的計算,此外SQL還能完成從多個表中進行查詢(多表查詢,或稱之為連接)的工作。這種語言還允許你使用GRANT和REVOKE命令控制使用者的數據訪問許可權
⑦ 初學者自學SQL有什麼好書推薦
【導讀】隨著互聯網的發展,數據分析已經成了非常熱門的職業,大數據分析師也成了社會打工人趨之若鶩的職業,不僅高薪還沒有很多職場微世界的繁瑣事情,不過要想做好數據分析工作也並不簡單,參看一些好書,對行進數據分析會更有幫助!那麼初學者自學SQL有什麼好書推薦呢?
SQL
1.《SQL 從入門到知曉》
學習 SQL 的入門書,SQL 是個性價比很高的技能,簡略而強健。任何想進一步跋涉自己數據分析技能的產品/運營/分析師,都主張點亮這個技能點。
2.《SQL必知必會》
本書是深受世界各地讀者歡迎的SQL經典暢銷書,內容豐厚,文字簡練明快,針對Oracle、SQL
Server、MySQL、DB2、PostgreSQL、SQLite等各種幹流資料庫供應了許多簡明的實例。與其他同類圖書不同,它沒有過多論說資料庫基礎理論,而是專門針對一線軟體開發人員,直接從SQL
SELECT開端,敘說實踐工作環境中最常用和最必需的SQL知識,有用性極強。通過本書,讀者能夠從沒有多少SQL經歷的新手,活絡編寫出世界級的SQL!
3.《SQL基礎教程》
本書介紹了聯絡資料庫以及用來操作聯絡資料庫的SQL語言的運用方法,供應了許多的示常式序和詳實的操作進程說明,讀者能夠親主動手處理詳細問題,故步自封地掌握SQL的基礎知識和技巧,真實跋涉自身的編程才調。在每章結束備有習題,用來查驗讀者對該章內容的了解程度。其他本書還將重要知識點總結為「規律」,便當我們隨時查閱。
4.《MySQL必知必會》
本書從介紹簡略的數據檢索開端,逐步深化一些雜亂的內容,包含聯合的運用、子查詢、正則表達式和根據全文本的查找、存儲進程、游標、觸發器、表綁縛,等等。通過要害超卓的章節,條理清楚、體系而扼要地敘說了讀者應該掌握的知識,使他們不經意間立刻功力大增。
5. 《深化淺出SQL》
帶你進入SQL語言的心臟地帶,從運用INSERT和SELECT這些根柢的查詢語法到運用子查詢(subquery)、聯接(join)和業務(transaction)這樣的中心技能來操作資料庫。你將不只能夠了解高效資料庫規劃和創建,還能像一個專家那樣查詢、歸一(normalizing)和聯接數據。你將成為數據的真實主人。
以上就是小編今天給大家整理分享關於「初學者自學SQL有什麼好書推薦?」的相關內容希望對大家有所幫助。小編認為要想在大數據行業有所建樹,需要考取部分含金量高的數據分析師證書,一直學習,這樣更有核心競爭力與競爭資本。
⑧ 網站安全狗sql注入攻擊與防禦怎麼設置
網站安全狗sql注入攻擊與防禦怎麼設置?所謂SQL注入,就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。SQL防護功能主要包括檢測URL長度功能和注入的防護規則兩部分。下面我們通過實際的攻擊實例來闡述該功能:
網站安全狗下載:網站安全狗Apache版|網站安全狗IIS版
網站安全狗sql注入攻擊與防禦設置教程
1.
超長的URL鏈接測試
過長的URL對於網站來說有什麼危害呢?在網路上,曾有人對過長的URL進行測試發現,過長的URL會對流量產生影響。特別是當如果代碼里的超鏈接寫的是長URL時,就會導致網頁內容變大,嚴重影響網站出口寬頻的流量。
網站安全狗SQL注入防護功能,可以對URL長度進行設置並且將這個上限值設為通用指標來檢測URL長度,當然用戶可根據情況自己設定上限值(設置完後記得保存哦)。
具體安全狗設置和測試結果分別如下圖所示:
圖1
URL防護規則
當IE地址欄瀏覽長度超過設置的值,網站安全狗就會進行攔截,攔截頁面如下:
圖2
長鏈接測試實例
同時,通過網站安全狗的防護日誌,我們可以查看到相對應的攻擊防禦成功的日誌記錄,截圖如下:
圖3
長鏈接防護日誌
_#網站安全狗sql注入攻擊與防禦怎麼設置#_
2.網站安全狗的設計是根據攻擊特徵庫,對用戶輸入進行過濾,從而達到防護SQL注入的目的。
我們以官方第一條默認防護規則為例通過相應的攻擊實例來介紹該功能設置。
(1)當我們設置SQL攔截規則的「防止and
or方式注入」的「檢測URL」功能為「開啟」時候,截圖如下:
圖4
設置SQL攔截規則
然後我們進行SQL注入,在IE上輸入參數,進行SQL注入頁面如下:
圖5
SQL注入攻擊
由於我們已經開啟了SQL攔截規則的「防止and
or方式注入」的「檢測URL」功能,當進行類似SQL注入時候就會彈出被網站安全狗成功攔截的信息,截圖如下:
圖6
攔截提示信息
同時在網站安全狗的防護日誌中會生成對應的攻擊防禦成功的日誌記錄,截圖如下:
圖7
防護日誌
(2)當我們把SQL攔截規則的「防止and
or方式注入」的「檢測COOKIE」功能設置為「開啟」時候,截圖如下:
圖8
設置SQL防護規則
通過cookie方式進行SQL注入,注入方式如下圖所示:
圖9
cookie注入成功截圖
_網站安全狗sql注入攻擊與防禦怎麼設置#_
「開啟」SQL攔截規則的「防止and
or方式注入」的「檢測COOKIE」功能後,當進行類似SQL注入時候就會彈出被網站安全狗成功攔截的信息,截圖如下:
圖10
攔截提示信息
同時在網站安全狗的防護日誌中會生成對應的攻擊防禦成功的日誌記錄:
圖11
防護日誌
(3)把SQL攔截規則的「防止and
or方式注入」的「檢測POST內容」功能設置為「開啟」,截圖如下:
圖12
開啟檢測POST
「開啟」之後,通過POST方式進行SQL注入,測試方式如下圖所示:
圖13
通過POST方式SQL注入
由於已經「開啟」了SQL攔截規則的「防止and
or方式注入」的「檢測POST內容」功能,這時如果發現類似SQL注入的時候,就會彈出被網站安全狗的攔截信息。截圖如下:
圖14
攔截提示信息
同時在網站安全狗的防護日誌中會生成對應的攻擊防禦成功的日誌記錄,截圖如下:
圖15
防護日誌
以上是網站安全狗sql注入攻擊與防禦設置教程,希望對你有幫助!