MySQL之單表(增刪改查)+ 基本命令


1、MySQL之最基本命令

  

1、創建數據庫

命令:CREATE DATABASE 數據庫名;

舉例:CREATE DATABASE student;

2、指定要操作的數據庫

命令:USE 數據庫名;

舉例:USE student;

3、創建數據表(前提是已經指定了需要操作的數據庫,命令參考上一條)

命令:CREATE TABLE 數據表名

  (

    字段名1  數據類型[完整性約束條件],

    字段名2  數據類型[完整性約束條件],

    …

    字段名2  數據類型[完整性約束條件]

  );

舉例:CREATE TABLE grade

   (

    id   INT(11),

    name   VARCHAR(20),

    grade   FLOAT

          );

為了驗證數據表是否創建成功,需要使用SHOW TABLES語句進行查看:SHOW TABLES

結果如下(我使用的是phpMyAdmin):  

4、查看數據表

命令:SHOW CREATE TABLE 數據表名;

舉例:SHOW CREATE TABLE grade;

執行結果如下:

 

5、使用DESCRIBE語句查看數據表

命令:DESCRIBE 數據表名;或者DESC 數據表名;

舉例:DESC grade;

執行結果如下:

6、為數據表重命名

命令:ALTER TABLE 數據表名 RENAME [TO] 新表名;

注意:命令中出現的[ ]中的內容表示選擇性條件,不是必需;

舉例:ALTER TABLE grade RENAME newgrade;

7、修改字段名

命令:ALTER TABLE 數據表名 CHANGE 舊字段名 新字段名 新數據類型

注意:新數據類型不能為空,即使不改變數據類型也要寫上原來的數據類型

舉例:ALTER TABLE grade CHANGE name newname varchar(20);(把grade表中的name字段改為newname,數據類型不變)

8、修改字段數據類型

命令:ALTER TABLE 數據表名 MODIFY 字段名 數據類型;

舉例:ALTER TABLE grade MODIFY id INT(20);(將字段名id的數據類型改為INT(20))

9、添加字段

命令:ALTER TABLE 數據表名 ADD 新字段名 數據類型 [約束條件] [FIRST | AFTER 已存在的字段名];

注意:“|”表示或者,其兩邊的參數是可供挑選的,此處的FIRST表示將字段設置為表的第一個字段,AFTER 表示將新字段插入到指定的“已存在的字段名”的后面

舉例:ALTER TABLE grade ADD age INT(10);

10、刪除字段

命令:ALTER TABLE 表名 DROP 字段名;

舉例:ALTER TABLE grade DROP grade;

11、修改字段排列位置

命令:ALTER TABLE 表名 MODIFY 字段名1 數據類型 FIRST | AFTER 字段名2

舉例1:ALTER TABLE grade MODIFY newname VARCHAR(20) FIRST;(將字段newname插入到表的第一個位置)

舉例2:ALTER TABLE grade MODIFY id INT(11) AFTER grade;(將字段id插入到字段grade的后面)

12、刪除數據表

命令:DROP TABLE 數據表名;

舉例:DROP TABLE grade;

 *************************************************************************************************************************************************************************

**************************************************************************************************************************************************************************

1、“增”——添加數據

1.1 為表中所有字段添加數據

1.1.1 INSERT 語句中指定所有字段名

語法:INSERT INTO 表名(字段名1,字段名2,…)

         VALUES(值1,值2,…);

舉例:INSERT INTO student(id,name,grade)

     VALUES(1,'zhangshan',98);

使用SELECT * FROM student;命令查看結果為:

表示數據已經成功插入。

1.1.2 INSERT語句中不指定字段名

若不指定字段名,則添加的值的順序應和字段在表中的順序完全一致。

語法:INSERT INTO 表名 VALUES(值11,值2,…);

舉例:INSERT INTO student

     VALUES (2,'lisi',62);

使用SELECT * FROM student;命令查看結果為:

1.2 為表的指定字段添加數據

為指定字段添加數據,即只向部分字段添加值,而其他字段的值為表定義時的默認值。

語法:INSERT INTO 表名(字段1,字段2,…)

     VALUES(值1,值2,…)

舉例:INSERT INTO student(id,name)

     VALUES(3,'wangwu');

使用SELECT * FROM student;命令查看結果為:

從結果中可以看出,新記錄的grade字段值為NULL,是因為添加時為指明grade的值,系統會自動添加默認值。

1.3 INSERT語句的其他寫法

語法:INSERT INTO 表名

    SET 字段名1=值1[,字段名2=值2,…]

舉例:INSERT INTO student

    SET id=4,name='zhaoliu',grade=72;

使用SELECT * FROM student;命令查看結果為:

 

 1.4  同時添加多條數據

語法:INSERT INTO 表名[(字段名1,字段名2,…)]

   VALUES (值1,值2,…),(值1,值2,…),

   …

   (值1,值2,…)

舉例INSERT INTO student VALUES

    (5,‘lilei’,99),

    (6,'hanmeimei',87),

    (8,'poly',76);

使用SELECT * FROM student;命令查看結果為:

 

2、“刪”——刪除數據

語法:DELETE FROM 表名 [WHERE 條件表達式

2.1 刪除部分數據

即刪除指定的部分數據,需要使用WHERE子句來指定刪除記錄的條件。

舉例:刪除student表中的id值為7的記錄

命令:DELETE  FROM student 

   WHERE id=7;

使用SELECT * FROM student;命令查看結果為:

 

可見id為7的記錄已被成功刪除。

2.2 刪除全部數據

若 DELETE 語句中沒有使用WHERE語句,則會將表中所有記錄都刪除。

語法:DELETE FROM 表名

舉例:刪除student表中的所有記錄

命令:DELETE FROM student;

使用SELECT * FROM student;命令查看結果為:

可見student表中記錄為空,說明表中所有數據已被成功刪除。

2.2 刪除全部數據的另一種方法——TRUNCATE

語法:TRUNCTE [TABLE ] 表名

舉例:TRUNCATE TABLE student;即可刪除student表

注意:

(1)DELETE 后面可以跟WHERE子句指定刪除部分記錄,TRUNCATE只能刪除整個表的所有記錄

(2)使用TRUNCATE語句刪除記錄后,新添加的記錄時,自動增長字段(如本文中student表中的 id 字段)會默認從1開始,而使用DELETE刪除記錄后,新添加記錄時,自動增長字段會從刪除時該字段的的最大值加1開始計算(即原來的id最大為5,則會從6開始計算)。所以如果是想徹底刪除一個表的記錄而且不會影響到重新添加記錄,最好使用TRUNCATE來刪除整個表的記錄。

3、“改”——更新數據

更新數據指對表中現存的數據進行修改。

語法:UPDATE 表名

      SET 字段名1=值1,[ ,字段名2=值2,…]

      [ WHERE 條件表達式 ]

在執行后面的語句之前,先使用INSERT語句往student表中插入以下數據:

3.1  UPDATE 更新部分數據

指更新指定表中的指定記錄,使用WHERE 子句來指定。

舉例:將student表中id值為1=記錄,將其name字段的值改為‘caocao’,grade字段的值改為50。

先查詢之前的記錄:SELECT * FROM student WHERE id=1;

顯示為:

命令:UPDATE student 

    SET name=‘caocao’,grade=50

    WHERE id=1;

使用SELECT * FROM student;命令查看結果為:

可見表中數據已被成功更新。

注意:還可以使用其他WHERE條件表達式,如:id > 4;

3.2  UPDATE 更新全部數據

 在UPDATE 語句中若不使用WHERE 子句,則會將表中所有記錄的指定字段都進行更新。

 舉例:更新student表中全部記錄,將grade字段都更新為80

命令:UPDATE student

    SET grade=80;

使用SELECT * FROM student;命令查看結果為:

可以看出所有數據已被成功更新。

4、“查”——之單表查詢

 MySQL從數據表中查詢數據最基本的語句是SELECT語句,在前面的“增刪查”已經使用過:SELECT * FROM 表名,也就是查詢指定數據表中的所有數據。下面將對SELECT語句進行詳細介紹。

在進行后面的操作之前我們先建立一個新的數據表student2,如下:

4.1  簡單查詢

4.1.1  查詢所有字段

語法:SELECT 字段名1,字段名2,…

   FROM 表名

舉例:查詢student2表中的所有記錄

命令:SELECT id,name,grade ,gender

      FROM student2;

結果:

注意:字段順序可以更改,如:

    SELECT id,grade,gender ,name

        FROM student2;

則顯示的結果也會作出對應的調整:

4.1.2  在SELECT語句中使用(‘ * ’)通配符代替所有字段

語法:SELECT * FROM 表名;

 在此前已多次使用此命令,所以此處不作贅述。

4.1.3  查詢指定的部分字段

語法:SELECT 字段名1,字段名2,… FROM 表名;

舉例:查詢student2表中的name字段和gender字段

命令:SELECT name,gender FROM student2;

 結果:

從結果中可以看到只顯示了name和gender兩個字段。

4.2   按條件查詢

4.2.1  帶關系運算符的查詢

 語法:SELECT 字段名1,字段名2,…

    FROM 表名

      WHERE 條件表達式

在WHERE子句中可以使用如下關系運算符:

關系運算符 說        明
    =     等於
    <>     不等於
    !=     不等於
    <     小於
    <=     小於等於
    >     大於
    >=     大於等於

舉例:查詢student2表中id為4的人的id和name字段

命令:SELECT id,name FROM student2  WHERE id=4;

結果:

舉例:查詢student2表中grade大於80的人的name和grade字段

命令:SELECT name FROM student2 WHERE grade>80;

結果:

4.2.2  帶 IN 關鍵字的查詢

IN關鍵字用於判斷某個字段的值是否在指定集合中,若在,則該字段所在的記錄將會被查詢出來.

語法:SELECT * | 字段名1,字段名2,…

   FROM 表名

   WHERE 字段名 [ NOT ]  IN (元素1,元素2,…)

舉例:查詢student2表中id值為1,2,3的記錄

命令:SELECT * FROM student2 WHERE  id IN (1,2,3);

結果:

注意:NOT IN 與 IN 相反,查詢的是不在指定范圍內的記錄。

4.2.3  帶 BETWEEN AND  關鍵字的查詢

BETWEEN AND 用於判斷某個字段的值是否在指定范圍之內,若在,則該字段所在的記錄會被查詢出來,反之不會。

語法:SELECT * | { 字段名1,字段名2,… }

   FROM  表名

      WHERE 字段名 [ NOT ] BETWEEN  值1  AND  值2;

舉例:查詢student2表中id值在2~5之間的人的id和name

命令:SELECT id,name FROM students WHERE id BETWEEN 2 AND 5;

結果:

注意:NOT BETWEEN AND 表示查詢指定范圍外的記錄。

4.2.4  空值查詢

在數據表中有些值可能為空值(NULL),空值不同於0,也不同於空字符串,需要使用 IS NULL 來判斷字段的值是否為空值。

語法:SELECT * | 字段名1,字段名2,…

   FROM 表名

   WHERE 字段名 IS [ NOT ] NULL

舉例:查詢student2表中gender值為空值的記錄。

命令:SELECT * FROM student2 WHERE gender IS NULL;

 結果:

注意:IS NOT NULL 關鍵字用來查詢字段不為空值的記錄。

4.2.5  帶 DISTINCT 關鍵字的查詢

很多表中某些字段的數據存在重復的值,可以使用DISTINCT關鍵字來過濾重復的值,只保留一個值。

語法:SELECT DISTINCT 字段名 FROM 表名;

舉例:查詢student2表中gender字段的值,結果中不允許出行重復的值。

命令:SELECT DISTINCT gender FROM student2;

結果:

注意:DISTINCT 關鍵字還可作用於多個字段,則只有多個字段的值都完全相同時才會被認作是重復記錄。

4.2.6  帶 LIKE 關鍵字的查詢

語法:SELECT * | 字段名1,字段名2,…

   FROM 表名

   WHERE 字段名 [ NOT ] LIKE ‘匹配字符串’;

(1)百分號(%)通配符

匹配任意長度的字符串,包括空字符串。例如,字符串“ c% ”匹配以字符 c 開始,任意長度的字符串,如“ ct  ”,“ cut ”,“ current ”等;字符串“ c%g ”表示以字符 c 開始,以 g 結尾的字符串;字符串“ %y% ”表示包含字符“ y ”的字符串,無論“ y ”在字符串的什么位置。

舉例1:查詢student2表中name字段以字符“ s ”開頭的人的id,name

命令:SELECT id,name FROM student2  WHERE name LIKE "S%"; 

結果:

舉例2:查詢student2表中name字段以字符“ w ”開始,以字符“ g ”結尾的人的id,name。

命令:SELECT id,name FROM student2 WHERE name LIKE 'w%g';

結果:

舉例3:查詢student2表中name字段不包含“ y ”的人的id,name。

命令:SELECT id,name FROM student2 WHERE name NOT LIKE '%y%';

結果:

(2)下划線(_)通配符

 下划線通配符只匹配單個字符,若要匹配多個字符,需要使用多個下划線通配符。例如,字符串“ cu_ ”匹配以字符串“ cu ”開始,長度為3的字符,如“ cut ”,“ cup ”;字符串“ c__l”匹配在“ c ”和“ l ”之間包含兩個字符的字符串,如“ cool ”。需要注意的是,連續的“_”之間不能有空格,例如“M_ _QL”只能匹配“My SQL”,不能匹配“MySQL”。

舉例:查詢在student2表中name字段值以“ wu ”開始,以“ ong ”結束,並且中間只有一個字符的記錄。

命令:SELECT * FROM student2 WHERE name LIKE 'wu_ong';

結果:

注意:若要查詢的字段值本來就含有“ % ”或者“ _ ”,則要用“ \ ”進行轉義,如要查詢本身含有“ % ”的字符串,命令應改為 “ %\%%”。

4.2.7  帶 AND 關鍵字的多條件查詢

在使用SELECT語句查詢數據時,優勢為了使查詢結果更加精確,可以使用多個查詢條件,如使用 AND 關鍵字可以連接兩個或多個查詢條件。

語法:SELECT * | 字段名1,字段名2,…

   FROM 表名

   WHERE 條件表達式1 AND 條件表達式2 [ … AND 條件表達式 n ];

舉例:查詢student2表中 id 字段小於5,並且 gender 字段值為“ 女 ”的人的id和name

命令:SELECT id,name FROM student2 WHERE id<5 AND gender='女';

結果:

4.2.8  帶 OR 關鍵字的多條件查詢

與 AND 關鍵字不同,OR 關鍵字只要滿足任意一個條件就會被查詢出來

語法:SELECT * | 字段名1,字段名2,…

   FROM 表名

   WHERE 條件表達式1 OR 條件表達式2 [ … OR 條件表達式 n ];

舉例:查詢student2表中 id 字段小於3,或者 gender 字段值為“ 女 ”的人的id,name和gender

命令:SELECT id,name ,gender FROM student2 WHERE id<3 OR gender='女';

結果:

4.2.9   OR 和 AND 一起使用的情況

OR 和 AND 一起使用的時候,AND 的優先級高於 OR,因此二者一起使用時,會先運算 AND 兩邊的表達式,再運算 OR 兩邊的表達式。

舉例:查詢student2表中gender值為“女”或者gender值為“男”並且grade字段值為100的人的記錄

命令:SELECT * FROM student2 WHERE gender='女' OR gender='男' AND grade=100;

結果:

 4.3  高級查詢

4.3.1  聚合函數

  函數名稱 作用
    COUNT()     返回某列的行數
    SUM()     返回某列值的和
    AVG()     返回某列的平均值
    MAX()     返回某列的最大值
    MIN()     返回某列的最小值

(1)COUNT()函數:統計記錄的條數

語法:SELECT COUNT(*) FROM 表名

舉例:查詢student2表中一共有多少條記錄

命令:SELECT COUNT(*) FROM student2;

結果:

 

(2)SUM()函數:求出表中某個字段所有值的總和

語法:SELECT  SUM(字段名) FROM 表名;

舉例:求出student2表中grade字段的總和

命令:SELECT SUM(grade) FROM student2;

結果:

(3)AVG()函數:求出表中某個字段所有值的平均值

語法:SELECT AVG(字段名) FROM 表名;

舉例:求出student2表中grade字段的平均值

命令:SELECT AVG(grade) FROM student2;

結果:

(4)MAX()函數:求出表中某個字段所有值的最大值

語法:SELECT MAX(字段名) FROM 表名;

舉例:求出student2表中所有人grade字段的最大值

命令:SELECT MAX(grade) FROM student2;

結果:

(5)MIN()函數:求出表中某個字段所有值的最小值

語法:SELECT MIN(字段名) FROM 表名;

舉例:求出student2表中所有人grade字段的最小值

命令:SELECT MIN(grade) FROM student2;

結果:

4.3.2  對查詢結果進行排序

語法:SELECT 字段名1,字段名2,…

   FROM 表名

   ORDER BY 字段名1 [ ASC | DESC ],字段名2 [ ASC | DESC ]…

在該語法中指定的字段名是對查詢結果進行排序的依據,ASC表示升序排列,DESC 表示降序排列,默認情況是升序排列。

舉例1:查出student2表中的所有記錄,並按照grade字段進行升序排序

命令:SELECT * FROM student2

   ORDER BY grade;

結果:

舉例2:查出student2表中的所有記錄,並按照grade字段進行降序排序

命令:SELECT * FROM student2

   ORDER BY grade DESC;

結果:

4.3.3  分組查詢

在對表中數據進行統計的時候,可以使用GROUP BY 按某個字段或者多個字段進行分組,字段中值相同的為一組,如男生分為一組,女生分為一組。

語法:SELECT  字段名1,字段名2,…

   FROM 表名

   GROUP BY 字段名1,字段名2,… [ HAVING 條件表達式 ];

(1)單獨使用 GROUP BY 進行分組

單獨使用GROUP BY 關鍵字,查詢的是每個分組中的一條記錄

舉例:查詢student2表中的數據,按照gender字段進行分組。

命令:SELECT * FROM student2 GROUP BY gender;

結果:

注意:若在此2例中鍵入命令之后出現“#1055”錯誤,無法完成分組查詢,是由於MySQL版本升級到了5.7,可自行百度“MySQL 1055錯誤”參考解決辦法。

(2) GROUP BY 和聚合函數一起使用

GROUP BY 和聚合函數一起使用,可以統計出某個或者某些字段在一個分組中的最大值、最小值、平均值等。

舉例:將student2表按照gender字段進行分組查詢,計算出每組共有多少個人。

命令:SELECT COUNT(*) ,gender FROM student2 GROUP BY gender;

結果:

(2) GROUP BY 和 HAVING 關鍵字一起使用

 HAVING關鍵字和WHERE關鍵字的作用相同,區別在於HAVING 關鍵字可以跟聚合函數,而WHERE 關鍵字不能。通常HAVING 關鍵字都和GROUP BY一起使用,用於對分組后的結果進行過濾。

舉例:將student2表按照gender字段進行分組查詢,查詢出grade字段值之和小於300的分組

命令:SELECT sum(grade),gender FROM student2 GROUP BY gender HAVING SUM(grade) < 300;

結果:

4.3.4  使用 LIMIT 限制查詢結果的數量

語法:SELECT 字段名2,字段名2,…

   FROM 表名

   LIMIT [ OFFSET ,] 記錄數

在此語法中,LIMIT 后面可以跟兩個參數,第一個參數“ OFFSET ”表示偏移量,如果偏移量為0,則從查詢結果的第一條記錄開始,偏移量為1則從查詢結果中的第二條記錄開始,以此類推。OFFSET為可選值,默認值為0,第二個參數“記錄數”表示指定返回查詢記錄的條數。

舉例1:查詢student2表中的前四條記錄。

命令:SELECT * FROM student LIMIT 4;

結果:

舉例2:查詢student2表中grade字段從第五位到第八位的人(從高到低)

命令:SELECT * FROM student2 ORDER BY grade DESC LIMIT 4,4;

結果:

4.3.5  函數(列表)

  MySQL有如下常用函數:

  1.數學類函數

  

  2.字符串類函數

  

  3.日期和時間函數

  

  4.條件判斷函數

   

  5.加密函數

   

4.4  為表和字段取別名

4.4.1 為表取別名

在進行查詢操作時,如果表名很長使用起來不方便,可以為表取一個別名來代替表的名稱。

語法:SELECT * FROM 表名 [ AS ] 別名;

舉例:為student2表起一個別名s,並查詢student2表中gender字段值為“女”的記錄

命令:SELECT * FROM student2 AS s WHERE s.gender='女';

結果:

4.4.1 為字段取別名

語法:SELECT 字段名 [ AS ] 別名 [ ,字段名 [AS] 別名,…]  FROM 表名 ;

舉例:查詢student2表中的所有記錄的name和gender字段值,並未這兩個字段起別名stu_name和stu_gender

命令:SELECT name AS stu_name,gender AS stu_gender FROM student2;

結果:

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM