MySQL 增刪查改 必知必會


MySQL 數據庫中的基礎操作

3、表的修改

對表的表名、字段、字段類型、字段長度、約束等進行修改。

3.1 表的名稱修改

-- 語法:

ALTER TABLE 庫名.表名

RENAME TO 新表名;

-- 將foods表的名字修改為空food
ALTER TABLE test.`foods`
RENAME TO food;

3.2 修改表的字段或者約束(修改表結構)

3.2.1 為表添加/刪除主鍵約束

-- 語法:

ALTER TABLE 庫名.表名

ADD PRIMARY KEY(字段名);

-- 為表aa中的字段salary 添加主鍵約束
ALTER TABLE test.`aa`
ADD PRIMARY KEY(salary);
DESC test.`aa`; -- 查看添加主鍵約束結果

-- 語法:

ALTER TABLE 庫名.表名

DROP PRIMARY KEY;

-- 刪除sales表的主鍵customer_no約束
ALTER TABLE test.`sales`
DROP PRIMARY KEY; -- 刪除主鍵約束

3.2.2 為表添加非空約束

-- 語法:

ALTER TABLE 庫名.表名

MODIFY 字段名 數據類型(數據長度) NOT NULL;

-- 修改sales表約束,使客戶名稱customer_name不允許為空
ALTER TABLE test.`sales`
MODIFY customer_name INT(10) NOT NULL;

3.2.3 修改表中某個字段的名稱

-- 語法:

ALTER TABLE 庫名.表名

CHANGE 原字段名 新字段名 字段類型(數據長度);

-- 修改表sales,將字段`product_name`名稱修改為pct_name
ALTER TABLE test.`sales`
CHANGE product_name pct_name VARCHAR(30);

3.2.4修改表中某個字段的數據類型

-- 語法:

ALTER TABLE 庫名.表名

MODIFY [COLUMN] `字段名` 新數據類型(新數據長度);

-- 修改sales表中字段`pct_name`的字段類型為char(20)
ALTER TABLE test.`sales`
MODIFY pct_name CHAR(20); -- 修改數據庫長度

3.2.5添加字段

-- 語法:

ALTER TABLE 庫名.表名

ADD [COLUMN] `字段名` 數據類型(數據長度);

ALTER TABLE test.`sales`
ADD COLUMN product_name VARCHAR(30);

3.2.6刪除表中指定的字段

-- 語法:

ALTER TABLE 庫名.表名

DROP COLUMN 字段名;

 

-- 刪除表sales中的字段pct_name (面試題)
ALTER TABLE test.`sales`
DROP COLUMN pct_name;

3.2.7將表中指定字段設置為外鍵

-- 語法:

ALTER TABLE 庫名.表名

ADD CONSTRAINT 外鍵約束名稱 FOREIGN KEY(本表設置為外鍵字段的名稱)

REFERENCES 庫名.`被引用字段的表名稱`(被引用字段的名稱);

-- 為test庫中表student的字段classno添加外鍵約束,
-- 該外鍵字段的數據引用自表sclass的主鍵字段cno
ALTER TABLE test.`student`
ADD CONSTRAINT student_classno_fk FOREIGN KEY(classno)
REFERENCES test.`sclass`(cno);

3.2.8刪除表中指定字段的外鍵約束

步驟一:刪除外鍵約束

-- 語法

ALTER TABLE 庫名.表名

DROP FOREIGN KEY 外鍵約束名稱;

步驟二:刪除外鍵索引

DROP INDEX 索引名稱 ON 庫名.表名;

-- 刪除test庫student表的字段classno的外鍵約束student_classno_fk
-- 步驟一 刪除約束
ALTER TABLE test.`student`
DROP FOREIGN KEY student_classno_fk;
-- 步驟二 刪除索引
DROP INDEX student_classno_fk ON test.`student`;

3.2.9修改指定表的表名

-- 語法

RENAME TABLE 庫名.舊表名 TO 新表名;

-- 將test庫class表的名稱修改為classb
RENAME TABLE test.`class` TO classb;

4、 表結構的刪除(就是刪除表)

-- 語法:

DROP TABLE 庫名.表名;

--刪除classb表
DROP TABLE test.`classb`;

表中數據的操作

1、往表中插入數據

-- 語法

INSERT INTO 庫名.表名(字段名1,字段名2)

VALUES(字段值1,字段值2);

-- 往表zhaosheng3種插入一條數據,學號為3,姓名為鄭爽,班號為1,
zsbh字段的值為4

-- 方法一、
INSERT INTO test.`zhaosheng3`
VALUES(3,"鄭爽",1,4);

-- 方法二、
INSERT INTO test.`zhaosheng4`(xuehao,xingming,banhao,zsbh)
VALUES(4,"鄭爽1",2,5);
-- 往表temp種插入100數據,數據來源於employees表
INSERT INTO hrdb.`temp` SELECT employee_id,first_name,salary 
FROM hrdb.`employees` LIMIT 100; 
 -- limit 限制,limit 100,取前100條數據
-- select子句的字段數量、數據類型需要和insert子句中的對應

2、修改表中的數據

語法:

UPDATE 庫名.表名

SET 字段名1=新字段值1

WHERE 字段名2=字段值2;

2.1 修改單字段數據

-- 修改student數據庫表score中的數據,修改編號為1的記錄的姓名為孫琦
UPDATE
student.`score` SET NAME="孫琦" WHERE id=1;

2.2 修改多字段數據

-- 修改student數據庫score 表中數據,修改姓名為李四的記錄,將語文成績修改為81,英語成績修改為90
UPDATE
student.`score` SET chinese=81,english=90 WHERE NAME="李四";

2.3 修改多條記錄的數據

-- 修改student數據庫score 表中數據,修改語文成績大於80的記錄,將語文成績修改為100
UPDATE student.`score`
SET chinese=100
WHERE chinese>80;

3.刪除表中的數據

 3.1刪行

-- 方法一:

-- 語法:

DELETE FROM 庫名.表名 WHERE 字段名1=字段值1;(刪除指定數據)

-- 重點說明:刪除表中數據時,如果不加where默認刪除表中所有數據(清空表)

-- 重點說明:使用delete刪除表中數據時,delete后不能跟*號,delete不能和*號搭配使用。

-- 刪除student庫score表中english成績為84
DELETE FROM student.`score`
WHERE english=84;

3.2刪全表

清空score表中所有記錄
方法一
DELETE FROM student.`score`;

方法二
TRUNCATE student.`score`;
TRUNCATE school.`test`;

-- TRUNCATE 刪除的意思,使用truncate刪除的數據,無法恢復,

-- truncate不能和from、where配合使用

4、查詢表中的數據(重中之重)

4.1 查詢單個表中的數據

4.1.1結構化查詢語言-SQL語言

結構化查詢語言(Structured QUERY Language或簡稱為SQL),即SQL語言,是一種應用

最為廣泛的關系數據庫語言,該語言定義了操作關系數據庫的標准語法,幾乎所有的關系

數據庫管理系統都支持SQL語言。【關系型數據庫:mysql、oracle、SQL server、DB2、

sybase】

SQL語言分類:

下面的五大分類要能講出來

  • DDL(Data Definition Language)(數據定義語言) - Create、Alter、Drop
  • DQL(Data QueryLanguage)(數據查詢語言) - SELECT 查詢語句
  • DML(Data Manipulation Language)(數據操縱語言) - Insert、Update、Delete
  • DTL(Data Transaction Language)(事務控制語言) - COMMIT(提交)、Rollback(回滾) 事務提交與回滾語句
  • DCL(Data Control Language)(數據控制語言) - GRANT(授權)、Revoke(回收權限) 授予權限與回收權限語句

Select語句語法如下:

(1)SELECT 字段列表

(2)FROM 數據表

(3)where條件

(4)GROUP BY 分組字段

(5)having條件

(6)ORDER BY 排序字段  ASC | DESC  

(7)LIMIT START,LENGTH;

【划重點】:select語句中,各子句出現的順序不能亂,否則報錯

-- 邏輯運算符:not 非,and 和,or 或

-- not 表達式:取表達式計算結果相反的數據

4.1.2普通查詢

-- 查詢員工表(employees)中所有人員的所有信息
SELECT * FROM hrdb.`employees`;

 

-- 查詢員工表中員工編號為101的員工的員工編號、工資
SELECT employee_id,salary
FROM hrdb.`employees`
WHERE employee_id=101;

4.1.3關鍵字in在查詢語句中的用法

說明:當查詢條件給出的為多個類似的值時,可以使用關鍵字IN,不同值之間使用逗

號隔開,

-- 語法

-- in(值1,值2...)

-- 查詢工資分別為9000、10000、18000的員工編號、工資
SELECT employee_id,salary
FROM hrdb.`employees`
WHERE salary IN(9000,10000,18000);

 

4.1.4關鍵字between...and...的用法

說明:between...and...意思是在...和...之間

-- between 值1 and 值2,意思是在值1和值2之間

-- 查詢工資在3000-6000之間的人員的工資、員工編號、職位編號
SELECT
salary,employee_id,job_id FROM hrdb.`employees` WHERE salary BETWEEN 3000 AND 6000; -- 查詢結果包括邊界3000和6000

 

4.1.5 null關鍵字在查詢語句中的用法

-- 說明:null為空、不確定的意思

-- 說明:

-- is null代表為空的意思, is not null為非空的意思

-- 判斷某個字段值為空,不能使用=null

-- 查詢部門表中經理編號為空的部門的編號、部門名稱、經理編號
SELECT
department_id,department_name,manager_id FROM hrdb.`departments` WHERE manager_id IS NULL;

 

4.1.6聚合函數的用法

-- 說明:聚合函數即分組函數,主要包括:求最大值max()函數、最小值min()函數、

-- 平均值avg()函數、求和sum()函數

-- 統計條數count()函數。

-- 查詢員工表中的最高工資、最低工資、平均工資、工資總和
SELECT MAX(salary) AS 最高工資,MIN(salary) AS 最低工資,
AVG(salary) AS 平均工資,SUM(salary) AS 工資之和
FROM hrdb.`employees`; 
-- as后為別名,as 是單詞alias單詞的簡寫,別名的意思
-- as 可以省略

4.1.7計數

-- 查詢員工表中的所有人員的工資之和以及人員的數量
方法一
SELECT SUM(salary),COUNT(employee_id)
FROM hrdb.`employees`;

方法二
SELECT SUM(salary),COUNT(*)
FROM hrdb.`employees`;-- *號代表所有記錄

方法三
SELECT SUM(salary),COUNT(1)
FROM hrdb.`employees`;-- *號代表所有記錄
-- 在部門表中,統計部門表中部門的數量
SELECT COUNT(*) FROM hrdb.`departments`;
SELECT COUNT(manager_id) FROM hrdb.`departments`;

-- 總結:

-- 使用count()函數統計表中記錄的數量時:

-- 使用*作為count()函數進行統計時,結果包含所有記錄

-- 使用單個字段作為count()函數的參數進行統計時,結果不統計字段值為null 的記錄。

4.1.8 分組查詢關鍵字group by用法

 

-- 說明:

-- group by 字段名/聚合函數, 意思是先通過給定的【字段名/聚合函數】先進行分組,

-- 再對分組后的數據進行分別處理【求和、求平均值、統計數量等】。

-- 查詢時,什么時候需要對數據進行分組?

-- 一般查詢問題為“每個...”,“各...”的時候,需要對數據進行分組

-- 查詢員工表中每個部門人員的平均工資,查詢結果顯示部門編號、平均工資
SELECT department_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id; 
-- 先對employees表的數據進行分組,再對每個組中的數據求平均值

4.1.9 使用group by關鍵字進行多字段分組

-- 查詢不同部門中,不同職位的人員的平均工資,查詢結果顯示部門編號、職位編號、平均工資
SELECT department_id,job_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id,job_id;


4.1.10對group by分組后的結果數據使用having關鍵字進行過濾

-- 說明:having關鍵字,可以對分組后的數據進行過濾,類似於where的作用,但又不同於where.

-- having 后的過濾條件,可以跟字段,也可以跟聚合函數。

-- 查詢員工表中不同部門人員的平均工資,查詢結果要求只顯示平均工資高於12000的部門編號、平均工資
SELECT department_id,AVG(salary)
FROM hrdb.`employees`
GROUP BY department_id
HAVING AVG(salary) >12000;

 

4.1.11 對查詢結果使用order by關鍵字進行排序

-- 說明:mysql中查詢,查詢結果默認按升序(從上到下,按從小到大)排列

-- 升序排列:

--不加排序關鍵字/使用關鍵字 ASC

-- 降序排列:

-- 使用關鍵字DESC

-- 排序關鍵字使用語法:order by 字段名 [asc|desc],

-- 意思是通過給定的字段名將查詢結果進行排序(升序或者降序)

-- 查詢員工表中所有人員的工資,查詢結果按工資高低升序排列,結果顯示員工編號、工資

方法一 默認升序排列
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary;

方法二、使用升序排列關鍵字asc
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary ASC; -- asc用於升序排列

 

4.1.12查詢關鍵字limit的用法-分頁查詢

-- 說明:limit限制的意思,在sql語句可以對查詢結果進行過濾

-- 在mysql中,limit m,n,意思是從第m+1條數據開始取數據,連續取n條數據,顯示在查詢結果中。

-- 查詢員工表中所有人員的工資,查詢結果按工資高低降序排列,結果顯示工資前四高的員工編號、工資
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary DESC
LIMIT 4;
-- 查詢員工表中所有人員的工資,查詢結果按工資高低降序排列,結果顯示工資第四高的員工編號、工資
SELECT employee_id,salary
FROM hrdb.`employees`
ORDER BY salary DESC
LIMIT 3,1;  
-- 從第3+1條(即第4條)數據開始取數據,只取1條

MySQL 數據庫 查 續


免責聲明!

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



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