MySQL Day02 數據管理及DML語言

MySQL 數據管理DML語言

1 外鍵(瞭解即可)

流程圖描述:

在這裏插入圖片描述

MySQL代碼測試:

(首先將數據庫中表清空,隨後輸入以下操作,要嚴格按照語句輸入,不然會報錯

方式一、在創建表的時候,增加約束(比較麻煩,也比較複雜)

-- 定義年級表:
CREATE TABLE `grade`( 
	`gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級id',
	`gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
	PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 定義學生表:
-- 學生表的gradeid字段需要引用年級表的gradeid
-- 1.定義外鍵KEY
-- 2.給這個外鍵添加約束(執行引用)
CREATE TABLE IF NOT EXISTS `student`(
	`id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
	`name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
	`pwd` VARCHAR(20) NOT NULL DEFAULT '123456'	COMMENT '密碼',
	`gender` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性別',
	`birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
	`gradeid` INT(10) NOT NULL COMMENT '學生的年級',  
 	`address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
	`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
	PRIMARY KEY(`id`),
	KEY `FK_gradeid`(`gradeid`), -- 定義外鍵
	CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) -- 添加約束
)ENGINE=INNODB DEFAULT CHARSET=utf8

說明:上述代碼核心是:

KEY `FK_gradeid`(`gradeid`), -- 定義外鍵
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) -- 添加約束

運行成功後查看外鍵:

在這裏插入圖片描述

刪除有外鍵關係的表的時候,必須先刪除引用別人的表(從表),再刪除被引用的表(主表)

方式二、創建普通的表成功後,添加外鍵約束

-- 創建表的時候沒有外鍵關係
ALTER TABLE `student` 
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade`(`gradeid`);

-- ALTER TABLE 表名 ADD CONSTRAINT 約束名 FOREIGN KEY(作爲外鍵的列) REFERENCES 主表(被引用字段); 

成功執行~

以上的操作都是物理外鍵,數據庫級別的外鍵,不建議使用!(避免數據庫過多造成困擾)

最佳實踐:

  • 數據庫就是單純的表,只用來存數據,只有行(數據)和列(數據)
  • 如果想使用多張表的數據,使用外鍵(程序使用)

2 DML語言(全部記住)

數據庫存在意義:數據存儲和數據管理

DML語言:數據操作語言

  • INSERT 插入
  • UPDATE 修改
  • DELETE 刪除

2.1 添加(INSERT)

(說明:以下代碼執行環境爲兩個表:grade+student,且無外鍵!)

代碼測試:

-- 如果不寫表的字段,插入語句就會一一匹配,所以寫插入語句,必須保證數據與字段一一對應!

-- 向年級表中插入數據
INSERT INTO `grade`(`gradename`) VALUES('大一')

-- 插入多個字段
INSERT INTO `grade`(`gradename`) 
VALUES('大二'),('大三'),('大四');

-- 向學生表中插入數據
INSERT INTO `student` (`name`,`pwd`,`gender`,`gradeid`) VALUES ('張三','aaaaaa','男',4);
-- 插入多個字段
INSERT INTO `student` (`name`,`pwd`,`gender`,`gradeid`) 
VALUES ('王五','111111','男',3),('張三','aaaaaa','男',2),('李四','bbbbbb','男',1);

語法:INSERT INTO 表名([字段名1][字段2][字段3]...) VALUES('值1','值2','值3',...);

注意事項:

  1. 字段和字段之間必須使用 英文逗號 隔開
  2. 字段可以省略,但是後面的數值必須與字段一一對應
  3. 可以同時插入多條數據,VALUES後面的值需要使用VALUES(),(),...

2.2 修改(UPDATE)

代碼測試:

-- 修改學生姓名、郵箱
UPDATE `student` SET `name`='Demut',`email` = '[email protected]' WHERE id = 1;

-- 不指定條件的情況下,默認全部更改! 
-- 注意:以下語句謹慎執行!
UPDATE `student` SET `name` = '長江七號'; 

運行結果:

在這裏插入圖片描述

語法:

UPDATE 表名 SET column_name = value,[column_name = value],... WHERE [條件]

條件:WHERE字句運算符 id等於/大於/某一區間

操作符返回布爾值。

操作符 含義 範圍 結果
= 等於 5=6 false
<>或!= 不等於 5<>6 true
> 大於 5>6 false
< 小於 5<6 true
>= 大於等於 5>=6 true
<= 小於等於 5<=6 true
BETWEEN … AND … 閉區間 [2, 5]
AND 我和你&& 5>1 AND 1<2 false
OR 我或你|| 5>1 OR 1<2 true
-- 通過多個條件定位數據
UPDATE `student` SET `name`='長江七號' WHERE `name` = '張三' AND `gender` = '男';

注意:

  • column_name 是數據庫的列,儘量帶上``
  • 條件:篩選的條件,如果沒有指定,則會修改所有的列
  • value,是一個具體的值,也可以是一個變量
  • 多個設置的屬性之間使用英文逗號隔開

2.3 刪除(DELETE)

DELETE命令

語法:DELETE FROM 表名 [WHERE 條件]

-- 刪除指定數據數據 
DELETE FROM `student` WHERE id=2;

-- 刪除數據 (注意,以下代碼謹慎執行,會全部刪掉!)
DELETE FROM `student`

運行結果:

在這裏插入圖片描述

TRUNCATE 命令~刪庫跑路

作用:完全清空一個數據庫表,表的結構和索引約束不會變!

-- 清空student表
TRUNCATE `student`

DELETE的TRUNCATE區別:

  • 相同點:都能刪除數據,都不會刪除表結構

  • 不同點:

    • TRUNCATE 重新設置自增列,計數器會歸零
    • TRUNCATE 不會影響事務
  • 以下代碼可自行測試:

    -- 測試DELETE和TRUNCATE區別
    CREATE TABLE `test`(
    	`id` INT(4) NOT NULL AUTO_INCREMENT,
    	`name` VARCHAR(20) NOT NULL,
    	PRIMARY KEY(`id`)
    )ENGINE=INNODB DEFAULT CHARSET=utf8
    
    INSERT INTO `test`(`name`) VALUES('1'),('2'),('3')
    
    DELETE FROM `test` -- 不會影響自增
    
    TRUNCATE TABLE `test` -- 自增會歸零
    

補充說明:DELETE刪除的問題,重啓數據庫,現象

  • InnoDB 自增列會從1開始(存在內存中,斷電即失)
  • MyISAM 繼續從上一個自增量開始(存在文件中,不會丟失)

寫在最後

Instead, speaking the truth in love, we will grow to become in every respect the mature body of him who is the head, that is, Christ. (Ephesians 4:15)
To Demut!

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