MySql(十三)

目录

mysql外键约束

准备工作

创建表

插入数据

创建表时添加外键

1..格式

2..创建表student表时,为其添加外键

3.插入数据测试

正常数据

异常数据

3.使用alter添加外键

删除外键

添加外键

4.Mysql外键不生效的原因

修改引擎

phpystudy的mysql位置


mysql外键约束

注:student是从表,class是主表. 在从表中添加外键约束

在从表中添加主表的主键

从表使用 on delete cascade

可以在主表删除相关的数据时,把从表相关数据也删除

准备工作

创建表

sql 复制代码
create table student (
	id INT PRIMARY KEY AUTO_INCREMENT,
	student_name VARCHAR(30),
	student_sex char(1),
	student_info VARCHAR(500),
	student_class_id int 
);

CREATE table class (
	class_id INT PRIMARY KEY AUTO_INCREMENT,
	class_name VARCHAR(20)
	
);

插入数据

sql 复制代码
-- 插入正常数据

INSERT into student VALUES
(null, '偷走晚霞的人', '男', '一个学生', 1),
(null, '惜.己', '男', '一个学生', 2),
(null, '小玖', '女', '一个学生', 1),
(null, '张三', '男', '一个学生', 3),
(null, '莉莉', '男', '一个学生', 1),
(null, '雪夜', '男', '一个学生', 2),
(null, '小明', '女', '一个学生', 1),
(null, '小新', '男', '一个学生', 3)
;

创建表时添加外键

1..格式

CONSTRAN 外键约束的名字 FOREIGN KEY (外键字段名) REFERENCES 主表(主键字段)

2..创建表student表时,为其添加外键

sql 复制代码
DROP TABLE student;
-- 创建student表示为 student_class_id 添加 主表的主键 的约束
create table student (
	id INT PRIMARY KEY AUTO_INCREMENT,
	student_name VARCHAR(30),
	student_sex char(1),
	student_info VARCHAR(500),
	student_class_id int ,
	-- 添加主键约束
	CONSTRAINT student_class_fk FOREIGN KEY(student_class_id) REFERENCES class(class_id)
	
);

3.插入数据测试

正常数据
sql 复制代码
-- 插入正常数据


INSERT into student VALUES
(null, '偷走晚霞的人', '男', '一个学生', 1),
(null, '惜.己', '男', '一个学生', 2),
(null, '小玖', '女', '一个学生', 1),
(null, '张三', '男', '一个学生', 3),
(null, '莉莉', '男', '一个学生', 1),
(null, '雪夜', '男', '一个学生', 2),
(null, '小明', '女', '一个学生', 1),
(null, '小新', '男', '一个学生', 3)
;
异常数据

class_id 不存在的数据

sql 复制代码
-- 插入不正常的数据
INSERT into student VALUES
(null, '偷走晚霞的人', '男', '一个学生', 5);

外键约束,不能插入主表中没有的数据

1452 - Cannot add or update a child row: a foreign key constraint fails (`test`.`student`, CONSTRAINT `student_class_fk` FOREIGN KEY (`student_class_id`) REFERENCES `class` (`class_id`))

3.使用alter添加外键

删除外键
sql 复制代码
-- 删除student表中的外键

ALTER TABLE student DROP FOREIGN KEY student_class_fk;
添加外键
sql 复制代码
-- 再次添加外键
ALTER TABLE student ADD FOREIGN KEY(student_class_id) REFERENCES class(class_id);

4.Mysql外键不生效的原因

总:查看存储引擎是不是InnoDB

这里是设置了外键的,仔细检查了语法也没有问题,但是外键不生效。
后面查看了mysql根目录的配置文件,发现自己用的mysql是Mylsam

找到 defult-storage-engine

修改引擎

在配置文件中修改。(配置文件在mysql安装的根目录)

default-storage-engine=MyIsam

default-storage-engine=InnoDB
修改完成之后重启mysql

phpystudy的mysql位置

phpystudy可以在phpstudy的根目录下

==》Extension

===》mysql(这个是你自己使用过的mysql)

相关推荐
数据库小学妹13 分钟前
MySQL ORDER BY 深度解析:Using temporary 与 Using filesort 的底层机制及索引优化实战
数据库·经验分享·mysql·性能优化·dba
可乐ea18 分钟前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
AI人工智能+电脑小能手31 分钟前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试
WPF工业上位机1 小时前
YXGK.FakeVM数据库示例
jvm·数据库·oracle
牛奔1 小时前
如何让 GORM 打印 SQL 语句?三种方式全解析
数据库·sql
XWalnut1 小时前
Redis从入门到精通
数据库·redis·缓存
andafaAPS1 小时前
安达发|工艺品aps自动排产排程排单软件:告别生产“一团乱麻“
大数据·数据库·人工智能·安达发aps·计划排产软件·自动排单软件
zt1985q2 小时前
本地部署源代码管理解决方案 Bitbucket Data Center 并实现外部访问
运维·服务器·数据库·网络协议·postgresql·源代码管理
一只专注api接口开发的技术猿2 小时前
OpenClaw 对接淘宝商品 API,低成本实现全天候选品监控|附可运行 Python 实操代码
大数据·开发语言·数据库·python
爱喝水的鱼丶3 小时前
SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇)第三篇:SAP接口对接开发:实现数据的实时/批量校验交互
运维·数据库·学习·性能优化·sap·abap·经验交流