mysql數據庫重點知識(mysql知識點匯總)

本文目錄一覽:

Mysql數據庫的基本問題

親,你看看你這句COUNT(id) as num,SUM(num) as zongshu

你確定,num是你數據庫里的字段?如果是字段你為什麼要 as別名成num

如果num是別名,你SUM(num) as zongshu 。就會提示錯誤

因為num根本就不是字段,而只是個你臨時命名的別名,所以報錯是理所當然的。

能理解嗎?不懂繼續追問

sql數據庫基礎知識

sql數據庫基礎知識:

一、SQL 概述

1、什麼是 SQL

SQL(Structured Query Language)是“結構化查詢語言”,它是對關係型數據庫的操作語言。它可以應用到所有關係型數據庫中,例如:MySQL、Oracle、SQL Server 等。SQL 標準(ANSI/ISO)有:SQL-92:1992 年發布的 SQL 語言准;SQL:1999:1999 年發布的 SQL 語言標籤;SQL:2003:2003 年發布的 SQL 語言標籤;這些標準就與 JDK 的版本一樣,在新的版本中總要有一些語法的變化。不同時期的數據庫對不同標準做了實現。

雖然 SQL 可以用在所有關係型數據庫中,但很多數據庫還都有標準之後的一些語法,我們可以稱之為“方言”。例如 MySQL 中的 LIMIT 語句就是 MySQL 獨有的方言,其它數據庫都不支持!當然,Oracle 或 SQL Server 都有自己的方言。

MySQL知識點總結

只要字段值還可以繼續拆分,就不滿足第一範式。

範式設計得越詳細,對某些實際操作可能會更好,但並非都有好處,需要對項目的實際情況進行設定。

在滿足第一範式的前提下,其他列都必須完全依賴於主鍵列。 如果出現不完全依賴,只可能發生在聯合主鍵的情況下:

實際上,在這張訂單表中,product_name 只依賴於 product_id ,customer_name 只依賴於 customer_id。也就是說,product_name 和 customer_id 是沒用關係的,customer_name 和 product_id 也是沒有關係的。

這就不滿足第二範式:其他列都必須完全依賴於主鍵列!

拆分之後,myorder 表中的 product_id 和 customer_id 完全依賴於 order_id 主鍵,而 product 和 customer 表中的其他字段又完全依賴於主鍵。滿足了第二範式的設計!

在滿足第二範式的前提下,除了主鍵列之外,其他列之間不能有傳遞依賴關係。

表中的 customer_phone 有可能依賴於 order_id 、 customer_id 兩列,也就不滿足了第三範式的設計:其他列之間不能有傳遞依賴關係。

修改後就不存在其他列之間的傳遞依賴關係,其他列都只依賴於主鍵列,滿足了第三範式的設計!

查詢每門課的平均成績。

查詢 score 表中至少有 2 名學生選修,並以 3 開頭的課程的平均分數。

分析表發現,至少有 2 名學生選修的課程是 3-105 、3-245 、6-166 ,以 3 開頭的課程是 3-105 、3-245。也就是說,我們要查詢所有 3-105 和 3-245 的 degree 平均分。

查詢所有學生的 name,以及該學生在 score 表中對應的 c_no 和 degree 。

通過分析可以發現,只要把 score 表中的 s_no 字段值替換成 student 表中對應的 name 字段值就可以了,如何做呢?

查詢所有學生的 no 、課程名稱 ( course 表中的 name ) 和成績 ( score 表中的 degree ) 列。

只有 score 關聯學生的 no ,因此只要查詢 score 表,就能找出所有和學生相關的 no 和 degree :

然後查詢 course 表:

只要把 score 表中的 c_no 替換成 course 表中對應的 name 字段值就可以了。

查詢所有學生的 name 、課程名 ( course 表中的 name ) 和 degree 。

只有 score 表中關聯學生的學號和課堂號,我們只要圍繞着 score 這張表查詢就好了。

只要把 s_no 和 c_no 替換成 student 和 srouse 表中對應的 name 字段值就好了。

首先把 s_no 替換成 student 表中的 name 字段:

再把 c_no 替換成 course 表中的 name 字段:

查詢 95031 班學生每門課程的平均成績。

在 score 表中根據 student 表的學生編號篩選出學生的課堂號和成績:

這時只要將 c_no 分組一下就能得出 95031 班學生每門課的平均成績:

查詢在 3-105 課程中,所有成績高於 109 號同學的記錄。

首先篩選出課堂號為 3-105 ,在找出所有成績高於 109 號同學的的行。

查詢所有成績高於 109 號同學的 3-105 課程成績記錄。

查詢所有和 101 、108 號學生同年出生的 no 、name 、birthday 列。

查詢 ‘張旭’ 教師任課的學生成績表。

首先找到教師編號:

通過 sourse 表找到該教師課程號:

通過篩選出的課程號查詢成績表:

查詢某選修課程多於5個同學的教師姓名。

首先在 teacher 表中,根據 no 字段來判斷該教師的同一門課程是否有至少5名學員選修:

查看和教師編號有有關的表的信息:

我們已經找到和教師編號有關的字段就在 course 表中,但是還無法知道哪門課程至少有5名學生選修,所以還需要根據 score 表來查詢:

根據篩選出來的課程號,找出在某課程中,擁有至少5名學員的教師編號:

在 teacher 表中,根據篩選出來的教師編號找到教師姓名:

查詢 “計算機系” 課程的成績表。

思路是,先找出 course 表中所有 計算機系 課程的編號,然後根據這個編號查詢 score 表。

查詢 計算機系 與 電子工程系 中的不同職稱的教師。

查詢課程 3-105 且成績 至少 高於 3-245 的 score 表。

查詢課程 3-105 且成績高於 3-245 的 score 表。

查詢某課程成績比該課程平均成績低的 score 表。

查詢所有任課 ( 在 course 表裡有課程 ) 教師的 name 和 department 。

查詢 student 表中至少有 2 名男生的 class 。

查詢 student 表中不姓 “王” 的同學記錄。

查詢 student 表中每個學生的姓名和年齡。

查詢 student 表中最大和最小的 birthday 值。

以 class 和 birthday 從大到小的順序查詢 student 表。

查詢 “男” 教師及其所上的課程。

查詢最高分同學的 score 表。

查詢和 “李軍” 同性別的所有同學 name 。

查詢和 “李軍” 同性別且同班的同學 name 。

查詢所有選修 “計算機導論” 課程的 “男” 同學成績表。

需要的 “計算機導論” 和性別為 “男” 的編號可以在 course 和 student 表中找到。

建立一個 grade 表代表學生的成績等級,並插入數據:

查詢所有學生的 s_no 、c_no 和 grade 列。

思路是,使用區間 ( BETWEEN ) 查詢,判斷學生的成績 ( degree ) 在 grade 表的 low 和 upp 之間。

準備用於測試連接查詢的數據:

分析兩張表發現,person 表並沒有為 cardId 字段設置一個在 card 表中對應的 id 外鍵。如果設置了的話,person 中 cardId 字段值為 6 的行就插不進去,因為該 cardId 值在 card 表中並沒有。

要查詢這兩張表中有關係的數據,可以使用 INNER JOIN ( 內連接 ) 將它們連接在一起。

完整顯示左邊的表 ( person ) ,右邊的表如果符合條件就顯示,不符合則補 NULL 。

完整顯示右邊的表 ( card ) ,左邊的表如果符合條件就顯示,不符合則補 NULL 。

完整顯示兩張表的全部數據。

在 MySQL 中,事務其實是一個最小的不可分割的工作單元。事務能夠 保證一個業務的完整性 。

比如我們的銀行轉賬:

在實際項目中,假設只有一條 SQL 語句執行成功,而另外一條執行失敗了,就會出現數據前後不一致。

因此,在執行多條有關聯 SQL 語句時, 事務 可能會要求這些 SQL 語句要麼同時執行成功,要麼就都執行失敗。

在 MySQL 中,事務的 自動提交 狀態默認是開啟的。

自動提交的作用 :當我們執行一條 SQL 語句的時候,其產生的效果就會立即體現出來,且不能 回滾 。

什麼是回滾?舉個例子:

可以看到,在執行插入語句後數據立刻生效,原因是 MySQL 中的事務自動將它 提交 到了數據庫中。那麼所謂 回滾 的意思就是,撤銷執行過的所有 SQL 語句,使其回滾到 最後一次提交 數據時的狀態。

在 MySQL 中使用 ROLLBACK 執行回滾:

由於所有執行過的 SQL 語句都已經被提交過了,所以數據並沒有發生回滾。那如何讓數據可以發生回滾?

將自動提交關閉後,測試數據回滾:

那如何將虛擬的數據真正提交到數據庫中?使用 COMMIT :

事務的實際應用 ,讓我們再回到銀行轉賬項目:

這時假設在轉賬時發生了意外,就可以使用 ROLLBACK 回滾到最後一次提交的狀態:

這時我們又回到了發生意外之前的狀態,也就是說,事務給我們提供了一個可以反悔的機會。假設數據沒有發生意外,這時可以手動將數據真正提交到數據表中:COMMIT 。

事務的默認提交被開啟 ( @@AUTOCOMMIT = 1 ) 後,此時就不能使用事務回滾了。但是我們還可以手動開啟一個事務處理事件,使其可以發生回滾:

仍然使用 COMMIT 提交數據,提交後無法再發生本次事務的回滾。

事務的四大特徵:

事務的隔離性可分為四種 ( 性能從低到高 ) :

查看當前數據庫的默認隔離級別:

修改隔離級別:

測試 READ UNCOMMITTED ( 讀取未提交 ) 的隔離性:

由於小明的轉賬是在新開啟的事務上進行操作的,而該操作的結果是可以被其他事務(另一方的淘寶店)看見的,因此淘寶店的查詢結果是正確的,淘寶店確認到賬。但就在這時,如果小明在它所處的事務上又執行了 ROLLBACK 命令,會發生什麼?

這就是所謂的 臟讀 ,一個事務讀取到另外一個事務還未提交的數據。這在實際開發中是不允許出現的。

把隔離級別設置為 READ COMMITTED :

這樣,再有新的事務連接進來時,它們就只能查詢到已經提交過的事務數據了。但是對於當前事務來說,它們看到的還是未提交的數據,例如:

但是這樣還有問題,那就是假設一個事務在操作數據時,其他事務干擾了這個事務的數據。例如:

雖然 READ COMMITTED 讓我們只能讀取到其他事務已經提交的數據,但還是會出現問題,就是 在讀取同一個表的數據時,可能會發生前後不一致的情況。* 這被稱為* 不可重複讀現象 ( READ COMMITTED ) 。

將隔離級別設置為 REPEATABLE READ ( 可被重複讀取 ) :

測試 REPEATABLE READ ,假設在兩個不同的連接上分別執行 START TRANSACTION :

當前事務開啟後,沒提交之前,查詢不到,提交後可以被查詢到。但是,在提交之前其他事務被開啟了,那麼在這條事務線上,就不會查詢到當前有操作事務的連接。相當於開闢出一條單獨的線程。

無論小張是否執行過 COMMIT ,在小王這邊,都不會查詢到小張的事務記錄,而是只會查詢到自己所處事務的記錄:

這是 因為小王在此之前開啟了一個新的事務 ( START TRANSACTION ) * ,那麼* 在他的這條新事務的線上,跟其他事務是沒有聯繫的 ,也就是說,此時如果其他事務正在操作數據,它是不知道的。

然而事實是,在真實的數據表中,小張已經插入了一條數據。但是小王此時並不知道,也插入了同一條數據,會發生什麼呢?

報錯了,操作被告知已存在主鍵為 6 的字段。這種現象也被稱為 幻讀,一個事務提交的數據,不能被其他事務讀取到 。

顧名思義,就是所有事務的 寫入操作 全都是串行化的。什麼意思?把隔離級別修改成 SERIALIZABLE :

還是拿小張和小王來舉例:

此時會發生什麼呢?由於現在的隔離級別是 SERIALIZABLE ( 串行化 ) ,串行化的意思就是:假設把所有的事務都放在一個串行的隊列中,那麼所有的事務都會按照 固定順序執行 ,執行完一個事務後再繼續執行下一個事務的 寫入操作 ( 這意味着隊列中同時只能執行一個事務的寫入操作 ) 。

根據這個解釋,小王在插入數據時,會出現等待狀態,直到小張執行 COMMIT 結束它所處的事務,或者出現等待超時。

轉載:

有數據庫基礎,如何快速精通mysql?

本周內容:455字

閱讀時間:3~5分鐘

前言

MySQL 是一款免費開源、小型、關係型數據庫管理系統。隨着該數據庫功能不斷完善、性能的不斷提高,可靠性不斷增強。它雖然是免費,但與其他商業數據庫一樣,具有數據庫系統的通用性,提供了數據庫的存取、增加、修改、刪除或更加複雜的操作。同時MySQL所使用的 SQL 語言是用於訪問數據庫的最常用標準化語言。MySQL 軟件採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站數據庫。

下面開始介紹搭建的過程

一、準備環境

系統:

Centos 6.5_64

二、安裝過程

1.yum -y install mysql-server

2.設置服務開機啟動

3.啟動數據庫服務

4.設置MySQLroot用戶

5.設置root用戶密碼為

6.登錄數據庫

7.創建數據庫test1

8.建立數據庫表格,xm姓名,xb性別,csny出生年齡

9增加數據庫條目記錄,姓名:李一,性別:男年齡:1988.9.01

書籍推薦

《MySQL 5.7從入門到精通》

本書主要包括MySQL的安裝與配置、數據庫的創建、數據表的創建、數據類型和運算符、MySQL函數、查詢數據、數據表的操作(插入、更新與刪除數據)、索引、存儲過程和函數、視圖、觸發器、用戶管理、數據備份與恢復、日誌以及性能優化等。最後通過兩個綜合案例的數據庫設計,進一步講述MySQL在實際工作中的應用。

本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。本書共有480個實例和14個綜合案例,還有大量的經典習題。下載文件中贈送了近20小時培訓班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個數據庫操作的方法和技巧。同時下載文件中還提供了本書所有例子的源代碼,讀者可以直接查看和調用。

本書適合MySQL數據庫初學者、MySQL數據庫開發人員和MySQL數據庫管理員,同時也能作為高等院校相關專業師生的教學用書。

讓閱讀成為習慣

作為一個網頁設計工作者,需要了解和掌握關於Mysql數據庫的哪些知識?

網頁設計你不需要了解

mysql數據庫

,如果你做的是設計的話

只需要靈感

然後用

ps設計

出網頁來就可以了,如果你做後台開發,也不需要很了解mysql數據庫,剛開始只需要知道怎麼連接數據庫,查詢

插入

修改

刪除數據庫中的東西就可以,等你做後台開發到了大師級別的時候,你可以再仔細學學mysql數據庫的優化什麼的。對於一個初學者,只需要了解數據庫就是存數據的地方就可以了

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/129126.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:26
下一篇 2024-10-03 23:26

相關推薦

  • Python 常用數據庫有哪些?

    在Python編程中,數據庫是不可或缺的一部分。隨着互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的數據庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝數據庫方案

    本文將介紹在openeuler操作系統中安裝數據庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟件源 sudo…

    編程 2025-04-29
  • 數據庫第三範式會有刪除插入異常

    如果沒有正確設計數據庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係數據庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的數據庫存儲引擎

    本文將介紹兩款高性能的數據庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入數據庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的數據庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • Think-ORM數據模型及數據庫核心操作

    本文主要介紹Think-ORM數據模型建立和數據庫核心操作。 一、模型定義 Think-ORM是一個開源的ORM框架,用於簡化在PHP應用中(特別是ThinkPHP)與關係數據庫之…

    編程 2025-04-27
  • 如何使用Python將CSV文件導入到數據庫

    CSV(Comma Separated Values)是一種可讀性高、易於編輯與導入導出的文件格式,常用於存儲表格數據。在數據處理過程中,我們有時需要將CSV文件導入到數據庫中進行…

    編程 2025-04-27
  • Python 知乎:一個全新的知識分享平台

    Python 知乎,是一個全新的知識分享平台,它將知識分享變得更加輕鬆簡單,為用戶提供了一個學習、交流和分享的社區平台。Python 知乎致力於幫助用戶分享、發現和表達他們的見解,…

    編程 2025-04-27
  • Python批量導入數據庫

    本文將介紹Python中如何批量導入數據庫。首先,對於數據分析和挖掘領域,數據庫中批量導入數據是一個必不可少的過程。這種高效的導入方式可以極大地提高數據挖掘、機器學習等任務的效率。…

    編程 2025-04-27
  • Activiti 6自動部署後不生成數據庫act_hi_*的解決方法

    本文將從多個方面詳細闡述Activiti 6自動部署後不生成數據庫act_hi_*的問題,並提供對應的代碼示例。 一、問題分析 在使用Activiti 6部署流程後,我們發現act…

    編程 2025-04-27

發表回復

登錄後才能評論