🎉欢迎您来到我的MySQL基础复习专栏
☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹
✨博客主页:小小恶斯法克的博客
🎈该系列文章专栏:重拾MySQL
🍹文章作者技术和水平很有限,如果文中出现错误,希望大家能指正🙏
📜 感谢大家的关注! ❤️
目录
DDL-表操作-数据类型
数值类型
字符串类型
举例:
案例:
日期时间类型
案例
表操作-案例
DDL-表操作-数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
数值类型
类型 | 大小 | 有符号(SIGNED)范围 | 无符号(UNSIGNED)范围 | 描述 |
TINYINT | 1byte | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2bytes | (-32768,32767) | (0,65535) | 大整数值 |
MEDIUMINT | 3bytes | (-8388608,8388607) | (0,16777215) | 大整数值 |
INT/INTEGER | 4bytes | (-2147483648, 2147483647) | (0,4294967295) | 大整数值 |
BIGINT | 8bytes | (-2^63,2^63-1) | (0,2^64-1) | 极大整数值 |
FLOAT | 4bytes | (-3.402823466 E+38, 3.402823466351 E+38) | 0 和 (1.175494351 E- 38,3.402823466 E+38) | 单精度浮点数值 |
DOUBLE | 8bytes | (-1.7976931348623157 E+308, 1.7976931348623157 E+308) | 0 和(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 | 混合日期和时间值,时间戳 |
案例
生日字段 birthday
birthday date
创建时间 createtime
createtime datetime
表操作-案例
设计一张员工信息表,要求如下:
- 编号(纯数字)
- 员工工号 (字符串类型,长度不超过10位)
- 员工姓名(字符串类型,长度不超过10位)
- 性别(男/女,存储一个汉字)
- 年龄(正常人年龄,不可能存储负数)
- 身份证号(二代身份证号均为18位,身份证中有X这样的字符)
- 入职时间(取值年月日即可)
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将会报错