MySQL学习日志五,外键与DML语言
外键
准备一个表,gradeid作为外键
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
创建生成的表
方法一:在创建表的时候,增加约束
第一步,学生表的gradeid字段,要引用年级表的gradeid
第二步,定义外键key
第三步,给这个外键添加约束(执行引用) references 引用
CREATE TABLE IF NOT EXISTS `student`
(
`id`INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`pwd` VARCHAR(30) NOT NULL DEFAULT '***' COMMENT'密码',
`name` VARCHAR(30) NOT NULL DEFAULT '张三' COMMENT '姓名',
`sex` VARCHAR(50) NOT NULL DEFAULT '男' COMMENT '性别',
`birthday` VARCHAR (20) NOT NULL COMMENT '生日',
`address` VARCHAR(30) NOT NULL COMMENT'住址',
`emill` VARCHAR (30) NOT NULL COMMENT'邮箱',
`gradeid` INT(4) NOT NULL COMMENT '学生的年级',
PRIMARY KEY(`id`),
KEY `FK_gradeid`(`gradeid`) , -- 定义外键
CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`) -- 添加约束和引用
)ENGINE=INNODB DEFAULT CHARSET=utf8
方法二,创建表成功后添加
-- 创建表的时候没有外键关系
ALTER TABLE student
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);
- ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列) REFERENCES 另一个外键的表 (另一个外键表的字段);
狂神说:最佳实践 - 数据库就是单纯的表,只能用来存数据,只有行(数据)和列(字段)
- 我们想要使用多张表的数据,想要使用外键(程序去实现)
DML语言
数据库意义:数据存储,数据管理
- DML语言:数据操作语言
- insert
- update
- delete
添加 insert
- 语法
insert into 表名([字段名1],[字段名2],[字段名3]...)values('值1'),('值2'),('值3')...
PS.
1.字段和字段之间使用英文逗号隔开
2.字段是可以省略的,但是后面的值必须一一对应
3.可以同时插入多条数据,VALUES/后面的值,需要使用,隔开即可
修改 update
- 语法
update 修改谁(条件) set 原来的数值=新数值
例子:
带了条件
UPDATE 表名 SET 列名 ='新的值' WHERE 条件约束;
不带条件会修改全部的数值
UPDATE 表名 SET 列名='新的值' ;
多个属性用逗号隔开
UPDATE 表名 SET 列名1 ='新的值',`列名2`='新的值' WHERE 条件约束;
PS.条件约束使用AND连接
条件操作符 | 含义 |
---|---|
= | 等于 |
<> 或者 != | 不等于 |
> , <,<=,>= | 大于,小于,小于等于,大于等于 |
BETWEEN...AND | 闭合区间 |
AND,OR | 和,或 |
删除 delete
delete from 表名 where 条件
还有一个清除
- TRUNCATE命令:删除一个数据库表,表的结构和索引不变
delete | truncate | |
---|---|---|
相同 | 删数据库,不会删除表结构 | 删数据库,不会删除表结构 |
不同 | 不会影事务 | 重新设置自增列,计数器归零 |
delete 问题,重启数据库现象
-
innoDB 自增列会重开始(存在内存当中的,断电即失)
-
MySAM 继续从上一个自增量开始(存在文件中的不会丢失)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)