SQLyog基本操作(三)-表(修改、刪除)、外鍵、DML、添加insert、修改update、刪除delete數據


2.6 修改、刪除表

修改表的屬性

 -- 修改表名:ALTER TABLE 舊表名 RENAME AS 新表名
 ALTER TABLE teacher RENAME AS teacher1
 
 -- 增加表的字段:ALTER TABLE 表名 ADD 字段名 列屬性
 ALTER TABLE teacher1 ADD age INT(11)
 
 -- 修改表的字段(重命名,修改約束!)
 -- ALTER TABLE 表名 MODIFY 字段名 列屬性[]
 ALTER TABLE teacher1 MODIFY age VARCHAR(11) -- 修改約束
 -- ALTER TABLE 表名 CHANGE 舊名字 新名字 列屬性[]
 ALTER TABLE teacher1 CHANGE age age1 INT(1) -- 字段重命名
 
 -- 刪除表的字段
 -- ALTER TABLE 表名 DROP 字段名
 ALTER TABLE teacher1 DROP age1
 

刪除表

 -- 刪除表(存在的時候再刪除,不加判斷的話,會報錯)
 DROP TABLE IF EXISTS teacher1

注意點:

  • 所有的創建和刪除操作盡量加上判斷,以免報錯!!!

  • 字段名使用``修飾,避免與關鍵字重復!!!

  • 注釋:-- 或者 /* */

  • sql關鍵字大小寫不敏感,建議大家寫小寫!!!

  • 所有的符號全部用英文!!!

 

3 MySQL數據管理

3.1 外鍵(了解即可)

方式1:在創建表的時候,增加約束(麻煩,比較復雜)

 CREATE TABLE IF NOT EXISTS `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
 -- 定義外鍵key
 -- 給這個外鍵添加約束(執行引用) references引用
 CREATE TABLE IF NOT EXISTS `student`(
   `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
   `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
   `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密碼',
   `sex` 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_graded`(`gradeid`),
   CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8

  添加外鍵成功后,會多出來定義的外鍵FK_gradeid

  改變表student,選擇“3個外部鍵”

  即可查看外部鍵

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

  對於上面而言,要先刪除student表,才能刪除grade表。

方式2:創建表成功后,再添加外鍵約束

 -- 創建grade表
 CREATE TABLE IF NOT EXISTS `grade`(
   `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年級id',
   `gradename` VARCHAR(50) NOT NULL COMMENT '年級名稱',
   PRIMARY KEY(`gradeid`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8
 
 -- 創建student表
 CREATE TABLE IF NOT EXISTS `student`(
   `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '學號',
   `name` VARCHAR(20) NOT NULL DEFAULT '匿名' COMMENT '姓名',
   `pwd` VARCHAR(30) NOT NULL DEFAULT '123456' COMMENT '密碼',
   `sex` 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`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8
 
 -- 創建表的時候沒有外鍵關系,之后添加外鍵關系
 ALTER TABLE `student` ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
 -- ALTER TABLE `要添加引用的表名` ADD COSTRAINT `約束名` FOREIGN KEY(`要作為外鍵的列`) REFERENCES `被引用的表名`(`被引用的字段`)

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

最佳實踐

  • 數據庫就是單純的表,只用來存數據,只有行(數據)和列(字段)

  • 我們想使用多張表的數據,想使用外鍵(程序去實現)

附:數據庫中為什么不推薦使用外鍵約束?_pojocheng的博客-CSDN博客 https://blog.csdn.net/pojocheng/article/details/85760648

 

3.2 DML語言(全部記住)

數據庫意義:數據存儲 、數據管理

DML語言:數據操縱語言

  • Insert

  • update

  • delete

 

3.3 添加insert

語法:insert into 表名(字段名1,字段名2,...) values('值1','值2',...),('值1','值2',...),...

 -- 語法:insert into `表名`(`字段名1`,`字段名2`,...) values('值1','值2',...),('值1','值2',...),...
 -- 插入語句(添加)
 -- insert into `表名`(`字段名1`,`字段名2`,...) values('值1','值2',...)
 INSERT INTO `grade`(`gradename`)VALUES('大四')
 
 -- 如果不寫表的字段,它就會一一匹配,所有字段值都必須寫全,此時主鍵值不能省略
 INSERT INTO `grade`VALUES('研一') -- 報錯
 INSERT INTO `grade`VALUES(5,'研二') -- 成功
 
 -- 一般寫插入語句,我們一定要使數據和字段一一對應!
 -- 插入一個字段多個值,主鍵自增可以忽略
 INSERT INTO `grade`(`gradename`)VALUES('大三'),('大二')
 
 INSERT INTO `student`(`name`)VALUES('趙四') -- 插入一個字段
 INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('張三','111111','男') -- 插入多個字段
 
 -- 插入全部字段,不省略字段名
 INSERT INTO `student`(`name`,`pwd`,`sex`,`birthday`,`gradeid`,`address`,`email`)
 VALUES('王五','222222','男','2020-02-02','3','吉林','111@163.com'),
 ('小黃','222222','男','2020-02-02','3','吉林','111@163.com'),
 ('小紅','222222','男','2020-02-02','3','吉林','111@163.com')
 
 -- 插入全部字段,省略全部字段名,此時不可以省略主鍵值
 INSERT INTO `student`VALUES
 (4,'王七','333333','男','2000-01-01','8','黑龍江','222@qq.com')
 -- 插入多個字段多個值,忽略字段名,此時不可以省略主鍵值
 INSERT INTO `student`VALUES
 (5,'1','1','男','2001-01-01','11','1','1@qq.com'),
 (6,'2','1','男','2002-01-01','12','1','2@qq.com'),
 (7,'3','1','男','2003-01-01','13','1','3@qq.com'),
 (8,'4','1','男','2004-01-01','14','1','4@qq.com'),
 (9,'5','1','男','2005-01-01','15','1','5@qq.com'),
 (10,'6','1','男','2006-01-01','16','1','6@qq.com')

注意事項:

  • 字段和字段之間用英文“,”隔開

  • 字段是可以省略的,但是后面的值要一一對應,不能少,字段都省略時,主鍵值就不能忽略

  • 可以同時插入多條數據,values后面的值需要使用“,”隔開即可

 

3.4 修改update

語法:update 表名 set 字段名1='值1',字段名2='值2',... where 條件

 -- 語法:update `表名` set `字段名1`='值1',`字段名2`='值2',... where 條件
 -- 修改學員名字
 UPDATE `student` SET `name`='小紅' WHERE id=1
 -- 不指定條件的情況下,會改動所有表
 UPDATE `student` SET `name`='小明'
 -- 修改多個屬性,之間用”,“隔開
 UPDATE `student` SET `name`='小紅',`pwd`='123456' WHERE id=1
 -- 通過多個條件定位數據,修改多個屬性
 UPDATE `student` SET `name`='劉壯實',`pwd`='654321' WHERE `id`=1 AND `sex`='男'
 -- 值可以是一個具體的值,也可以是一個變量
 UPDATE `student` SET `birthday`=CURRENT_TIME,`sex`='女' WHERE `name`='劉壯實' AND `sex`='男'

條件:where 字段名 運算符 匹配條件,操作會返回boolean值

操作符 含義 舉例 結果
= 等於 5=6 false
> 大於 5>6 false
< 小於 5<6 true
>= 大於等於 5>=6 false
<= 小於等於 5<=6 true
<> 或 != 不等於 5<>6 或 5!=6 true
BETWEEN 條件1 AND 條件2 在某個范圍內 [1,5]  
AND && 1>2 && 3<4 false
OR || 1>2 || 3<4 true

注意:

  • 字段名是數據庫的列,盡量帶上``

  • 篩選的條件如果沒有指定,則會修改所有的列

  • 值value可以是一個具體的值,也可以是一個變量

  • 多個設置的屬性之間使用英文“,”隔開

 

3.5 刪除delete

語法:delete from 表名 where 條件

 -- 刪除數據(避免這樣寫,會全部刪除),要指定條件
 DELETE FROM `student`
 
 -- 刪除指定數據
 DELETE FROM `student` WHERE id =1

TRUNCATE命令:完全清空一個數據表,表的結構和索引約束不會變!

 -- 清空student表
 TRUNCATE `student`

DELETE和TRANCATE的區別

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

  • 不同點:

    • TRANCATE 重新設置自增列,計數器會歸零

    • TRANCATE 不會影響事務

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

delete刪除結果:創建表---高級,顯示如下

TRANCATE刪除效果:查看方式同上

以下內容了解即可:DELETE刪除問題,重啟數據庫的現象

  • INNODB 自增列會從1開始(因為是存在內存當中的,斷電即失)

  • MYISAM 繼續從上一個自增量開始(因為是存在文件中的,不會丟失)


免責聲明!

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



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