mysql-210713-01

MySQL-mysqlslap基准测试工具详解 1. 读取配置文件 /etc/mysql/mysqld.cnf2. 连接远程数据库 10.x.x.x:3306(root / Root)3. 选定 mysql 库作为测试库(--create-schema)4. 以 InnoDB 引擎为测试目标(--engine)5. 开启 100 个并发连接(--concurrency)6. 共执行 2000 次 SELECT * FROM user WHERE user='root'(--number-of-queries) 阅读详情

mysql-210713-01

  • 约束
    • 什么是约束
    • 常见约束
    • 非空约束(not null)
    • 唯一性约束(unique)
    • 主键约束(primary key)
    • 外键约束(foreign key)

约束

什么是约束

在创建表的时候,可以给表的字段添加相应的约束,
添加约束的目的是为了保证表中数据的合法性,有效性,完整性。

常见的约束

非空约束   (not null)    约束的字段不能为NULL
唯一约束   (unique)      约束的字段不能重复
主键约束   (primary key) 约束的字段既不能为NULL,也不能重复   (简称PK)
外键约束   (foreign key) ......   (简称FK)
检查约束   (check)		 注意:Oracle数据库中有check约束,但是mysql没有,目前mysql不支持该约束

非空约束(not null)

非空约束(not null) 	字段的值不能为空(NULL)
案例1
drop table if exists t_user;
create table t_user(
	id int,
	username varchar(255) not null,		// 列级约束
	password varchar(255)
);
insert into t_user(id,username,password) values (1,'','123');
insert into t_user(id,username,password) values (2,'bgy','123');

// 错误	
mysql> insert into t_user(id,password) values (2,'222');
ERROR 1364 (HY000): Field 'username' doesn't have a default value

唯一性约束(unique)

唯一性约束(unique)修饰的字段具有唯一性,字段值不能重复,但可以为空(NULL)
当表中只有一个唯一性约束的时候  也叫  列级约束  (案例1)
当表中只有多个唯一性约束的时候  也叫  表级约束  (案例2)
案例1(一个字段加unique)
// 列级约束
drop table if exists t_user;
create table t_user(
	uno int,
	uname varchar(255) unique		// 列级约束
);
mysql> insert into t_user(uno,uname) values (1001,'bgy1001');
Query OK, 1 row affected (0.01 sec)

// 值可以为空
mysql> insert into t_user(uno) values(1002);
Query OK, 1 row affected (0.01 sec)

// 值不允许重复
mysql> insert into t_user(uno,uname) values(1003,'bgy1001');
ERROR 1062 (23000): Duplicate entry 'bgy1001' for key 't_user.uname'
案例2(多个字段加unique)
// 表级约束
drop table if exists t_user;
create table t_user(
	uno int,
	uname varchar(255),
	upassword varchar(255),
	unique(uname,upassword)		// 多个字段联合起来添加一个约束unique【表级约束】
);

insert into t_user values(1001,'bgy01','bgy01');
insert into t_user values(1002,'bgy01','bgy02');
insert into t_user values(1003,'bgy03','bgy01');

mysql> select * from t_user;
+------+-------+-----------+
| uno  | uname | upassword |
+------+-------+-----------+
| 1001 | bgy01 | bgy01     |
| 1002 | bgy01 | bgy02     |
| 1003 | bgy03 | bgy01     |
+------+-------+-----------+
3 rows in set (0.00 sec)
// 表级约束
// 这是添加两个约束
drop table if exists t_user;
create table t_user(
	uno int,
	uname varchar(255) unique,
	upassword varchar(255) unique
);

mysql> insert into t_user values(1001,'bgy01','bgy01');
Query OK, 1 row affected (0.01 sec)

mysql> insert into t_user values(1002,'bgy01','bgy02');
ERROR 1062 (23000): Duplicate entry 'bgy01' for key 't_user.uname'

主键约束(primary key)

主键约束(primary key) 中的字段不能为NULL,也不能为空

一张表  主键约束(primary)  只能有一个
主键作用
表的三范式中要求,第一范式中要求任何一张表中都应该有主键

主键作用:
	主键是这行记录在这张表中的唯一标识。

两个人,同年同月同日生,相同地区,,,就靠身份证号来区分(主键)
主键分类
根据主键字段的字段数量划分:
	单一主键:
		推荐,常用
	复合主键:
		多个字段联合起来添加一个主键约束,
		不推荐,复合主键违背三范式。
		
分局主键性质划分:
	自然主键:
		主键最好是一个和业务没有任何关系的自然数,
		推荐使用。
	业务主键:
		主键和业务有关系,
		例如:身份证号做主键,银行卡号做主键,
		不推荐使用,
		因为以后的业务如果发生改变,主键值也可能需要随着发生变化,
		但有时候没有办法改变,因为变化可能会导致主键值的重复。
	
案例1(行级约束)
// 行级约束
drop table if exists t_user;
create table t_user(
	uno int primary key,
	uname varchar(255),
	ubirth varchar(10)
);

insert into t_user(uno,uname,ubirth) values(1001,'bgy01','1999-09-09');
insert into t_user(uno,uname,ubirth) values(1002,'bgy01','1999-09-09');

mysql> select * from t_user;
+------+-------+------------+
| uno  | uname | ubirth     |
+------+-------+------------+
| 1001 | bgy01 | 1999-09-09 |
| 1002 | bgy01 | 1999-09-09 |
+------+-------+------------+


mysql> insert into t_user(uno,uname,ubirth) values(1002,'bgy01','1999-09-09');
ERROR 1062 (23000): Duplicate entry '1002' for key 't_user.PRIMARY'
案例2(表级约束)
// 表级约束
drop table if exists t_user;
create table t_user(
	uno int,		
	uname varchar(255),
	ubirth varchar(10),
	primary key(uno)
);
案例3(复合主键)
// 复合主键
// 意思就是,uno和uname联合起来不能为空,也不能相同
drop table if exists t_user;
create table t_user(
	uno int,		
	uname varchar(255),
	ubirth varchar(10),
	primary key(uno,uname)
);
案例4(主键值自增)
uno int primary key auto_increment,
	uno字段自动维护一个自增数字,从1开始,以1递增
	
	
Oracle数据库中也提供了一个自增机制,
	叫:序列(sequence)对象
drop table if exists t_user;
create table t_user(
	uno int primary key auto_increment,
	uname varchar(255),
	ubirth varchar(10)
);

外键约束(foreign key)

外键约束:foreign key

foreign key(classno) references t_class(cno),

先创建父表,再创建子表,
先插入父表数据,再插入子表数据,
先删除子表数据,再删除父表数据,
先删除子表,再删除父表。
外键值可以为NULL。

外键引用字段不一定要使用主键,但是引用字段至少具有 唯一性。
案例1
两张表,
一张学生表 t_student
	sno,sname,classno
一张班级表 t_class
	cno cname
	
t_student中的cno字段 引用t_class中的cno字段,
此时t_student表叫做子表,t_class表叫做父表,

先创建父表,再创建子表,
先插入父表数据,再插入子表数据,
先删除子表数据,再删除父表数据,
先删除子表,再删除父表。
// 先删除子表,再删除父表。
drop table if exists t_student;
drop table if exists t_class;


// 先创建父表,再创建子表,
create table t_class(
	cno int,
	cname varchar(255),
	primary key(cno)
);
create table t_student(
	sno int,
	sname varchar(255),
	classno int,
	primary key(sno),
	foreign key(classno) references t_class(cno)
);
// 先插入父表数据
insert into t_class values(101,"G0301");
insert into t_class values(102,"G0302");

// 再插入子表数据
insert into t_student values(2001,'bgy',101);
insert into t_student values(2002,'laoli',102);
insert into t_student values(2003,'xiaowu',102);

select * from t_student;
select * from t_class;

结果如下↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓


mysql> select * from t_student;
+------+--------+---------+
| sno  | sname  | classno |
+------+--------+---------+
| 2001 | bgy    |     101 |
| 2002 | laoli  |     102 |
| 2003 | xiaowu |     102 |
+------+--------+---------+
3 rows in set (0.00 sec)

mysql> select * from t_class;
+-----+-------+
| cno | cname |
+-----+-------+
| 101 | G0301 |
| 102 | G0302 |
+-----+-------+
2 rows in set (0.00 sec)

// 因为t_class中没有555这个数据
mysql> insert into t_student values(2004,'xiaowang',555);

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`mysql_test_210711_01`.`t_student`, CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`classno`) REFERENCES `t_class` (`cno`))
SpringBoot+Vue+MySQL 高校学科竞赛平台 完整可运行版(源码+文档) 本项目基于SpringBoot+Vue+MySQL构建高校学科竞赛管理平台,覆盖学生、教师、领队教师、管理员四大角色,实现竞赛发布、报名、刷题、评分、公示等全流程闭环管理。系统架构清晰,技术主流,配套完整源码、数据库脚本、万字论文、开题报告、答辩PPT及部署文档,支持一键运行,适用于毕业设计、课程设计及院系二次开发,真正实现“开箱即用”。 阅读详情

相关推荐

SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)

本文介绍一套基于SpringBoot+Vue+MySQL的民宿在线预订平台,涵盖用户与管理员双角色全流程功能,实现房源展示、订单管理、支付模拟、数据看板等闭环业务。系统架构清晰,前后端分离,附带完整源码、数据库脚本、万字论文、答辩PPT及部署文档,适合毕设、课程设计或小型民宿二次开发,开箱即用,快速落地。

招风的黑耳优快云 167

MySQL 索引深入理解:B+ 树、二级索引、联合索引与查询优化

理解二级索引后,就可以理解回表了。SELECT *MySQL 的执行过程分为三个步骤。覆盖索引(Covering Index)并不是一种独立的索引类型,而是一种查询效果。SQL 查询需要的所有字段,都能够直接从某个索引中获得,不需要再访问聚簇索引获取其他字段。例如:因为user_id已经包含在二级索引中,所以 MySQL 可以直接返回结果。不需要回表。联合索引(Composite Index)是同时使用多个字段建立的索引。它的排序规则是:首先按照user_id排序。当user_id。

m0_64642997的博客 135

基于单片机控制的开关电源设计

采用开关电源技术和MCU模块,凭借可靠性高、易于调适的特点,可以更高效地发挥出二者的优势,从而实现更好的组合。stm32的起动模式是通过Boot0和Boot1两个管脚的高低电平来决定的,当stm32被供电之后,这两个管脚的电平。在 VCC上,键盘的一头(列线)被连接到 VCC上,而在“0”的编程输出中,则用来进。,在开关管打开的情况下,由输入电力供给电流,感应装置存储   Buck变换器是一种非隔离式的电压转换器[10]整流电路对输入电压进行整流,再经过滤波电路,即Dc电压是直流/直流变换器的直流输入。

QQ1694456187的博客 2308

MySQL 单点详解(14)

给定一条 SQL,联合索引的列该怎么排呢?

2401_88601046的博客 345

STC8单片机高精度EV1527解码实战:定时器捕获+状态机抗干扰方案

EV1527是一种广泛应用于433MHz无线遥控的曼彻斯特编码协议,其核心在于对脉宽时序(如同步头、逻辑0/1)的微秒级精确识别。传统外部中断+延时判别方式受MCU中断延迟、编译优化及环境噪声影响,极易导致误码;而基于硬件定时器输入捕获的解码方案,将时间测量交由硬件完成,显著提升时序鲁棒性与温度/电压适应性。该技术适用于STC8等无专用无线解码外设的8位单片机,在智能开关、晾衣架、车库门控等IoT终端中实现低至0.003%的稳定误码率。本文聚焦STC8H系列利用T1定时器下降沿捕获与有限状态机协同解码EV1

weixin_29188997的博客 181

别再被SpringerLink虐了!手把手教你搞定LaTeX源文件提交(附正确文件顺序和类型选择)

本文详细解析了SpringerLink投稿系统中LaTeX源文件提交的常见问题与解决方案,包括文件打包、类型选择和顺序排列等关键步骤。通过实战经验,帮助科研人员避开隐形陷阱,一次性完成LaTeX提交,提升投稿效率。特别针对`.bst`和`.cls`文件的正确处理提供了专业指导。

weixin_42522964的博客 445

Flink SQL 连接器实战:MySQL Source、Flink CDC 与 JDBC Sink 全解析

提供有界流读取,适合批处理和维表场景,简单直接但无法感知变更。MySQL CDC提供无界流读取,通过「全量快照 + binlog 增量」的方式实现实时捕获,是实时数仓的核心入口,但需要 MySQL 侧正确配置 binlog 和权限。JDBC Sink负责结果回写,关键在于区分仅插入流和更新流,更新流必须依赖主键完成 upsert。掌握这三者的差异,本质上就是掌握了 Flink 中「有界与无界」「追加与更新」这两组最基本的语义。

2401_83857914的博客 453

手把手教你配置MCAL中的CAN模块:从基础参数到实战避坑指南

本文提供了一份详尽的MCAL CAN模块配置指南,涵盖从基础参数设置到实战避坑的全过程。文章深入解析了CAN控制器核心参数、硬件对象配置、数据流处理及常见问题排查,并结合源码分析,帮助嵌入式开发者构建稳定高效的CAN通信链路,是汽车电子领域通信开发的实用参考。

weixin_29165465的博客 336

MySQL 的 REPEATABLE READ 到底能不能防幻读——从快照读、当前读到 Next-Key Lock

本文系统讲解 InnoDB 可重复读级别下的幻读问题:从三类读异常切入,剖析快照读依赖 MVCC、当前读依赖 Next-Key Lock 的双防线机制,用双会话实验复现幻读仍会出现的边界场景,并解释各数据库在幻读防护上行为分歧的根源。

大模型全栈工程师 · Thanks_ks 297

Android Profiler 帧率优化实战与性能调优

本文详细介绍了使用Android Profiler进行帧率优化与性能调优的实战方法。通过分析主线程状态、FPS曲线和渲染阶段耗时,精准定位卡顿根源,并提供减少过度绘制、优化绘制命令及改善资源使用的具体策略。文章结合电商、游戏等真实案例,帮助开发者有效解决卡顿问题,提升应用流畅度。

palm99的专栏 536

【FPGA教程案例55】深度学习案例2——基于FPGA的CNN卷积神经网络之ReLu激活层verilog实现

在本课程中,我们将对CNN的ReLu函数模块的FPGA实现做详细的介绍和学习。从仿真结果可知,通过Rule激活函数之后,小于的输入数据输出为0,否则输出是输入本身。,我们对CNN的基本原理有了初步认识。ReLu函数具备如下优缺点。按照课程1相似的操作方式。

FPGA/MATLAB学习教程/源码/项目合作开发 2693

MySQL 中 DISTINCT 与 GROUP BY 哪个效率更高?

DISTINCT与GROUP BY在纯去重场景下,MySQL 8.0 中执行计划通常一致,效率基本相同。老版本(8.0.13 之前)GROUP BY有隐式排序开销,DISTINCT往往更快。需要聚合或HAVING时,只能用GROUP BY。效率的真正决定因素是索引和执行计划,而不是这两个关键字本身。所以,与其问「哪个更快」,不如问「我的查询有没有走对索引」。

2601_96709915的博客 323

【python爬虫--爬取电商商品及对其销量、好差评等数据进行分析】Python爬虫爬取电商商品及大数据分析-实战

选择目标电商网站:这里选择爬取两个不同电商网站(比如京东、淘宝)上的商品数据,包括商品名称、价格、销量和评价信息。编写爬虫:通过爬虫获取商品信息并保存数据。数据清洗与对齐:将两个电商网站抓取到的数据进行统一清洗和对齐。数据分析:进行销量分析、好评与差评分析等。

Dreams°的博客 4013

Docker 部署 WordPress+MySQL 高可用架构

点「安装 WordPress」

一直在努力学习的菜鸟 227

YOLOv12改进前必看 - YAML模型配置文件详细解读(再也不用担心通道数不匹配) 附网络结构图

YOLOv12的模型配置文件在中,里面包含yolov12的以及的不同大小的模型,本文将详细介绍一下YOLOv12模型文件中各参数的含义。

Limiiiing的博客 3275

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

基于 FastAPI+LangChain+LangGraph+Agent+Vue3+MySQL 的房产数据采集与房价预测分析平台

本文介绍一个完整的「房产数据采集+AI房价预测」全栈项目,涵盖FastAPI异步后端、LangGraph Agent智能问答、爬虫采集、机器学习预测与Vue3前端,实现从数据采集到AI交互的闭环。项目融合多技术栈,具备真实业务场景与生产级设计(如降级策略、流式输出、多模型对比),兼具简历亮点与答辩演示优势,可系统性提升工程能力,并附高频面试题解析,是理想的技术综合实践项目。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 231

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL 8.0 双向主从复制故障修复与重建指南

MySQL 8.0 双向主从复制故障修复 SOP:XtraBackup 重建备用节点,解决 GTID 1236 / 历史日志冲突

「YYL DBA手记」 数据库 · 架构 · 运维 · 实战 yyldba.blog.youkuaiyun.com 296

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

MySQL 8.0停服了,信创替代的窗口正在关闭

最近跟几个做信创的朋友聊天,发现一个被忽略的问题。MySQL 8.0在今年4月正式停了官方支持,Oracle不再出安全补丁,bug也没人修了。但大量企业的业务系统还跑在上面。这事搁以前不算急,慢慢选就行了。但现在不行了,国资委79号文写得很清楚,2027年底前央国企核心系统得完成国产化替换。MySQL停服跟信创deadline撞在一起,留给MySQL用户做决定的时间不多了。我做过不少数据库迁移项目,MySQL替代这个事,坑比大多数人想的要多。今天聊几个我觉得最容易被忽视的点。

databasedb的博客 333

MySQL:库与表的操作

本文系统讲解MySQL库的操作,涵盖创建、查看、修改、删除数据库及字符集、校验规则的配置与影响。重点说明CREATE DATABASE语法、字符集(如utf8mb4)与校验规则(如utf8_general_ci vs utf8_bin)对大小写敏感性和排序的影响。通过实例演示不同校验规则下查询与排序结果差异。同时介绍SHOW DATABASES、USE、ALTER DATABASE、DROP DATABASE等操作,并强调备份恢复(mysqldump)与连接状态监控(SHOW PROCESSLIST)的重要

2401_87306079的博客 325

MySQL 主从复制进阶(2026):GTID、复制延迟排查与故障切换

load 高到底是 CPU 还是 IO?free 的 available 才是关键。us/sy/wa 决策树 + iostat/sar/iftop 实战,CPU/内存/磁盘/网络四大瓶颈定位方法论。

2502_91473995的博客 182

Linux、Shell、MySQL 测试卷逐题细讲(下篇:MySQL)

本文为Linux、Shell、MySQL测试卷下半段MySQL部分逐题讲解,包含填空、选择与SQL分析三类题型。填空题覆盖COUNT、HAVING、DISTINCT、事务、约束、索引等核心语法;选择题辨析存储过程、索引类型、ACID、存储引擎、用户管理等考点。SQL大题围绕员工、部门、职位、地点四张关联表,考察多表连接、分组聚合、自连接、相关子查询、NULL处理等高频写法,标注LEFT JOIN统计计数、NULL判断、子查询别名等易错坑点,同时梳理试卷OCR识别带来的干扰问题,重点提示SQL实操中的常见失误

dongziwen1的博客 184

任务4-1 了解MySQL的数据类型

本文梳理了MySQL数据类型:数值型涵盖整型与实型,金额首选DECIMAL;字符串型按长度与用途分为CHAR、VARCHAR、TEXT及BLOB;日期型包含DATE、TIME、DATETIME及TIMESTAMP;特殊类型有ENUM、JSON等。掌握类型特性是高效建表的基础。

howard2005的专栏 147

MySQL 为什么选择 B+ 树作为索引结构

B 树和 B+ 树都是多路平衡树,但 B+ 树在数据库场景下更有优势,主要体现在以下几个方面。对比对象主要问题B+ 树的优势二叉树 / 红黑树树高过大,I/O 次数多多路平衡,树高仅 3~4 层哈希表不支持范围查询、排序天然有序,支持范围与排序B 树节点存数据,扇出小;查询路径不一致非叶子只存键,扇出大;查询路径稳定B+ 树用更矮的树高减少磁盘 I/O,用有序的叶子链表支撑范围查询,用只存键的非叶子节点换取更大的扇出,是磁盘数据库索引场景下综合表现最优的选择。

2601_96129122的博客 319

mysql初阶--数据库设计

本文系统阐述数据库设计的核心方法论,从范式理论(1NF、2NF、3NF)出发,揭示数据冗余与操作异常的根源,强调3NF为工程实践的最优平衡点。通过E-R图构建实体关系模型,实现从业务需求到表结构的清晰映射。文章厘清类、实体、表三者对应关系,提出“抽象→建模→落地”的设计流程,帮助开发者建立可复用的数据库设计思维框架,避免“拍脑袋”建表的陷阱。

2601_97033068的博客 693

MySQL 高频面试题全解:索引失效、MVCC 与间隙锁、深度分页优化(2026 招聘 JD 真题复盘)

按 2026 招聘 JD 与一线面经整理 12 道 MySQL 高频题:B+树索引原理、聚簇索引与覆盖索引、最左前缀与索引失效真实场景、MVCC 与 ReadView、间隙锁与死锁实战、深度分页优化、慢 SQL 六步排查、count(*)、主从延迟、分库分表与两阶段提交,每题附可直接复述的工程化答案。

蒙眼过河 267
上一篇: mysql-210712-05
下一篇: mysql-210714-01
白光一
博客等级 码龄9年 0粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值