写在前面
各位彦祖亦菲,可以给我点赞收藏关注嘛!!感激不尽
数据类型
整型:
分类
类型 | 字节数 | 有符号(默认)范围 | 无符号(UNSIGNED)范围 |
---|
TINYINT | 1 字节 | -128 到 127 | 0 到 255 |
SMALLINT | 2 字节 | -32,768 到 32,767 | 0 到 65,535 |
MEDIUMINT | 3 字节 | -8,388,608 到 8,388,607 | 0 到 16,777,215 |
INT 或 INTEGER | 4 字节 | -2,147,483,648 到 2,147,483,647 | 0 到 4,294,967,295 |
BIGINT | 8 字节 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0 到 18,446,744,073,709,551,615 |
int(n)
- 在MySQL 8.0 已弃用,int(n)=int
- 可以使用int(n) zerofill,这样是显示n位,不足的用0在前面补,超过了就正常显示原数
int(n) zerofill;
无符号类型怎么定义
<type> unsigend;
浮点型
double,float,decimal
类型 | 名称 | 字节数 | 精度范围(大致) | 精度控制 |
---|
FLOAT(M, D) | 单精度浮点数 | 4 字节 | ~ ±3.4E38 | 精度较低 |
DOUBLE(M, D) 或 REAL | 双精度浮点数 | 8 字节 | ~ ±1.8E308 | 精度高 |
DECIMAL(M, D) 或 NUMERIC | 高精度定点数 | 按精度存储 | 范围由 M 控制 | 精度最高(不丢失) |
创建
- 注意,M是总位数,及小数位数加上整数位数
- D是小数位数
- 所以整数最大位数是M-D,当赋值的时候超过了,在严格检查模式下会报错,不在,则会警告,且输入不是想要的结果
- 小数位数随便多少都可以,但是会四舍五入成你想要的位数
- float和double中在取多位小数的时候,会出现精度丢失的情况
- 与语言类程序一样,在有高精度的字段中,不要用float和double
- 高精度字段用decimal
alter table <表名> add <字段名> double(M,D);
alter table <表名> add <字段名> float(M,D);
alter table <表名> add <字段名> decimal(M, D);
字符型
类型 | 最大长度 | 字符集依赖 | 存储方式 | 适用场景 | 备注 |
---|
CHAR(M) | 255 字符 | 取决于字符集 | 定长,填充空格 | 长度固定的字符串,如性别(M/F)、国家代码等 | 固定长度,不节省空间 |
VARCHAR(M) | 65,535 字节 | 取决于字符集 | 变长,存储实际字符 | 可变长度字符串,如用户名、电子邮件等 | 节省空间,但处理较慢 |
TEXT | 65,535 字符 | 取决于字符集 | 变长,不定长 | 长文本数据,如文章内容、评论等 | 存储大文本,长度较长时使用 |
TINYTEXT | 255 字符 | 取决于字符集 | 变长,不定长 | 小段文本,如评论摘要等 | 比 TEXT 小,适合短文本 |
MEDIUMTEXT | 16,777,215 字符 | 取决于字符集 | 变长,不定长 | 中等长度文本,如大段描述等 | 比 TEXT 大,适合中等文本 |
LONGTEXT | 4,294,967,295 字符 | 取决于字符集 | 变长,不定长 | 超大文本数据,如文章、文件内容等 | 存储非常大的文本,适合文章、日志等 |
布尔类型
alter table <表名> add <字段名> boolean;
枚举类型(取一个)
- 只能取该类型中的一个,不能取额外的,取额外的会报错
- 枚举类型存储时是整数,也就是说,你在插入数据的时候用整数插入,也能插入你对应的字符串
- 但是注意下标是从1开始的,如下面的的values1是1所对应的值,后面的依次对应
create table <table_name> (
<字段名> enum('value1', 'value2', 'value3', ...)
);
set类型(取多个)
创建
create table <table_name> (
<字段名> set('value1', 'value2', 'value3', ...)
);
插入
- 注意,在一个‘’里逗号隔开,而不是在多个‘’里在外面逗号隔开
正确的如下:
insert into <表名>(...) values(=='value1,value2'==)
错误的如下
insert into <表名>(...) values(=='value1'==, =='value2'==)
日期类型
类型 | 格式 | 范围 | 精度支持 | 常用场景 |
---|
DATE | 'YYYY-MM-DD' | 1000-01-01 到 9999-12-31 | 无 | 出生日期、节假日等 |
DATETIME | 'YYYY-MM-DD HH:MM:SS' | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 | 秒(支持到微秒) | 注册时间、下单时间 |
TIMESTAMP | 'YYYY-MM-DD HH:MM:SS' | 1970-01-01 00:00:01 到 2038-01-19 | 秒(支持到微秒) | 自动记录创建/更新时间 |
TIME | 'HH:MM:SS' | -838:59:59 到 838:59:59 | 秒(支持到微秒) | 上班时间、倒计时 |
YEAR | 'YYYY' | 1901 到 2155 | 无 | 出厂年份、毕业年份 |
创建
create table <表名> (
<字段名> <日期类型>
);
赋值
- 具体赋值跟着具体类型的格式给就行
- 一般不会手动创建,一般都是自动生成的