MySQL——数据类型、索引的建立、数据的约束
文章目录
- 数据类型
- 索引的建立
- 普通索引
- 唯一索引
- 使用ALTER 命令添加和删除索引
- 使用ALTER 命令添加和删除主键
- 显示索引信息
- 数据的约束
- 非空约束:not null,值不能为null
- 唯一约束:unique,值不能重复
- 主键约束:primary key
- 外键约束:foreign key
数据类型
-
数值类型:INT、BIGINT、FLOAT、DOUBLE,DECIMAL等。
-
字符串类型:CHAR、VARCHAR、TEXT等。
-
日期和时间类型:DATE、DATETIME、TIMESTAMP等。
-
二进制类型:BLOB、LONGBLOB、VARBINARY等。
-
枚举类型:ENUM。
-
集合类型:SET。
-
数值类型

-
字符串类型
-
字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
字符串类型主要是:varchar 和 char, UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节

-
日期和时间类型
-
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR

-
-
示例
CREATE TABLE users (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,email VARCHAR(100) UNIQUE,password VARCHAR(100) NOT NULL,created_at DATETIME DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,age INT CHECK(age >= 18),address TEXT,role ENUM('admin', 'user') DEFAULT 'user' );
这个语句将创建一个名为users的表,包含多个列和约束。其中id列是主键,name列是非空字符串,email列是唯一的,password列是非空字符串,created_at列是日期时间类型,updated_at列是日期时间类型,但在更新时会自动更新,age列使用检查约束以确保其值大于等于18,address列是文本类型,role列是枚举类型,且默认值为’user’。
索引的建立
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
普通索引
- 创建索引
CREATE INDEX indexName ON table_name (column_name)
- 修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
- 删除索引的语法
DROP INDEX indexName ON mytable;
唯一索引
它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
- 创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
- 修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
- 创建表的时候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
使用ALTER 命令添加和删除索引
-
有四种方式来添加数据表的索引:
-
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):
该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL,
-
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):
这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
-
ALTER TABLE tbl_name ADD INDEX index_name (column_list):
添加普通索引,索引值可出现多次。
-
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):
该语句指定了索引为 FULLTEXT ,用于全文索引。
-
-
以下实例为在表中添加索引。
ALTER TABLE testalter_tbl ADD INDEX (c);
- 你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:
ALTER TABLE testalter_tbl DROP INDEX c;
使用ALTER 命令添加和删除主键
主键作用于列上(可以一个列或多个列联合主键),添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:
ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
你也可以使用 ALTER 命令删除主键:
ALTER TABLE testalter_tbl DROP PRIMARY KEY;
删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。
显示索引信息
你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。
- 尝试以下实例:
SHOW INDEX FROM table_name;
数据的约束
概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
- 分类
- 非空约束(NOT NULL):确保列中不包含空值。
- 唯一约束(UNIQUE):保证列中的所有值都是唯一的,可以包含空值。
- 主键约束(PRIMARY KEY):用于唯一标识表中的每一行数据,通常使用整数类型的列。
- 外键约束(FOREIGN KEY):用于定义列与其他表的关系,保证引用完整性。
非空约束:not null,值不能为null
-
1.创建表时添加约束
CREATE TABLE stu(id INT,NAME VARCHAR(20) NOT NULL -- name为非空 ); -
2.创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL; -
3.删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(25);
唯一约束:unique,值不能重复
-
1.创建表时添加唯一约束
CREATE TABLE stu(id INT,phone_num VARCHAR(20) UNIQUE -- 添加了唯一的约束 );注意mysql中,唯一约束限定的列的值可以有多个null
MySQL默认也会对UNIQUE的列建立索引
-
2.删除唯一约束
alter table stu modify phone_num varchar(20); -- 若无法删除可先将索引删除 ALTER TABLE stu DROP INDEX phone_num; -
3.在创建表后,添加唯一约束
ALTER TABLE stu MODIFY phone_nume VARCHAR(20) UNIQUE;
主键约束:primary key
-
1.注意:
含义:非空且唯一
主键就是表中记录的唯一标识
-
2.在创建表时,添加主键约束
CREATE TABLE stu (id INT PRIMARY KEY, -- 给id添加主键约束NAME VARCHAR(20) ); -
3.删除主键
ALTER TABLE stu DROP PRIMARY KEY; -- 去除主键 alter table stu modify id int; -- 移除not null的限约束 -
4.创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY; -
5.自动增长:
-
1.概念:如果某一列时数值类型的,使用auto_increment可以来完成值的自动增长
-
2.在创建表时,添加主键约束,并且完成主键自动增长
CREATE TABLE stu(id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束 并完成主键自动增长NAME VARCHAR(20) ); -
3.删除自动增长
ALTER TABLE stu MODIFY id INT; -
4.添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
-
外键约束:foreign key
-
1.在创建表时,可以添加外键
create table 表名(...外键列constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) ); -
2.删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称; -
3.创建表之后,添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ; -
4.级联操作
-
添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE; -
分类:
级联更新:ON UPDATE CASCADE级联删除:ON DELETE CASCADE
-
相关文章:
MySQL——数据类型、索引的建立、数据的约束
文章目录 数据类型索引的建立普通索引唯一索引使用ALTER 命令添加和删除索引使用ALTER 命令添加和删除主键显示索引信息 数据的约束非空约束:not null,值不能为null唯一约束:unique,值不能重复主键约束:primary key外键…...
常见框架漏洞详解③!!
Apache Apache 是世界使⽤排名第⼀的 Web 服务器软件。它可以运⾏在⼏乎所有⼴泛使⽤的计算 机平台上,由于其跨平台和安全性被⼴泛使⽤,是最流⾏的 Web 服务器端软件之⼀。 apache⽬录结构: bin:存放常⽤命令⼯具,如h…...
大数据基础知识
大数据(Big Data)是指无法用传统数据处理工具和技术有效处理的大规模、复杂的数据集。大数据技术通过对这些数据进行存储、处理和分析,从中提取有价值的信息和见解。 1. 大数据的特点 大数据通常具有以下四个主要特点,被称为“4…...
SQL Server 的透明数据加密
透明数据加密是SQL Server数据库安全众多特性中的一个,本文只针对透明数据加密。 在此测试之前,已经按照文档如何快速获得一个测试用SQL Server企业版创建了一个SQL Server 2019,并按照文档为SQL Server安装示例数据库AdventureWorks安装了…...
Windows图形界面(GUI)-MFC-C/C++ - 列表视图(List Control) - CListCtrl
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 列表视图(List Control) - CListCtrl 创建列表视图 设置列表视图属性 成员函数 注意事项 示例代码 列表视图(List Control) - CListCtrl 创建列表视图 在对话框编辑器中ÿ…...
一机两用的简单介绍
电子政务外网终端使用过程的风险与挑战 1、终端防护弱,失陷风险大 政务外网终端具备访问互联网能力,造成政务外网终端极易感染僵木蠕病毒,破坏正常办公 政务外网终端易被攻击失陷,成为从互联网攻击政务外网的跳板机 2、VPN漏洞…...
uniapp离线打包热更新失败-AndroidStudio离线打包apk后无法下载打开-热更新失败-plus.runtime.install失败
效果图 仅安卓 前言 1.plus.runtime.install一直fail(20240808), uni.openDocument可以打开本地apk文件 2.权限问题需小心 跑通前提 1.先确定apk地址有效,浏览器中手动下载可安装 2.确保已添加离线打包AndroidStudio的“android.permission.INSTALL_PACKAGES”权…...
深植根基、蓬勃向上 | openKylin 2.0正式发布!
2024年8月8日,openKylin 2.0版本正式发布!该版本默认搭载Linux 6.6 LTS内核,完成180操作系统核心组件自主选型升级,深度融合AI技术,上线麒麟AI助手等实用AI功能,并为用户带来包括开明软件包格式、不可变系统…...
【Material-UI】按钮组:尺寸与颜色详解
文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、按钮组的尺寸(Sizes)1. 小尺寸(Small)2. 中等尺寸(Medium)3. 大尺寸(Large) 三、按钮组的颜色(Colors)1…...
app抓包 burp配置
证书导出 模拟器安装证书 点击安装证书 将证书直接拖进来就行 配置代理 打开浏览器抓包...
图像与像素:利用ImageJ分析荧光显微镜图像|QuPath基础教程1|24-08-08
内容概要 数字图像由像素组成,每个像素具有一个数值,通常与检测到的光线相关。相同的像素值可以通过不同的方式进行显示。在科学图像处理中,可以通过修改查找表来独立于像素值改变图像外观。 一、引言 图像由其最小的组成单位——像素构成。…...
Prompt Fuzzer:用于增强 GenAI 应用程序的开源工具
Prompt Fuzzer 是一个开源工具,可以评估GenAI应用程序的系统提示针对基于动态 LLM 的威胁的安全性。 Prompt Fuzzer 功能: 1. 模拟十几种类型的 GenAI 攻击。 2. 该工具会根据系统提示自动进行情境化,针对与 GenAI 应用程序相关的特定主题或行…...
Vision Pro使用GLFT 加载模型shader错误解决办法
Glft shader在vision pro上加载错误 前言相关背景解决办法 参考文章 前言 之前在Vision Pro上尝试加载Glb文件,但是加载完成后发现加载出来的Glb文件材质不正确。材质是黑色的。因此整理一下解决方案。 相关背景 使用Unity开发,Glb的加载插件为gltf F…...
Netty技术全解析:MessageToMessageCodec类深度解析
❃博主首页 : 「码到三十五」 ,同名公众号 :「码到三十五」,wx号 : 「liwu0213」 ☠博主专栏 : <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 :…...
Three 【3D车模换肤】
目录 🌟前言🌟先看效果🌟实现代码🌟写在最后 🌟前言 哈喽小伙伴们,最近工作比较忙一直没有给大家更新,新的专栏 Three.js第三篇,记录一下博主学习Three.js的过程;一起来…...
语言模型简介和Ngram模型(1)
语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…...
MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox
MessageBox 弹框 MessageBox 的作用是替代系统自带的 alert、confirm ,仅适合展示较为简单的内容。如果需要弹出较为复杂的内容,请使用定制的弹窗。基本仿照ElementUI的同名组件。 原生,无依赖项,自适应布局,双端通用&…...
数据结构一排序算法
排序算法总结 冒泡排序 冒泡排序(Bubble Sort)也是一种简单直观的排序算法。假设长度为n的数组arr,要按照从小到大排序。则冒泡排序的具体过程可以描述为:首先从数组的第一个元素开始到数组最后一个元素为止,对数组中…...
[Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序
一、题目描述 原题地址 二、整体思路 (1)快排 对于SELECT K问题,可以通过三路快排解决,快排可以把一个元素放至按升序排序的数组正确的位置,左边为小于该元素的元素集合,右边为大于该元素的元素集合。 三…...
【栈和队列】常见面试题
文章目录 1.[有效的括号](https://leetcode.cn/problems/valid-parentheses/description/)1.1 题目要求1.2 利用栈解决 2. [用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)2.1 题目要求2.2 用队列实现栈 3.[用栈实现队列](https://le…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
