-- 修改表名: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',