Mysql學習筆記_1

来源:https://www.cnblogs.com/zgbsky/archive/2018/04/25/8883626.html
-Advertisement-
Play Games

Linux作為操作系統,Apache 或Nginx作為 Web 伺服器,MySQL 作為資料庫,PHP/Perl/Python作為伺服器端腳本解釋器。這四個軟體都是免費或開源軟體軟體,因此使用這種方式除開人工成本就可以建立起一個穩定、免費的網站系統,稱為“LAMP“或“LNMP”組合。 一、以cmd ...


Linux作為操作系統,Apache 或Nginx作為 Web 伺服器,MySQL 作為資料庫,PHP/Perl/Python作為伺服器端腳本解釋器。這四個軟體都是免費或開源軟體軟體,因此使用這種方式除開人工成本就可以建立起一個穩定、免費的網站系統,稱為“LAMP“或“LNMP”組合。

一、以cmd命令使用mysql的基礎步驟 DOS系統下清屏的命令:cls)

基礎步驟:

1)mysql -u root -p回車    //進入資料庫

(2)password ........           //輸入密碼

(3)show databases;       //查看資料庫

(4)\T   路徑........\文件名.sql;  //連接文本記錄,使用該文件存儲操作信息

(5)use 庫名 ;  //選資料庫

(6)create tables //建表

 

二、mysql操作命令

1.連接

  本地連接: mysql -u root -p

  明文連接: mysql -u root -p密碼

  遠程連接: mysql -h  ip地址 -u 賬號 -p 

2.庫的操作命令

  (1)查看所有資料庫:                show  databases;

  (2)創建資料庫:                   create database 庫名;

  (3)刪除資料庫:                     drop database 庫名;

  (4)查看當前使用的資料庫:                select  database();

    (5)查看建庫語句          show create database 資料庫名; 

  (6)查看當前資料庫存在的數據表        show tables; 

註意:MySQL資料庫中命令不區分大小寫。在Windows下,資料庫名稱也是不區分大小寫的,但在Linux下,資料庫名稱嚴格區分大小寫

 

3.表的操作命令  

  1.創建數據表
        
      create table [if not exists] 表名(
              欄位名1  欄位類型,
              欄位名2  欄位類型,
              欄位名3  欄位類型
              )engine=innodb default charset=utf8;

  (1)[if not exists]如果該表不存在則創建

  (2)engine  =  innodb 設置表引擎

  (3)default  charset=utf8 設置表的字元集

  (4)每個建表語句的欄位必須用逗號分隔,最後一句逗號不能有

 

  2.查看建表語句      show create table '表名';

  3.查看表結構     desc 表名   或   desc 表名/G(豎表);

  4.刪除表      drop  table  表名;

 

附:常用約束:

1)主鍵約束:primary key --非空且唯一,一張表就定義一個主鍵

2)主鍵自增長:auto_increment

3)非空:not  null --不允許插入null值,可定義多個非空約束

4)唯一性:unique  --不允許重覆,但可以為空,可定義多個唯一約束(例如:賬戶名)

5)預設值:default  預設值  --指定預設值,在沒有添加值得情況下使用default後指定的預設值

6)零填充:zerofill 並不是限制插入的長度,僅是顯示時的位數使用0

7)無符號: unsiged

8)預設值:default (例:default('2'))如果沒有插入數據,則取預設值

9)註釋內容: comment 建表語句中的註釋

10)外鍵:foreign key(列名)     references 外鍵表名(外鍵列名); 

註意:有外鍵時,創建表,先創建父表,再創建子表;插入數據,先插入父表,再插入子表;刪除數據,先刪除子表中的數據,再刪除父表中的數據。

 

 

4.增刪改查(數據操作)

(1)增(添加數據)

            ① insert into 表名 (欄位1,欄位2……) values (值1,值2……);   //建議使用 

            ② insert into 表名 values (值1,值2……),(值1,值2……);      //一次性插入多條數據

            ③ insert into 表名 (欄位1,欄位2……) values (值1,值2……),(值1,值2……);      //一次性插入多條數據

            ④ insert into 表名 values (值1,值2...);

            ⑤ insert into 表名 set 欄位1=值1,欄位2=值2...;

              註意:
                1.值和欄位名要一一對應,否則會報錯
                2.寫入的值一定要和數據類型相匹配

(2)刪 (刪除數據

             delete from 表名 where  條件;

             truncate 表名;

            
        註意:刪除數據的時候,一定要加上where條件,否則會刪除所有的數據

 

1.刪除表中的某一列。

 

mysql>alter table 表名 drop <column> 列名; //column可省略

附:drop、truncate、delete的區別?

  a) drop和truncate是DDL,而delete是DML。

  b) truncate和delete只刪除數據,不會刪除表的結構,而drop會把數據和表結構都刪除。

  c) delete可以帶where有條件的刪除,可以回滾(rollback),但刪除速度較truncate較慢。而truncate則不可以刪除特定的數據,也不可以回滾(rollback),但刪除速度比delete快。

 

建議:小心使用drop和truncate,尤其在數據沒有備份的情況下。

 

(3)改(修改數據)

             update 表名 set 要修改的欄位=新的欄位...... where  條件

        註意:修改數據的時候,一定要加上where條件,否則會修改所有的數據

 

1、修改表中的某一列。

 

a)修改表中某一列的列名(同時可修改列的數據類型)

mysql>alter table 表名 change 原列名 新列名 列數據類型;

 

b)修改表中某一列的數據類型

mysql>alter table 表名 modify 列名 列新的數據類型;

 

 2.向表中添加新的列

mysql>alter table 表名 add <column> 列名 列的數據類型 [<列的完整性約束>];//column可省略

 

3、刪除表中的某一列。

mysql>alter table 表名 drop <column> 列名;  //column可省略

 

4.修改表的編碼字元集。  alter table 表名 character set 字元集;

5.修改表的名稱      alter table 原表名 rename to 新表名; 或   rename table 原表名 to 新表名;

 

             

 

(4)查(查找數據)

            select * from 表名 where 欄位名=欄位值;  

              select 欄位1,欄位2... from 表名 where 欄位名=欄位值; 

             select *(所有欄位) from 表;

             select 欄位1,欄位2.. from 表;

 

1. 過濾表中重覆的數據(關鍵字distinct)

select distinct 列名 from 表名;   //返回該欄位下的所有欄位值,若有相同欄位值,則只返回一個。    

2、排序(關鍵字order by)

mysql>select * from 表名 order by 列名 asc;       //升序(預設),asc可省略不寫。
mysql>select * from 表名 order by 列名 desc;     //降序

例:按照學生表(student)中學生成績(grade)的由高到低順序輸出學生的學號(sno)、姓名(sname)和成績(grade).

mysql>select sno,sname,grade from student order by grade desc;

3、分頁查詢(關鍵字limit)。

mysql>select * from 表名 limit (pageNo-1)*pagesize,pagesize; //    pageNo-->要查詢的頁數,pageSize-->每頁顯示的記錄數

例:查詢dept表中第一頁(每頁2條數據)的記錄。

mysql>select * from 表名 limit 0,2; 

 

4、模糊查詢(關鍵字like)

mysql>select * from 表名 where 列名 like ' % ';  

 “%”代表任意字元;     “_”代表單個字元; 例:select * frome t_student where stuName like ‘張三”;        select * frome t_student where stuName like ‘張三%”;        select * frome t_student where stuName like ‘%張三%”;//含有張三的任意字元        select * frome t_student where stuName like ‘張三_”

例:查詢學生表(student)中姓劉的學生的信息。

mysql>select * from student where sname like '劉%';

例:查詢學生表中姓名第二個字為陽的學生信息。

mysql>select * from student where sname like '_陽%';  //_指代一個字元

 

5、範圍查詢(關鍵字between .. and .. , in())

mysql>select * from 表名 where 列名  between 欄位值(小) and 欄位值(大);//包含兩端的欄位值

mysql>select * from 表名 where 列名 in (欄位值1,欄位值2,......);

帶and的多條件查詢: select 欄位1,欄位2…frome 表名 where 條件表達式1 and 條件表達式2 [and 條件表達式n] 例:select * frome t_student where gradeName=’一年級’ and age=23;   帶or的多條件查詢 select 欄位1,欄位2…frome 表名 where 條件表達式1 or 條件表達式2 [or 條件表達式n] 例:select * frome t_student where gradeName=’一年級’ or age=23;//或者,條件只要滿足一個   distinct去重覆查詢:select distinct 欄位名 from 表名;   對查詢結果排序order by:select 欄位1,欄位2…from 表名 order by 屬性名 [asc|desc] 例:select * frome t_student order by age desc;//降序,從大到小        select * frome t_student order by age asc;//升序,asc預設可以不寫    

 

例如:查詢學生表(student)中語文成績chinese在80~90分之間的所有學生信息(包含80和90)
mysql>select * from student where chinese between 80 and 90;

例如:查詢學生表(student)中數學成績math為60分,70分,80分和90分的所有學生信息。
mysql>select * from student where math in (60,70,80,90);

 

6、使用別名。

mysql>select 欄位名 <as> 別名,欄位名 別名,... from 表名;    //as可省略

例如:查詢學生成績表(sc)中學生姓名(sname)及總成績,sname欄位用姓名錶示,所有科目得分總和用總分表示。
mysql>select sname as 姓名,chinese+math+english 總分 from sc;

 

7、分組查詢(關鍵字group by)。

mysql>select 列名,count(列名) from 表名 group by 列名;

分組查詢group by group by 屬性名 [having 條件表達式][with rollup]   單獨使用(毫無意義,不能單獨使用); 與group_concat()函數一起使用; 例:select gradeName,group_concat(stuName) from t_student group by gradeName;   與聚合函數一起使用; 例:select gradeName,count(stuName) from t_student group by gradeName;   與having一起使用(顯示輸出的結果); 例:select gradeName,count(stuName) from t_student group by gradeName having count(stuName)   與with rollup 一起使用(最後加入一個總和行); 例:select gradeName,group_concat(stuName) from t_student group by gradeName with rollup;  

例如:查詢每個部門的員工人數,根據部門編號(deptno)對員工進行分組,返回各部門員工人數。
mysql>select deptno,count(empno) from emp group by deptno;  //empno--員工編號,emp--員工表

having:對分組後的結果進行條件限制
例如:查詢每個部門員工人數大於2的所有記錄,返回人數大於2人的部門編號及其部門人數。
mysql>select deptno,count(empno) from emp group by deptno having count(empno)>2;

 

8、表連接查詢(同時涉及多個表的查詢稱為連接查詢,用來連接兩個表的條件稱為連接條件)。

A)內連接:join,inner join

B)外連接:left join,left outer join,right join,right outer join,union

C)交叉連接:cross join

內連接:  表1  join 表2  on  表1.欄位名=表2.欄位名;              //內連接查詢(兩張或以上的表連接起來查詢需要的數據)

例:查詢員工表(emp)中的員工號(empno)、員工姓名(empname)、部門號(deptno)和部門名稱(deptname),部門名稱欄位在部門表(dept)中.

mysql> select empno,empname,emp.deptno,deptname from emp join dept on emp.deptno=dept.deptno;

外連接查詢(兩張或以上的表連接起來查詢某張表的信息) 
1.左外連接:  表1  left join  表2    on    表1.列名 = 表2.列名; 
表1作為主表,主表中的所有記錄都會輸出,和從表匹配不上的欄位用null進行補齊。

例:以員工表(emp)為主表實現上述查詢。

mysql> select empno,empname,emp.deptno,deptname from emp left join dept on emp.deptno=dept.deptno;

2.右外連接:  表1  right join  表2   on   表1.列名=表2.列名;
表2為主表,主表中的所有記錄都會輸出,和從表匹配不上的欄位用null進行補齊。

例:以部門表(dept)為主表實現上述查詢。

mysql> select empno,empname,emp.deptno,deptname from emp right join dept on emp.deptno=dept.deptno;

 3.多條件連接查詢

select * from t_book,t_bookType where t_book.bookTypeId=t_bookType.id and t_book.price>70; 子查詢 1.帶in關鍵字的子查詢(一個查詢語句的條件可能落在另一個select語句的查詢結果中) select * from t_book where bookType in(select id from t_bookType); select * from t_book where bookType not in(select id from t_bookType);   2.帶比較運算符的子查詢(子查詢可以使用比較運算符) select * from t_book where price>=(select price from t_priceLevel where priceLevel=1);   3.帶exists關鍵字的子查詢(加入子查詢查詢到記錄,則進行外層查詢,否則,不執行外層查詢) select * from t_book where exists(select * from t_booktype); select * from t_book where not exists(select * from t_booktype);   4.帶any關鍵字的子查詢(any關鍵字表示滿足其中任一條件) select * from t_book where price>= any(select price from t_priceLevel);   5.帶all關鍵字的子查詢(all關鍵字表示滿足所有條件) select * from t_book where price>= all(select price from t_priceLevel);     4.合併查詢   1.union 使用union關鍵字是,資料庫系統會將所有的查詢結果合併到一起,然後去掉相同的記錄; select id from t_book union select id from t_bookType;   2.union all 使用union all,不會去除掉重覆的記錄; select id from t_book union all select id from t_bookType;  

9、表的複製。

mysql>create table 新表表名 select * from 被覆製表表名; //新表的表結構和數據與原表相同。

mysql>create table 新表表名 select 列名1,列名2,... from 被覆製表表名;  //可以通過在select查詢中指定欄位來限制出現在新表中的欄位
mysql>create table 新表表名 select * from 被覆製表表名 where 0=1; //通過使用select語句創建已存在表的空副本(即創建相同表結構,但不複製原表數據過來),並且返回一個空結果集。

10.  空值查詢:select 欄位1,欄位2…frome 表名 where 欄位  is[not] null; 

11、聚合函數。

a)返回指定列非空值的個數

mysql>select count(列名) from 表名;

例:查詢學生表(student)中學生的總人數。

mysql>select count(sno) from student;  //根據學生學號計算學生個數,學號不為空且唯一


b)返回指定列的最值
mysql>select max(列名) from 表名;  //返回指定列的最大值

例:查詢學生表(student)中年齡(sage)最大的學生姓名(sname)和年齡。

mysql>select sname,max(sage) from student; 
mysql>select min(列名) from 表名;   //返回指定列的最小值

例:查詢學生成績表(sc)中語文成績(chinese) 最低的學生的學號(sno)和語文成績。

mysql>select sno,min(chinese) from sc;


c)返回指定列的平均值
mysql>select avg(列名) from 表名;


d)返回指定列的所有值之和
mysql>select sum(列名) from 表名;

5.退出客戶端

  exit;  quit;    \q      Ctrl+c      (任意一個即可)

6.mysql的其他操作

1.資料庫的導入導出。

導出資料庫:mysqldump -u 用戶名 -p  資料庫名>資料庫名.sql

導入資料庫:source 資料庫名.sql

2、顯示幫助命令清單。

mysql> \h; //(加分號和不加分號結束都不影響命令執行)

3、清除當前輸入的語句(命令)。

mysql> \c

4、查詢當前安裝的MySQL伺服器的版本號。

mysql> select version();

5、查看MySQL伺服器狀態信息(包含版本號,下麵兩個命令執行效果相同)。

mysql> status;  //(加分號和不加分號結束都不影響命令執行)

mysql> \s

 

===========================================================================================================

MySQL、DB2、Oracle、SQL Server、MariaDB等等,由於MySQL已是Oracle旗下產品,可能會被閉源,不再免費,但MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社區在維護,MariaDB是完全相容MySQL,包括API和命令行,使之能輕鬆成為MySQL的代替品。在存儲引擎方面,MariaDB基於事務的Maria存儲引擎,替換了MySQL的MyISAM;使用XtraDB來代替MySQL的InnoDB。


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

-Advertisement-
Play Games
更多相關文章
  • LINEDEMO程式繪製一個矩形、兩條直線、一個橢圓和一個圓角矩形。該程式表明,定義了封閉矩形的這些函數確實對這些區域進行了填充,因為橢圓後面的線被隱藏了。 1 /* 2 LINEDEMO.C -- Line-Drawing Demonstration program 3 (c) Charles P ...
  • Infi-chu: http://www.cnblogs.com/Infi-chu/ 一、門戶新聞業務: 1. 特點:網頁一旦發佈,再次改動網頁內容的幾率很低,新聞業務內容的靜態化相對比較簡單 2. 步驟: a. 程式要支持發佈的內容有動態轉成靜態的功能。 b. 運營編輯人員發佈新聞網頁後,後臺程式 ...
  • 一、為什麼要有操作系統 二、什麼是操作系統 精簡的說的話,操作系統就是一個協調、管理和控制電腦硬體資源和軟體資源的控製程序。操作系統所處的位置如圖1 細說的話,操作系統應該分成兩部分功能: #作用一:為應用程式提供如何使用硬體資源的抽象 例如:操作系統提供了文件這個抽象概念,對文件的操作就是對磁碟 ...
  • 1 //SINEWAVE.C -- Sine Wave Using Polyline (c) Charles Petzold, 1998 2 #include <Windows.h> 3 #include <math.h> 4 5 #define NUM 1000 6 #define TWOPI ( ...
  • GitHub是一個免費托管開源代碼的遠程倉庫。但是對於某些視源代碼如生命的商業公司來說,既不想公開源代碼,又捨不得給GitHub交保護費,那就只能自己搭建一臺Git伺服器作為私有倉庫使用。搭建Git伺服器需要準備一臺運行Linux的機器,強烈推薦用Ubuntu或Debian,這樣,通過幾條簡單的ap ...
  • 獲取設備環境的信息 1 //DEVCAPS1.C--Device Capabilities Display Program No.1 (c) Charles Petzold, 1998 2 #include <Windows.h> 3 4 #define NUMLINES ((int) (sizeo ...
  • This network connection does not exist 在windows server 2008上面map了一個磁碟,共用的folder被我停止共用後,點擊該磁碟的disconnect,跳出提示信息: This network connection does not exist ...
  • 在MySQL資料庫中出現了阻塞問題,如何快速查找定位問題根源?在實驗開始前,我們先梳理一下有什麼工具或命令查看MySQL的阻塞,另外,我們也要一一對比其優劣,因為有些命令可能在實際環境下可能並不適用。 1: show engine innodb status 2: Innotop工具 3: INNO... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...