SQL-数据类型

简介: SQL-数据类型

🚀DDL-数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型,复合函数。


🚀数值类型

类型

大小

有符号(SIGNED)范围

无符号(UNSIGNED)范围

描述

TINYINT

1byte

(-128127)

(0255)

小整数值

SMALLINT

2bytes

(-3276832767)

(065535)

大整数值

MEDIUMINT

3bytes

(-83886088388607)

(016777215)

大整数值

INT/INTEGER

4bytes

(-2147483648, 2147483647)

(04294967295)

大整数值

BIGINT

8bytes

(-2^632^63-1)

(02^64-1)

极大整数值

FLOAT

4bytes

(-3.402823466 E+38

3.402823466351 E+38)

和 (1.175494351 E-

383.402823466 E+38)

单精度浮点数值

DOUBLE

8bytes

(-1.7976931348623157

E+308, 1.7976931348623157 E+308)

(2.2250738585072014 E-308, 1.7976931348623157

E+308)

双精度浮点数值

DECIMAL

依赖于M(精度)D(标度的值

例如123.45,精度指整个数值的长度是5,标度指的是小数位数是2

依赖于M(精度)D(标度)的值

小数值(精确定点数)

案例:假如在一张表中我们要去描述用户的年龄,我们可以选择age,那数据类型呢?

你写age int()肯定是可以,因为年龄的范围也在int里面,但是int占用的是4个字节,相对来说是比较暂用存储空间的,所以这里我们也可以选择TINYINT,可是对于age来说年龄会出现负数嘛?不会,所以我们要使用无符号的范围,我们可以在TINYINT后面加上标识UNSIGNED,age tinyint unsigned

假如要去描述一个人的分数score ,分数是有小数的,一般介于0-100之间,而分数这里一般让它出现一位小数就行了,这个时候可以考虑使用double


double里面要指定两个参数,double(参数1,参数2),参数1代表当前double整个长度是多长,例如100.0,最长是4位。参数2代表允许出现几位小数,分数一般让它出现一位小数,所以此时描述一个人的分数 score double(4,1)


🚀字符串类型

类型

大小

描述

CHAR

0-255 bytes

定长字符串(需要指定长度)

VARCHAR

0-65535 bytes

变长字符串(需要指定长度)

TINYBLOB

0-255 bytes

不超过255个字符的二进制数据

TINYTEXT

0-255 bytes

短文本字符串

BLOB

0-65535 bytes

二进制形式的长文本数据

TEXT

0-65535 bytes

长文本数据

MEDIUMBLOB

0-16 777 215 bytes

二进制形式的中等长度文本数据

MEDIUMTEXT

0-16 777 215 bytes

中等长度文本数据

LONGBLOB

0-4 294 967 295 bytes

二进制形式的极大文本数据

LONGTEXT

0-4 294 967 295 bytes

极大文本数据

char 与 varchar 都可以描述字符串,char是定长字符串,指定长度多长,就占用多少个字符,和字段值的长度无关  。而varchar是变长字符串,指定的长度为最大占用长度  。相对来说,char的性能会更高些。


🚀举例:

           char(10),即使你存储1个字符,它也会占用10个字符的空间,未占用的字符其他空间会使用空格进行补位

           varchar(10),10代表最多存储10个字符,一旦超出10个字符将会报错。但是你存储一个字符就占一个字符空间,你存储两个字符就占两个字符空间,它会根据你的内容去计算你需要占用的空间

char ------> 性能高

varchar -----> 性能差

原因是varchar会根据内容去计算需要占用的空间


🚀案例:

用户名 username ------> 长度不定, 最长不会超过50

           username varchar(50)

性别 gender ---------> 存储值, 不是男,就是女

          gender char(1)

手机号 phone --------> 固定长度为11

          phone char(11)

🚀日期时间类型

类型

大小

范围

格式

描述

DATE

3

1000-01-01 至 9999-12-31

YYYY-MM-DD

日期值

TIME

3

-838:59:59 至 838:59:59

HH:MM:SS

时间值或持续时间

YEAR

1

1901 至 2155

YYYY

年份值

DATETIME

8

1000-01-01 00:00:00 

9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

4

1970-01-01 00:00:01 

2038-01-19 03:14:07

YYYY-MM-DD HH:MM:SS

混合日期和时间值,时间戳

创建包含日期类型的表TODAY

create table today (t1 datetime , t2 date, t3 time ,t4 timestamp , t5 year) ;

🚀复合类型

类型 最大值 说明
枚举类型enum("value1","value2",.....) 65535 该类型的字段只能容纳所列值之一或为null
集合类型set("value1","value2",.....) 64 该类型的字段可以容纳一组值或为null

enum类型的字段只允许从集合中选择某一个值,类似于单选按钮的功能,例如,定义一个人的性别只能从集合{”男“,”女“}中选择一个

set类型的字段可以允许从集合中选择多个值,类似于复选框,例如,定义一个人的爱好可以从集合{”唱歌“,”跳舞“,”乒乓球“,”旅游“}

它们两者在数据库内部并不是以字符的方式去存储的,而是使用一系列的数字,因此数据处理时效率高

🚀案例

生日字段 birthday

birthday date

创建时间 createtime

createtime datetime


🚀表操作-案例

设计一张员工信息表,要求如下:

  1. 编号(纯数字)
  2. 员工工号   (字符串类型,长度不超过10)
  3. 员工姓名(字符串类型,长度不超过10位)
  4. 性别(男/女,存储一个汉字)
  5. 年龄(正常人年龄,不可能存储负数)
  6. 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
  7. 入职时间(取值年月日即可)
create table emp (
    id int comment '编号',
    workno varchar(10) comment '员工工号' ,
    name varchar(10) comment '员工姓名' ,
    gender char(1) comment '性别' ,
    age tinyint unsigned comment '年龄' ,
    idcard char(18) comment '身份证' ,
    entrydate date comment '入职时间' 
) comment '员工表' ;

我们可以再用desc emp语句去查看一下我们所创建的表,如下图:


有一点是需要注意的:表结构创建好了,里面的name字段是varchar类型,最大长度为10,也就意味着如果超过10将会报错

相关文章
|
2月前
|
SQL 数据处理 数据库
SQL中的函数有哪些类型
【8月更文挑战第20天】SQL中的函数有哪些类型
20 1
|
4月前
|
SQL 存储 XML
SQL 通用数据类型
SQL 通用数据类型
27 1
|
5月前
|
SQL 存储 关系型数据库
SQL 语法
SQL 语法
39 2
|
5月前
|
SQL Serverless 数据库
SQL语句的类型
SQL语句的类型
|
11月前
|
SQL Java 数据库连接
不受支持的SQL类型1111
不受支持的SQL类型1111
100 0
|
存储 SQL XML
SQL Server数据库数据类型详解
SQL Server数据库数据类型详解
271 0