MySQL入門

来源:http://www.cnblogs.com/zhang-can/archive/2017/07/27/7247877.html
-Advertisement-
Play Games

1. mysql是一種常用的資料庫管理軟體,優點有:免費,開源,跨平臺,本文只是介紹一下MySQL的簡單操作 2.資料庫的基本結構 可以把資料庫理解成一個文件夾,資料庫中的數據存放的單位是表,可以理解為excel表格,表格的表頭稱為欄位,表中的每一條數據稱為記錄 3.MySQL安裝 1.從官網下載  ...


1. mysql是一種常用的資料庫管理軟體,優點有:免費,開源,跨平臺,本文只是介紹一下MySQL的簡單操作

2.資料庫的基本結構

  可以把資料庫理解成一個文件夾,資料庫中的數據存放的單位是表,可以理解為excel表格,表格的表頭稱為欄位,表中的每一條數據稱為記錄

  

3.MySQL安裝

  1.從官網下載 https://www.mysql.com/downloads/

  2.下載msi格式的文件,雙擊安裝即可

  3.配置環境變數

  windows環境安裝比linux簡單的多,所以安裝過程就不贅述

  4.安裝好以後,打開命令提示行,輸入mysql -uroot -pkey,(key為安裝過程中設置的 密碼),然後回車出現  mysql > ,就表示安裝成功了

4.sql語句規範

  sql是結構化查詢語言的縮寫。我們通過sql語句來操作資料庫,下麵是sql語句的一些書寫規範

  1.sql語句不區分大小寫,但是建議sql命令大寫,自定義的庫名錶名之類小寫

  2.sql語句支持分行,以分號結尾,關鍵詞不能跨行

  3.用空格和縮進來提高語句可讀性

  4.單行註釋:--

   多行註釋:/*....*/

  5.中括弧里的內容表示 可有可無

5.資料庫簡單操作

  1.創建資料庫  CREATE DATABASE database_name;

   可以在創建資料庫的時候指定編碼集  CREATE DATABASE database_name CHARACTER SET utf8;

  2.刪除資料庫  DROP DATABASE database_name; 從刪庫到跑路

  3.查看已創建的資料庫  SHOW DATABASES;

  4.查看資料庫創建信息   SHOW CREATE DATABASE database_name;

  5.修改資料庫字元集  ALTER DATABASE database_name CHARACTER SET utf8;

  6.使用資料庫  USE database_name;    進入資料庫後沒有退出名令,但是可以繼續用SHOW查看資料庫並用USE切換到其他資料庫

6.表的簡單操作

  使用資料庫後執行的操作

  1.創建表  CREATE TABLE table_name(欄位名稱 欄位數據類型  [約束],

                        欄位名稱 欄位數據類型  [約束],    

                      欄位名稱 欄位數據類型  [約束]

                      );

  2.查看所有表  SHOW TABLES;

   查看表的詳細信息  DESC table_name;

   查看表的創建信息  SHOW CREATE TABLE table_name;

  3.增加列  ALTER TABLE table_name ADD 列名 類型 [完整性約束條件] [first|after 欄位名];

    增加多列用逗號隔開

  4.修改 

   修改一列類型   ALTER TABLE table_name MODIFY 列名 類型  [完整性約束條件];

   修改列名    ALTER TABLE table_name CHANGE 列名 新名 類型 [約束條件];

   修改表名  RENAEM TABLE 表名 TO 新名;

   修改表的字元集  ALTER TABLE table_name CHARACTER SET utf8;

  5.刪除 

   刪除一列  ALTER TABLE table_name DROP 列名;

   刪除表   DROP TABLE table_name;

   刪除主鍵的自增長  ALTER TABLE table_name CHANGE id id int(10)

7.約束條件

  創建表的時候,欄位後面要加約束條件。常用的約束條件有:

  1.非空  not null

  2.唯一性 unique

  3.主鍵  primary key  如果一個欄位設置了非空屬性和唯一性約束,那麼自動識別為主鍵

  4.自增  auto_increment  只有主鍵可以設置這個約束

   

8.sql數據類型

數值類型:  

 

類型大小範圍(有符號)範圍(無符號)用途
TINYINT 1 位元組 (-128,127) (0,255) 小整數值
SMALLINT 2 位元組 (-32 768,32 767) (0,65 535) 大整數值
MEDIUMINT 3 位元組 (-8 388 608,8 388 607) (0,16 777 215) 大整數值
INT或INTEGER 4 位元組 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整數值
BIGINT 8 位元組 (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 極大整數值
FLOAT 4 位元組 (-3.402 823 466 E+38,1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 單精度
浮點數值
DOUBLE 8 位元組 (1.797 693 134 862 315 7 E+308,2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 雙精度
浮點數值
DECIMAL 對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2 依賴於M和D的值 依賴於M和D的值 小數值

 

時間類型:

 

類型大小
(位元組)
範圍格式用途
DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 時間值或持續時間
YEAR 1 1901/2155 YYYY 年份值
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和時間值
TIMESTAMP 8 1970-01-01 00:00:00/2037 年某時 YYYYMMDD HHMMSS 混合日期和時間值,時間戳

  

字元串類型:

類型大小用途
CHAR 0-255位元組 定長字元串
VARCHAR 0-65535 位元組 變長字元串
TINYBLOB 0-255位元組 不超過 255 個字元的二進位字元串
TINYTEXT 0-255位元組 短文本字元串
BLOB 0-65 535位元組 二進位形式的長文本數據
TEXT 0-65 535位元組 長文本數據
MEDIUMBLOB 0-16 777 215位元組 二進位形式的中等長度文本數據
MEDIUMTEXT 0-16 777 215位元組 中等長度文本數據
LOGNGBLOB 0-4 294 967 295位元組 二進位形式的極大文本數據
LONGTEXT 0-4 294 967 295位元組 極大文本數據

9.表記錄操作

  1.插入數據 insert

  INSERT [INTO] table_name (欄位名稱,,,) VALUES(值,,,),

                           (值,,,),

                            .......  

                           (值,,,);

  2.修改表記錄

    UPDATE table_name SET 欄位=值,欄位=值....WHERE子句;

  3.刪除表記錄

    DELETE FROM table_name WHERE子句; 不加where子句的話會把整個表刪除

    TRUNCATE TABLE table_name;  刪除整個表

    delete和truncate的區別:

      1.語法不同

      2.delete後面可以加限制條件,選擇刪除某條記錄,而truncate只能刪掉整個表

      3.delete 可以返回刪除的數據,但是truncate不能

      4.在刪除整個表的時候,delete的原理是一條一條的刪除,而truncate 的原理是把整個表刪掉,再新建一個同樣欄位的表

       所以,如果表中有自增長的欄位,delete刪除之後,新的表是從上個位置開始自增的,但是truncate是從1開始

10.表記錄查詢  select

這個是最重要,也是最常用的

  1.單表查詢

SELECT [DISTINCT] *|field1,field,... from table_name where .... group by .... order by...[desc|asc]

     1.顯示表的全部信息  SELECT * FROM table_name; 

        顯示指定列的信息  SELECT 列,列.. FROM table_name;

        SELECT 後面可以跟 表達式 、distinct(表示去重)

     2.用WHERE子句進行過濾

       WHERE子句中可以使用:

        1.比較運算符  > < >= <= !=

        2.between .. and ..   在..和.. 之間

        3.in (a,b,c)         在a,b,c 這三個值中一個

        4.like  條件  eg: like "李%"  表示已“李”開頭

                  like "李_"    表示以“李”開頭,並且後面有一個字元,一個下劃線代表一個字元

        5.邏輯運算符 and or not

     3.order by  表示以。。排序,排序的列可以是列名,也可以是設置的別名

        order語句後面可以跟兩個模式,asc表示升序(預設),desc表示降序

     4.group by 表示以..分組,分組後只會顯示每個欄位的第一條記錄,分組後的篩選用的關鍵字是having ,作用和 where一樣,與where相比,having後面可以使用聚合函數

     5.聚合函數:

        1.avg() 求平均值

        2.count() 統計個數

        3.sum() 求和函數

        4.max(),min()  最大值最小值函數

     6.limit 關鍵字用來控制顯示的條數,limit 1 表示只顯示第一行,limit 2,5 表示顯示第2到5行

     7.使用正則表達式

        

        

  2.多表查詢

    1.外鍵

      如果兩張表要創建聯繫,就需要使用到外鍵,需要考慮幾種關係:一對一,多對多,和一對多

      1.一對多: 這種模型中,有主表和子表的區別,比如一個老師有多個學生,一個學生只能有一個老師,這種情況老師就是主表,學生就是子表,我們需要在子表中創建關聯欄位(外鍵)

        增加外鍵:[ADD CONSTRAINT name] FOREIGN KEY (欄位名)REFERENCES table_name;

        刪除外鍵:ALTER TABLE table_name DROP FOREIGN KEY name;

              (這個name是增加外鍵時給外鍵起的名字,如果沒有設置,從表的創建方式中可以找到)

      2.多對多:需要藉助第三張表,在第三張表中創建兩個外鍵

      3.一對一:這種實際就是外鍵加一個unique,很少用

      4. 一旦兩張表建立了關聯,就不能隨便從表中刪除記錄了,必須解除關聯後才能刪

    2.內連接

      我們在查詢表記錄的時候,可以同時顯示多張表的記錄,類似

      select * from tableA,tableB 

      但是這樣並不是我們想要的結果,當然我們可以在查詢結果後面用where子句進行篩選,但更常用的是用內連接:

      select * from tableA inner join tableB on tableA.id = tableB.id

    3.外連接

      1.左外連接:在內連接的基礎上增加左邊有右邊沒有的結果

          select * from tableA left join tableB on tableA.id = tableB.id

      2.右外連接:在內連接的基礎上增加右邊有左邊沒有的結果

       select * from tableA right join tableB on tableA.id = tableB.id

  

練習:

  1 -- 1.查詢平均成績大於八十分的同學的姓名和平均成績
  2 -- SELECT sname,avg(num) from student INNER JOIN  score
  3 --                                 on student.sid = score.student_id
  4 --                                 GROUP BY student_id
  5 --                                 HAVING avg(num) >80
  6 
  7 -- 2、查詢所有學生的學號,姓名,選課數,總成績
  8 
  9 -- SELECT student.sid,sname,count(course_id),sum(num) from student
 10 --                     INNER JOIN score
 11 --                     on score.student_id = student.sid
 12 --                     GROUP BY student_id
 13 -- 3、查詢沒有報李平老師課的學生姓名
 14 
 15 -- SELECT sname from student WHERE sid not in (SELECT DISTINCT student_id from score WHERE course_id  in (SELECT cid from teacher
 16 --                                                                                     INNER JOIN course
 17 --                                                                                     on teacher.tid = course.teacher_id
 18 --                                                                                     WHERE tname like '李平%'))
 19 
 20 -- 4、查詢物理課程比生物課程高的學生的學號
 21 -- SELECT * from
 22 --
 23 -- (SELECT * from    score WHERE course_id = (SELECT cid from course WHERE cname="物理")) as A
 24 --
 25 -- INNER JOIN
 26 --
 27 -- (SELECT * from    score WHERE course_id = (SELECT cid from course WHERE cname="生物")) as B
 28 --
 29 -- on A.student_id = B.student_id
 30 --
 31 -- WHERE A.num > B.num
 32 --
 33 -- 5、查詢沒有同時選修物理課程和體育課程的學生姓名
 34 
 35 -- SELECT sname from student where sid not in(SELECT student_id from score
 36 --                 WHERE course_id
 37 --                 in (select cid from course
 38 --                         WHERE cname
 39 --                         like "物理" or cname = "體育")
 40 --                 GROUP BY student_id having count(sid)=2)
 41 --
 42 
 43 -- 6、查詢掛科超過兩門(包括兩門)的學生姓名和班級
 44 
 45 -- SELECT sname,caption from student
 46 --                                         INNER JOIN class
 47 --                                         on student.sid = class.cid
 48 --                                         where sid in
 49 --                                         (SELECT student_id from score
 50 --                                                     where num    <60 GROUP BY student_id
 51 --                                                             HAVING count(num) >=2)
 52 
 53 -- 7、查詢選修了所有課程的學生姓名
 54 -- SELECT sname from student
 55 --                             WHERE sid in (SELECT student_id  from score
 56 --                                                                                             GROUP BY student_id
 57 --                                                                                                 HAVING count(course_id) = (SELECT count(cid) from course)
 58 -- )
 59 
 60 
 61 
 62 
 63 -- 8、查詢不同課程但成績相同的學號,課程號,成績
 64 
 65 SELECT student_id,course_id,num from score WHERE student_id = (SELECT A.student_id from
 66 
 67 (SELECT *,COUNT(DISTINCT num) as C FROM score GROUP BY student_id)as A
 68 
 69 LEFT JOIN
 70 
 71 (SELECT *,count(num) as D FROM score GROUP BY student_id) as B
 72 
 73 on A.sid = B.sid
 74 
 75 where C!=D)
 76 
 77 -- 9、查詢沒學過“李平”老師課程的學生姓名以及選修的課程名稱;
 78 
 79 SELECT a.sname,course.cname from course
 80                     RIGHT JOIN (SELECT * from student
 81                                 WHERE sid not in
 82                                             (select student_id
 83                                                     from score where course_id =3) )as A
 84                     on course.cid = A.class_id
 85 
 86 
 87 
 88 
 89 -- 10、查詢所有選修了學號為1的同學選修過的一門或者多門課程的同學學號和姓名;
 90 
 91 --
 92 SELECT sid,sname
 93         from student
 94         WHERE sid in (SELECT DISTINCT student_id from score 
 95                                                                 WHERE course_id
 96                                                                 in (SELECT course_id
 97                                                                                 from score where student_id = 1))
 98 
 99 
100 
101 
102 -- 11、任課最多的老師中學生單科成績最高的學生姓名
103 
104 SELECT sname from student
105         where sid in (SELECT DISTINCT student_id from score
106                                             WHERE course_id in (SELECT cid from course
107                                                     where teacher_id=(SELECT teacher_id from course
108                                                             GROUP BY teacher_id order by count(cid) desc limit 1))
109                                                                         and num=(SELECT max(num) from score WHERE course_id in
110                                                                                 (SELECT cid from course where teacher_id=(SELECT teacher_id
111                                                                                             from course GROUP BY teacher_id order by count(cid) desc limit 1)) ))-- SELECT * from score  GROUP BY course_id having
練習題

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Android項目目錄結構 ...
  • Android程式的安裝和打包 ...
  • 1.查找是否存在指定包名的App 2.創建Intent,刪除指定包名的App ...
  • 一、NSTimer使用時有哪些需要註意點? 1、必須保證有一個活躍的RunLoop。 NSTimer是基於RunLoop的一種定時機制,這涉及到預設主線程和子線程RunLoop的知識延伸;同時還有頁面滑動時防止定時器失效的知識點: 解決方案:[[NSRunLoop currentRunLoop] a ...
  • 目錄 · 概況 · 原理 · MapReduce編程模型 · MapReduce過程 · 容錯機制 · API · 概況 · WordCount示例 · Writable介面 · Mapper類 · Reducer類 · Partitioner抽象類 · WritableComparator介面 · ...
  • SQL Server 中數據存儲的基本單位是頁。為資料庫中的數據文件(.mdf 或 .ndf)分配的磁碟空間可以從邏輯上劃分成頁(從 0 到 n 連續編號)。磁碟 I/O 操作在頁級執行。也就是說,SQL Server 讀取或寫入所有數據頁。 區是八個物理上連續的頁的集合,用來有效地管理頁。所有頁都 ...
  • 目錄 · 概況 · 原理 · 資源調度器分類 · YARN架構 · ResourceManager · NodeManager · ApplicationMaster · Container · YARN工作流程 · YARN資源調度 · 操作 · Overview · User Commands ...
  • 目錄 · 概況 · 原理 · HDFS 架構 · 塊 · NameNode · SecondaryNameNode · fsimage與edits合併 · DataNode · 數據讀寫 · 容錯機制 · 數據完整性 · NameNode HA · NameNode Federation · HDF ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...