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字节 | 极大文本数据 |

相关推荐
掉头发的王富贵1 分钟前
ShardingSphere-JDBC入门教程(上篇)
spring boot·后端·mysql
小云数据库服务专线13 分钟前
GaussDB数据库架构师修炼(十六) 如何选择磁盘
数据库·数据库架构·gaussdb
码出财富1 小时前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农3 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong3 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪3 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
冷崖8 小时前
MySQL异步连接池的学习(五)
学习·mysql
时序数据说9 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.12 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)12 小时前
KINGBASE集群日常维护管理命令总结
数据库·database