MySQL第二章 sql约束与sql数据类型

前言:

本章节主要学习MySQL约束与MySQL数据类型相关知识点,收录于MySQL基础系列,该系列主要讲解MySQL数据库dos命令/sql约束/sql数据类型/sql语句/sql连接查询等知识点,欢迎童鞋们互相交流。觉得不错可以三连订阅喔。

目标:

[1. 术语](#1. 术语)

[2. 约束](#2. 约束)

[2.1 NOT NULL约束(不为空约束)](#2.1 NOT NULL约束(不为空约束))

[2.2 DEFAULT(默认值约束)](#2.2 DEFAULT(默认值约束))

[2.3 UNIQUE(唯一值约束)](#2.3 UNIQUE(唯一值约束))

[2.4 主键约束](#2.4 主键约束)

[2.5 外键约束](#2.5 外键约束)

[2.6 CHECK约束](#2.6 CHECK约束)

[2.7 index(索引约束)](#2.7 index(索引约束))

[3. MySQL 数据类型](#3. MySQL 数据类型)

[3.1 数值类型](#3.1 数值类型)

[3.2 日期和时间类型](#3.2 日期和时间类型)

[3.3 字符串类型](#3.3 字符串类型)


内容:

1. 术语

数据库: 数据库是一些关联表的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。

行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

2. 约束

给表添加约束,保证表中数据的完整性。

约束是表的数据列上的强制规则,用于限制表中数据类型等,它可以确保数据的准确性和可靠性。

约束可以是列级别或表级别的。列级别约束只应用到一个列上,而表级别约束作用到整个表。

2.1 NOT NULL约束(不为空约束)

确保列上不存在空值。

设计表时,对字段设置 not null即为字段添加该约束。

2.2 DEFAULT(默认值约束)

当列中没有值的时候,给列提供一个默认值。

设计表时,对字段添加default即为字段添加该约束。

也可删除默认约束:

java 复制代码
ALTER TABLE 表名
ALTER COLUMN 字段DROP DEFAULT;

2.3 UNIQUE(唯一值约束)

确保列中的值都不相同。

设计表时,对字段添加unique即为该字段添加约束。

java 复制代码
AGE INT NOT NULL UNIQUE

2.4 主键约束

唯一标识表中的每一行/记录。用来区分表中的每条数据,相当于身份证号,唯一标识。

设计表时,对字段设置primary key即为该字段添加主键。

主键必须唯一,不能为空,一个表只能有一个主键。

删除主键:

java 复制代码
ALTER TABLE 表名DROP PRIMARY KEY;

2.5 外键约束

唯一标识另一个表中的每一行/记录。

外键用于连接两个表。也称为引用键。

外键是一个或一组的列,为了连接匹配到另一个表的主键。

2.6 CHECK约束

确保列中的值满足特定条件。

例:为Id_p字段添加约束,只能包含大于0的整数

java 复制代码
CREATE TABLE Persons(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (Id_P>0)
)

2.7 index(索引约束)

用于快速检索数据。

为了减少无效的数据访问,将键的值拿过来存放到独立的块中。 并且为每一个键值添加一个指针, 指向原来的数据块。

当进行定位操作时,不再进行表扫描。而是进行索引扫描(Index Scan), 依次读出所有的索引块,进行键值的匹配。当找到匹配的键值后,
根据该行的指针直接读取对应的数据块,进行操作。

例:创建表时,添加索引:

java 复制代码
CREATE TABLE mytable(  
ID INT NOT NULL,   
username VARCHAR(16) NOT NULL,  
INDEX [indexName] (username(length))  
);  

删除索引:

java 复制代码
DROP INDEX [indexName] ON mytable; 

3. MySQL 数据类型

MySQL支持多种类型,大致可以分为三类:

数值、日期/时间、字符串(字符)类型。

3.1 数值类型

|-------------|----------------------------------|-----------------------------------------------------------------|------------|
| 类型 | 大小 | 范围(无符号) | 用途 |
| TINYINT | 1 字节 | (0,255) | 小整数值 |
| SMALLINT | 2 字节 | (0,65 535) | 大整数值 |
| MEDIUMINT | 3 字节 | (0,16 777 215) | 大整数值 |
| INT或INTEGER | 4 字节 | (0,4 294 967 295) | 大整数值 |
| BIGINT | 8 字节 | (0,18 446 744 073 709 551 615) | 极大整数值 |
| FLOAT | 4 字节 | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度 浮点数值 |
| DOUBLE | 8 字节 | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度 浮点数值 |
| DECIMAL | 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 小数值 |

3.2 日期和时间类型

|------------|---------------------|--------------|---|
| 类型 | 格式 | 用途 | |
| DATE | YYYY-MM-DD | 日期值 | |
| TIME | HH:MM:SS | 时间值或持续时间 | |
| YEAR | YYYY | 年份值 | |
| DATETIME | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 | |
| TIMESTAMP | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 | |

3.3 字符串类型

|------------|-------------------|--------------------|
| 类型 | 大小 | 用途 |
| CHAR | 0-255字节 | 定长字符串 |
| VARCHAR | 0-65535 字节 | 变长字符串 |
| TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
| TINYTEXT | 0-255字节 | 短文本字符串 |
| BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
| TEXT | 0-65 535字节 | 长文本数据 |
| MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
| MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
| LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
| LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |

相关推荐
一屉大大大花卷24 分钟前
初识Neo4j之入门介绍(一)
数据库·neo4j
叁沐37 分钟前
MySQL 08 详解read view:事务到底是隔离的还是不隔离的?
mysql
周胡杰1 小时前
鸿蒙arkts使用关系型数据库,使用DB Browser for SQLite连接和查看数据库数据?使用TaskPool进行频繁数据库操作
前端·数据库·华为·harmonyos·鸿蒙·鸿蒙系统
wkj0011 小时前
navicate如何设置数据库引擎
数据库·mysql
ladymorgana1 小时前
【Spring Boot】HikariCP 连接池 YAML 配置详解
spring boot·后端·mysql·连接池·hikaricp
赵渝强老师1 小时前
【赵渝强老师】Oracle RMAN的目录数据库
数据库·oracle
暖暖木头1 小时前
Oracle注释详解
数据库·oracle
御控工业物联网1 小时前
御控网关如何实现MQTT、MODBUS、OPCUA、SQL、HTTP之间协议转换
数据库·sql·http
GJCTYU3 小时前
spring中@Transactional注解和事务的实战理解附代码
数据库·spring boot·后端·spring·oracle·mybatis
MicroTech20253 小时前
微算法科技(NASDAQ: MLGO)探索Grover量子搜索算法,利用量子叠加和干涉原理,实现在无序数据库中快速定位目标信息的效果。
数据库·科技·算法