当前位置: 首页 > news >正文

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。
      字符串类型主要是varcharchar, 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 创建列表视图 在对话框编辑器中&#xff…...

一机两用的简单介绍

电子政务外网终端使用过程的风险与挑战 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类深度解析

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…...

Three 【3D车模换肤】

目录 &#x1f31f;前言&#x1f31f;先看效果&#x1f31f;实现代码&#x1f31f;写在最后 &#x1f31f;前言 哈喽小伙伴们&#xff0c;最近工作比较忙一直没有给大家更新&#xff0c;新的专栏 Three.js第三篇&#xff0c;记录一下博主学习Three.js的过程&#xff1b;一起来…...

语言模型简介和Ngram模型(1)

语言模型介绍一 语言模型语言模型概念语言模型应用-语音识别声纹特征提取语言模型挑选成句 语言模型应用-手写识别语言模型应用-输入法语言模型分类语言模型评价指标-困惑度PPL N-gram语言模型马尔科夫假设平滑问题平滑问题解决一平滑问题解决二 插值优化语言模型应用-文本纠错…...

MessageBox弹框替代系统自带的alert、confirm -- 高仿ElementUI MessageBox

MessageBox 弹框 MessageBox 的作用是替代系统自带的 alert、confirm &#xff0c;仅适合展示较为简单的内容。如果需要弹出较为复杂的内容&#xff0c;请使用定制的弹窗。基本仿照ElementUI的同名组件。 原生&#xff0c;无依赖项&#xff0c;自适应布局&#xff0c;双端通用&…...

数据结构一排序算法

排序算法总结 冒泡排序 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。假设长度为n的数组arr&#xff0c;要按照从小到大排序。则冒泡排序的具体过程可以描述为&#xff1a;首先从数组的第一个元素开始到数组最后一个元素为止&#xff0c;对数组中…...

[Leetcode 215][Medium]-数组中的第K个最大元素-快排/小根堆/堆排序

一、题目描述 原题地址 二、整体思路 &#xff08;1&#xff09;快排 对于SELECT K问题&#xff0c;可以通过三路快排解决&#xff0c;快排可以把一个元素放至按升序排序的数组正确的位置&#xff0c;左边为小于该元素的元素集合&#xff0c;右边为大于该元素的元素集合。 三…...

【栈和队列】常见面试题

文章目录 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…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

手机平板能效生态设计指令EU 2023/1670标准解读

手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读&#xff0c;综合法规核心要求、最新修正及企业合规要点&#xff1a; 一、法规背景与目标 生效与强制时间 发布于2023年8月31日&#xff08;OJ公报&…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

从实验室到产业:IndexTTS 在六大核心场景的落地实践

一、内容创作&#xff1a;重构数字内容生产范式 在短视频创作领域&#xff0c;IndexTTS 的语音克隆技术彻底改变了配音流程。B 站 UP 主通过 5 秒参考音频即可克隆出郭老师音色&#xff0c;生成的 “各位吴彦祖们大家好” 语音相似度达 97%&#xff0c;单条视频播放量突破百万…...

接口 RESTful 中的超媒体:REST 架构的灵魂驱动

在 RESTful 架构中&#xff0c;** 超媒体&#xff08;Hypermedia&#xff09;** 是一个核心概念&#xff0c;它体现了 REST 的 “表述性状态转移&#xff08;Representational State Transfer&#xff09;” 的本质&#xff0c;也是区分 “真 RESTful API” 与 “伪 RESTful AP…...