-- 修改表名: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关键字大小写不敏感,建议大家写小写!!!
所有的符号全部用英文!!!
方式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
数据库意义:数据存储 、数据管理
DML语言:数据操纵语言
Insert
update
delete
语法: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‘