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)

相关推荐
段一凡-华北理工大学7 分钟前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh2 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户71333585156243 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z123456789863 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD3 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
用户71333585156244 小时前
MySQL - InnoDB 的 Buffer Pool
mysql
TlSfoward4 小时前
抓包代理链路下的 TLS 指纹变化分析 TLSFOWARD抓包工具
数据库·爬虫·网络协议·搜索引擎·php
数智化管理手记4 小时前
账龄分析手工统计易遗漏?自动账龄分析工具怎么搭建
大数据·网络·数据库·人工智能·数据挖掘
LabVIEW开发5 小时前
NI Package Manager安装LabVIEW时InternalServerError错误
网络·数据库·labview·labview知识·labview功能·labview程序
SelectDB5 小时前
PostgreSQL 实时同步到 Apache Doris:一站式 CDC 解决方案
数据库