MySQL學習筆記(4)——(基本CRUD)操作數據庫中的表的數據

MySQL學習筆記(4)——(基本的增刪改查)操作數據庫中的表的數據

參考:https://www.bilibili.com/video/BV1NJ411J79W?p=17

1.外鍵(瞭解即可)

表名 字段 備註
student(學生表) id;name;age;major 學號,姓名,年齡,所屬專業
major(專業表) id;name 專業ID,專業名稱

1.1 方式一:建表時給表設置約束

DROP TABLE IF EXISTS `major`;
CREATE TABLE `major` (
  `majorid` int(8) NOT NULL DEFAULT '0' COMMENT '專業ID',
  `majorname` varchar(50) DEFAULT NULL COMMENT '專業名稱',
  PRIMARY KEY (`majorid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 學生表的majorid字段,要去引用專業表的majorid
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(8) NOT NULL DEFAULT '0' COMMENT '學生號',
  `majorid` varchar(50) DEFAULT NULL COMMENT '專業名稱',
  `age` int(3) DEFAULT NULL COMMENT '學生年齡',
  `name` varchar(20) DEFAULT NULL COMMENT '學生姓名',
  PRIMARY KEY (`id`),
   KEY `FK_majorid`(`majorid`),
   CONSTRAINT `FK_majorid` FOREIGH KEY(`majorid`) REFERENCE `major`(`majorid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

核心就兩句:

   KEY `FK_majorid`(`majorid`),
   CONSTRAINT `FK_majorid` FOREIGH KEY(`majorid`) REFERENCE `major`(`majorid`)

刪除有外鍵關係的表的時候,需要先刪除被引用的表纔可刪除。

1.2 方式二:建表後添加外鍵約束

ALTER TABLE `student`
ADD CONSTRAINT `FK_major_name` FOREIGH KEY(`majorid`) REFERENCE `major`(`majorid`)

1.3 外鍵趨勢:程序實現

以上均爲物理外鍵(即數據庫級別的外鍵),不建議使用,避免數據庫中的表過多造成困擾

建議邏輯外鍵,即從程序上去解決。

阿里巴巴JAVA開發規範中有如下規定:

【強制】不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。

知乎:大家設計數據庫時使用外鍵嗎?

數據庫中爲什麼不推薦使用外鍵約束

2.DML語言:數據庫管理語言(增刪改)

  • 插入語句 insert
  • 更新語句 update
  • 刪除語句 delete

查找爲:DQL 數據庫查詢語言,也是SQL核心⚡️

以下操作的例子即 以下建表sql語句對應的表

DROP TABLE IF EXISTS `major`;
CREATE TABLE `major` (
  `majorid` int(8) unsigned NOT NULL AUTO_INCREMENT COMMENT '專業ID',
  `majorname` varchar(50) DEFAULT NULL COMMENT '專業名稱',
  `number` int(4) unsigned DEFAULT 0 COMMENT '專業人數',
  PRIMARY KEY (`majorid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.1 插入數據 insert

格式:

插入一行:INSERT INTO 表名([字段名1,字段名2,字段名3]) values(‘值1’,‘值2’,‘值3’…);

插入多行:INSERT INTO 表名([字段名1,字段名2,字段名3]) values(‘值1’,‘值2’,‘值3’…),(‘值1’,‘值2’,‘值3’…);

注意:字段與數據一一對應

--varchar的值用單引號或多引號
-- 單個數據 id爲主鍵但是自增 可省略
INSERT INTO `major`(`majorname`) values("計算機科學與技術"); 

--一行多個數據
INSERT INTO `major`(`majorid`,`majorname`) values(9,'大數據科學');

-- 多行數據
INSERT INTO `major`(`majorid`,`majorname`) values(6,'網絡工程'),(10,"軟件工程");

2.2 更新數據 update

update 表名 set 字段名=值,[]where[條件]

注意:一定要寫條件!不寫則所有的都會更新

數據庫的列儘量加上``,防止衝突

多個更新的屬性間逗號隔開

--更新一個字段的數據
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid=9;

--更新一條數據中的多個字段的數據 逗號隔開
UPDATE `major` SET `majorname`='大數據科學',`number`=10 WHERE majorid=9;

在where條件語句中支持以下運算符:

  1. 等於 =
  2. 不等於 !=或者<> 可用NOT代替
  3. 大於,大於等於,小於,小於等於 > >= < <=
  4. 區間 BETWEEN… AND …
  5. AND或者&& 兩條件都滿足
  6. OR或者|| 兩條件滿足一個即可

以下爲SQL語句舉例:

-- where條件語句中運算符舉例
-- 1.等於 =
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid=9;

-- 2.不等於 !=或者<>
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid!=9;
UPDATE `major` SET `majorname`='物聯網工程' WHERE NOT majorid=9; -- 與上面語句等價

-- 3.大於,大於等於,小於,小於等於 > >= < <=
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid>9;

-- 4.區間 BETWEEN... AND ...  
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid BETWEEN 3 AND 5; -- [3,5],3和5都包含

-- 5.AND  兩條件都滿足
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid < 10 AND number<100;

-- 6.OR  兩條件滿足一個即可
UPDATE `major` SET `majorname`='物聯網工程' WHERE majorid < 10 OR number<100;

除此之外where還可以接like,in,子查詢等,後面select查詢再詳寫。

2.3 刪除數據 delete

delete from 表名 where 條件

一定要加where條件語句,否則會把整個表的數據刪除,僅保留表結構

delete 舉例:

DELETE FROM major WHERE majorid < 10; --把majorid小於10的數據刪除

3.DQL語言 select(​核心⚡️)

DATA QUERY LANGUAGE數據查詢語言:數據庫中最核心的操作,使用頻率最高。

3.1 基本的查詢語句(指定查詢字段)

最簡單的格式1:SELECT 字段 FROM 表

-- 查詢所有表中記錄 *爲通配符
SELECT * FROM major;  

-- 查詢major表的所有majorname和majorid 逗號隔開即可
SELECT `majorid`,`majorname` FROM major;  

-- 別名 AS  給字段或表起個別名
SELECT `majorid` AS ID,`majorname` AS 專業名 FROM major AS m;

-- 拼接字符串函數  CONCAT(a,b)
SELECT CONCAT('**',majorname) AS 專業名 FROM major

-- 去重 DISTINCT關鍵字 使其只出現以此,不會有重複的數據
SELECT DISTINCT `majorname`FROM major;

AS 別名,使用效果:

別名 CONCAT(a,b) 拼接字符串函數,使用效果:

concat字符拼接

3.2 數據庫其他查詢表達式

MySQL版本查詢函數,算術表達式求值,查詢自增步長,查詢字段支持算數運算

-- 使用函數查詢MySQL數據庫版本
SELECT VERSION();

-- SELECT計算算術表達式
SELECT 20*8+99 AS result;

-- 查詢自增步長
SELECT @@auto_increment_increment;

-- SELECT查詢 字段進行算術運算
SELECT number,number*10 AS 'result of num*10' FROM major;

上述SQL的運行效果如下:

sql查詢表達式

因此SELECT除了可以查詢字段之外,還可接表達式,如 文本值,列,Null,函數,計算表達式,系統變量…

格式2select 表達式 from 表

3.3 where子句詳解

where子句作用:檢索數據中符合條件的值

where子句在增刪改查(insert,delete,update,select)的使用是一樣的,這裏只是單獨以select爲例子。

格式3:select 字段/表達式 from 表 where 條件

之前的update章節寫過一點,這裏以表格做總結:

邏輯運算符 (建議使用英文關鍵字) 與 或 非

邏輯運算符寫法 使用舉例 說明
and 或者 && …where majorid < 10 AND number<100 邏輯與,都滿足才成立
or 或者 || …where majorid < 10 OR number<100 邏輯或,滿足其一便可成立
not 或者! …where NOT majorid = 10等價於majorid != 10 邏輯非,取反面

模糊查詢:比較運算符 (在SQL中運算符不一定是符號)

比較運算符 使用舉例 說明
IS NULL where majorname IS NULL (空值)條件是majorname是NULL的情況下
IS NOT NULL where majorname IS NOT NULL (非空值)條件是majorname不是NULL的情況下
BETWEEN…AND where number BETWEEN 1 AND 100 number在1到100之間
LIKE where name LIKE ‘李%’ SQL匹配,%代表0到任意個字符,_代表一個字符
IN where a in (a1,a2,a3) 假設a在a1,或a2或a3中的某一個值中,那結果爲真
1. IS NULL和IS NOT NULL使用舉例
-- 查詢專業爲空的學生學號和姓名,專業爲varchar類型
SELECT id , name ,major  FROM student WHERE major IS NOT NULL;
-- 爲了防止不是NULL 但是 是空字符串的情況
SELECT id , name ,major  FROM student WHERE major IS NOT NULL AND major !='';

null

NULL也就是在字段中存儲NULL值,空值也就是字段中存儲空字符(’’),

空值建議用IS NULL和IS NOT NULL做查詢條件

空字符則建議用算術運算符比較( =或者!=、<、> )

而且空字符(’’)和含有空格的字符是不一樣的(’ ') :

空字符(’’)長度爲0,含有空格的字符(’ ') 長度爲1

關於更多NULL和空字符的區別和細節,大家可以自行搜索查閱。

說說MySQL 中NULL和空字符(’’)的區別

2. BETWEEN…AND的使用舉例
-- 查詢學號在5到10之間的學生的學號,姓名和專業
SELECT id,name,major FROM student where id BEWEEN 5 AND 10;
3. LIKE關鍵字的使用舉例

關鍵:%代表0到任意個字符,_代表一個字符

-- 查詢名字以李開頭 的同學的姓名和專業
SELECT name,major FROM student where name LIKE '李%' ;

-- 查詢名字以李開頭,但是名字只有兩個字的同學的 名字和專業
SELECT name,major FROM student where name LIKE '李_' ;

-- 查詢名字以李開頭,但是名字只有三個字的同學的 名字和專業
SELECT name,major FROM student where name LIKE '李__' ;

-- 查詢名字中包含 明 字的同學的 名字和專業  %明% 含義:明 前後有任意個數字符
SELECT name,major FROM student where name LIKE '%明%' ;

以上SQL執行效果:

LIKE關鍵字匹配

4. IN關鍵字的使用舉例

關鍵:在...裏面

-- 查詢學號爲3,5,9的學生的姓名和專業
SELECT id,name,major FROM student where id IN(3,5,9);
-- 等價於
SELECT id,name,major FROM student where id =3 OR id =5 OR id =9;

IN()括號當中只能爲具體的值或字符,不能只用%和_這些匹配符

除了這些基本的查詢之外還有聯表查詢,子查詢,嵌套查詢,下篇筆記詳解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章