MySQL03:DML語言

外鍵

外鍵概念

如果公共關(guān)鍵字在一個關(guān)系中是主關(guān)鍵字讳苦,那么這個公共關(guān)鍵字被稱為另一個關(guān)系的外鍵工禾。由此可見,外鍵表示了兩個關(guān)系之間的相關(guān)聯(lián)系俯在。以另一個關(guān)系的外鍵作主關(guān)鍵字的表被稱為主表搔确,具有此外鍵的表被稱為主表的從表彼棍。

在實際操作中,將一個表的值放入第二個表來表示關(guān)聯(lián)妥箕,所使用的值是第一個表的主鍵值(在必要時可包括復(fù)合主鍵值)滥酥。此時,第二個表中保存這些值的屬性稱為外鍵(foreign key)畦幢。

外鍵作用

保持數(shù)據(jù)一致性完整性缆蝉,主要目的是控制存儲在外鍵表中的數(shù)據(jù),約束宇葱。使兩張表形成關(guān)聯(lián),外鍵只能引用外表中的列的值或使用空值刊头。

創(chuàng)建外鍵

建表時指定外鍵約束

-- 創(chuàng)建外鍵的方式一 : 創(chuàng)建子表同時創(chuàng)建外鍵

-- 年級表 (id\年級名稱)
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

-- 學生信息表 (學號,姓名,性別,年級,手機,地址,出生日期,郵箱,身份證號)
CREATE TABLE `student` (
`studentno` INT(4) NOT NULL COMMENT '學號',
`studentname` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`sex` TINYINT(1) DEFAULT '1' COMMENT '性別',
`gradeid` INT(10) DEFAULT NULL COMMENT '年級',
`phoneNum` VARCHAR(50) NOT NULL COMMENT '手機',
`address` VARCHAR(255) DEFAULT NULL COMMENT '地址',
`borndate` DATETIME DEFAULT NULL COMMENT '生日',
`email` VARCHAR(50) DEFAULT NULL COMMENT '郵箱',
`idCard` VARCHAR(18) DEFAULT NULL COMMENT '身份證號',
PRIMARY KEY (`studentno`),
KEY `FK_gradeid` (`gradeid`),
CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

建表后修改

-- 創(chuàng)建外鍵方式二 : 創(chuàng)建子表完畢后,修改子表添加外鍵
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY (`gradeid`) REFERENCES `grade` (`gradeid`);

刪除外鍵

操作:刪除 grade 表黍瞧,發(fā)現(xiàn)報錯

圖片

注意 : 刪除具有主外鍵關(guān)系的表時 , 要先刪子表 , 后刪主表

-- 刪除外鍵
ALTER TABLE student DROP FOREIGN KEY FK_gradeid;
-- 發(fā)現(xiàn)執(zhí)行完上面的,索引還在,所以還要刪除索引
-- 注:這個索引是建立外鍵的時候默認生成的
ALTER TABLE student DROP INDEX FK_gradeid;

DML語言

數(shù)據(jù)庫意義 : 數(shù)據(jù)存儲、數(shù)據(jù)管理

管理數(shù)據(jù)庫數(shù)據(jù)方法:

  • 通過SQLyog等管理工具管理數(shù)據(jù)庫數(shù)據(jù)

  • 通過DML語句管理數(shù)據(jù)庫數(shù)據(jù)

DML語言 :數(shù)據(jù)操作語言

  • 用于操作數(shù)據(jù)庫對象中所包含的數(shù)據(jù)

  • 包括 :
    INSERT (添加數(shù)據(jù)語句)
    UPDATE (更新數(shù)據(jù)語句)
    DELETE (刪除數(shù)據(jù)語句)

添加數(shù)據(jù)

INSERT命令

語法:

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

注意 :

  • 字段或值之間用英文逗號隔開 .

  • ' 字段1,字段2...' 該部分可省略 , 但添加的值務(wù)必與表結(jié)構(gòu),數(shù)據(jù)列,順序相對應(yīng),且數(shù)量一致 .

  • 可同時插入多條數(shù)據(jù) , values 后用英文逗號隔開 .

-- 使用語句如何增加語句?
-- 語法 : INSERT INTO 表名[(字段1,字段2,字段3,...)] VALUES('值1','值2','值3')
INSERT INTO grade(gradename) VALUES ('大一');

-- 主鍵自增,那能否省略呢?
INSERT INTO grade VALUES ('大二');

-- 查詢:INSERT INTO grade VALUE ('大二')錯誤代碼:1136
Column count doesn`t match value count at row 1

-- 結(jié)論:'字段1,字段2...'該部分可省略 , 但添加的值務(wù)必與表結(jié)構(gòu),數(shù)據(jù)列,順序相對應(yīng),且數(shù)量一致.

-- 一次插入多條數(shù)據(jù)
INSERT INTO grade(gradename) VALUES ('大三'),('大四');</pre>

練習題目

自己使用INSERT語句為課程表subject添加數(shù)據(jù) . 使用到外鍵.

修改數(shù)據(jù)

update命令

語法:

UPDATE 表名 SET column_name=value [,column_name2=value2,...] [WHERE condition];

注意 :

  • column_name 為要更改的數(shù)據(jù)列

  • value 為修改后的數(shù)據(jù) , 可以為變量 , 具體指 , 表達式或者嵌套的SELECT結(jié)果

  • condition 為篩選條件 , 如不指定則修改該表的所有列數(shù)據(jù)

where條件子句

可以簡單的理解為 : 有條件地從表中篩選數(shù)據(jù)

圖片

測試:

-- 修改年級信息
UPDATE grade SET gradename = '高中' WHERE gradeid = 1;

刪除數(shù)據(jù)

DELETE命令

語法:

DELETE FROM 表名 [WHERE condition];

注意:condition為篩選條件 , 如不指定則刪除該表的所有列數(shù)據(jù)

-- 刪除最后一個數(shù)據(jù)
DELETE FROM grade WHERE gradeid = 5

TRUNCATE命令

作用:用于完全清空表數(shù)據(jù) , 但表結(jié)構(gòu) , 索引 , 約束等不變 ;

語法:

TRUNCATE [TABLE] table_name;

-- 清空年級表
TRUNCATE grade

注意:區(qū)別于DELETE命令

  • 相同 : 都能刪除數(shù)據(jù) , 不刪除表結(jié)構(gòu) , 但TRUNCATE速度更快

  • 不同 :
    使用TRUNCATE TABLE 重新設(shè)置AUTO_INCREMENT計數(shù)器
    使用TRUNCATE TABLE不會對事務(wù)有影響 (事務(wù)后面會說)

測試:

-- 創(chuàng)建一個測試表
CREATE TABLE `test` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8

-- 插入幾個測試數(shù)據(jù)
INSERT INTO test(coll) VALUES('row1'),('row2'),('row3');

-- 刪除表數(shù)據(jù)(不帶where條件的delete)
DELETE FROM test;
-- 結(jié)論:如不指定Where則刪除該表的所有列數(shù)據(jù),自增當前值依然從原來基礎(chǔ)上進行,會記錄日志.

-- 刪除表數(shù)據(jù)(truncate)
TRUNCATE TABLE test;
-- 結(jié)論:truncate刪除數(shù)據(jù),自增當前值會恢復(fù)到初始值重新開始;不會記錄日志.

-- 同樣使用DELETE清空不同引擎的數(shù)據(jù)庫表數(shù)據(jù).重啟數(shù)據(jù)庫服務(wù)后
-- InnoDB : 自增列從初始值重新開始 (因為是存儲在內(nèi)存中,斷電即失)
-- MyISAM : 自增列依然從上一個自增數(shù)據(jù)基礎(chǔ)上開始 (存在文件中,不會丟失)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末原杂,一起剝皮案震驚了整個濱河市印颤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌穿肄,老刑警劉巖年局,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異咸产,居然都是意外死亡矢否,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門脑溢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僵朗,“玉大人,你說我怎么就攤上這事⊙槊恚” “怎么了顶吮?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粪薛。 經(jīng)常有香客問我云矫,道長,這世上最難降的妖魔是什么汗菜? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任让禀,我火速辦了婚禮,結(jié)果婚禮上陨界,老公的妹妹穿的比我還像新娘巡揍。我一直安慰自己,他們只是感情好菌瘪,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布腮敌。 她就那樣靜靜地躺著,像睡著了一般俏扩。 火紅的嫁衣襯著肌膚如雪糜工。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天录淡,我揣著相機與錄音捌木,去河邊找鬼。 笑死嫉戚,一個胖子當著我的面吹牛刨裆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彬檀,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼帆啃,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了窍帝?” 一聲冷哼從身側(cè)響起努潘,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坤学,沒想到半個月后疯坤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡拥峦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年贴膘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片略号。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡刑峡,死狀恐怖洋闽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情突梦,我是刑警寧澤诫舅,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站宫患,受9級特大地震影響刊懈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娃闲,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一虚汛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧皇帮,春花似錦卷哩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渐白,卻和暖如春尊浓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背纯衍。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工栋齿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人托酸。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓褒颈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親励堡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容