前言:
本章节主要学习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字节 | 极大文本数据 |