MySQL筆記3:外來鍵(瞭解),DML語言
阿新 • • 發佈:2022-05-09
3. MySQL資料管理
3.1 外來鍵(瞭解,實際上不用
表和表的聯絡。(物理外來鍵,資料庫級別外來鍵,不建議使用,避免資料庫過多造成困擾)
刪除時要先刪除引用別人的表(從表),再刪除被引用的表(主表)
方法1
建立表時,定義外來鍵,新增約束,進行引用
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=utf8mb4 -- 學生表的gradeid欄位要引用 年紀表的gradeid -- 定義外來鍵key -- 給外來鍵新增約束 (執行引用) 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 '密碼', `sex` VARCHAR(3) 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 'email', PRIMARY KEY(`id`), KEY `FK_gradeid` (`gradeid`), CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`) )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
方法2
建立表後,新增外來鍵
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=utf8mb4 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 '密碼', `sex` VARCHAR(3) 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 'email', PRIMARY KEY (`id`) )ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin -- 建立表時沒有外來鍵關係 -- ALTER TABLE 表名 ADD CONSTRAINT 約束名 FOREIGN KEY(作為外來鍵的列) REFERENCES 表名(引用的欄位); ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
期望資料庫
- 資料庫只作為單純表,只用來存資料,只有行(資料)和列(欄位)
- 想使用多張表的資料,使用外來鍵(程式實現)
3.2 DML語言(重要
資料庫的意義:資料儲存,管理
DML語言:資料操作語言
- insert:新增
- update:修改
- delete:刪除
3.2.1 新增insert
語法:insert into 表名([欄位1,欄位2,欄位3]) values('值1','值2','值3'),('值1','值2','值3')...
注意事項:
- 欄位間使用英文逗號隔開
- 欄位可以省略,但後面的值要按順序一一對應,不能缺少亂序
- 可以同時插入多條資料,values後的值需要使用
,
隔開,values('值1'),('值2')...
-- 插入語句(新增)
-- insert into 表名([欄位1,欄位2,欄位3]) values('值1','值2','值3'),('值1','值2','值3')...
INSERT INTO `grade`(`gradename`) VALUES('四')
-- 由於主鍵自增,可以省略主鍵。如果不寫表的欄位,會一一匹配
INSERT INTO `grade` VALUE ('三')
-- 寫插入語句,要資料和欄位一一對應
-- 插入多個欄位
INSERT INTO `grade` (`gradename`) VALUE ('二'),('一')
INSERT INTO `student`(`name`) VALUE ('A1')
INSERT INTO `student`(`name`,`pwd`,`sex`) VALUE ('T1','123890','women')
INSERT INTO `student`(`name`,`pwd`,`sex`) VALUE ('B1','123001','women'),('B2','123000','men')
3.2.2 修改 update
修改目標,set 列名 = 新值
語法:UPDATE 表名 SET 列 = 新值,[列 = 新值] WHERE [條件]
條件:where子句 運算子,可以通過多個條件定位資料
操作符 | 含義 | 範圍 | 結果 |
---|---|---|---|
= | 等於 | 5=6 | false |
<> 或 != | 不等於 | 5<>6 | true |
> | 大於 | ||
< | 小於 | ||
>= | 大於等於 | ||
<= | 小於等於 | ||
between .. and ... | 在某個範圍內(包含兩端) | [2,5] | |
and | 和,&& | ||
or | 或,|| |
注意:
- 列(colnum_name)儘量帶上``
- 條件,篩選的條件,如果沒有指定,則會修改所有的列
- value是一個具體的值,也可以是變數,如
CURRENT_TIME
- 多個設定的屬性之間,使用英文逗號隔開
-- UPDATE 表名 SET 列 = 新值,[列 = 新值] WHERE [條件]
-- 修改名字,包含條件
UPDATE `student` SET `name` = 'Aupdate' WHERE id = 1;
-- 不指定條件的情況下,會改動所有的表
UPDATE `student` SET `name` = 'Aupdate'
-- 修改多個屬性,逗號隔開
UPDATE `student` SET `name` = 'Aupdate',`email` = '[email protected]' WHERE id = 1
3.2.3 刪除
delete命令
語法:delete from 表名 [where 條件]
-- 刪除資料。避免這樣寫,會全部刪除
DELETE FROM `student`
-- 刪除指定資料
DELETE FROM `student` WHERE id = 1
TRUNCATE命令
作用:完全清空一個數據庫,表的結構和索引約束不變
-- 清空表
TRUNCATE `student`
區別
- 相同點:都能刪除資料,都不會刪除表結構
- 不同點:
- TRUNCATE:重新設定自增列,計數器歸零
- TRUNCATE:不會影響事務
-
delete刪除時,重啟資料庫後(瞭解)
- InnoDB:自增列會從1開始(存在記憶體中,斷電即失)
- MyISAM:繼續上一個自增量開始(存在檔案中,不會丟失)