常用数据类型
整数型:
int:
int 是常用的整数类型,占用4个字节(32位)的存储空间
有符号的情况下,其范围是从-2^31 (-2147483648) 到 2^31-1 (2147483647)
无符号的情况下,其范围是从0到2^32-1 (4294967295)
-----------------------
列名称 int unsigned # 加unsigned不带符号||不加默认带符号
tinyint:
tinyint 是最小的整数类型,占用1个字节(8位)的存储空间
有符号的情况下,其范围是从-128到127
无符号的情况下,其范围是从0到255
-----------------------
列名称 tinyint unsigned # 加unsigned不带符号||不加默认带符号
bigint:
bigint 是最大的整数类型,占用8个字节(64位)的存储空间
有符号的情况下,其范围是从-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807)
无符号的情况下,其范围是从0到2^64-1 (18446744073709551615)
-----------------------
列名称 bigint unsigned # 加unsigned不带符号||不加默认带符号
小数型:
float:
float 是一种浮点数类型,它允许存储单精度浮点数.
存储空间:
通常占用4个字节(32位),其中1位用于符号位,8位用于指数,剩下的23位用于尾数(精度).
精度范围:
大约能提供6到7位的有效数字,但不保证完全精确,因为浮点数在计算机内部是近似表示的.
double:
double 也属于浮点数类型,但它是双精度浮点数.
存储空间:
通常占用8个字节(64位),结构类似于 float,只是指数和尾数的位数更多.
精度范围:
double 可以提供更高的精度,约15位有效数字,同样不保证完全精确.
decimal:
decimal 是一种定点数类型,用于存储精确的小数,特别适合货币、财务等对精度要求高的场景.
存储空间:
根据指定的精度(M)和小数位数(D)而变化,最多可以达到65位数字的精度,其中M代表总的位数(包括整数部分和小数部分),D表示小数部分的位数.
精度范围:
decimal 类型可以非常精确地表示数值,但要注意较大的M和D值可能会消耗较多的空间.
例子-------------------------
create table little(id int not null primary key auto_increment,first decimal(8,2))default charse
t=utf8;
-------------------------
insert into little(first) values(1.2222);
-------------------------
select * from little;
-------------------------
字符串:
char(消耗空间大,搜索速度快):定长字符串,固定用n(最大255)个字符串进行存储,即使没有n个字符,也会按照n来存储
含义:
固定长度的字符串类型,指定长度n,存储的字符数最多为n个.
作用:
适用于存储长度固定的短字符串,如身份证号码、邮政编码等.
特点:
即使实际输入的字符少于n,MySQL也会在右侧补足空格使其达到n个字符长度.
固定长度使得查询效率较高,因为MySQL知道每个记录中该字段的大小一致,利于内存和磁盘的优化.
空间利用率不高,如果存储的数据往往小于定义长度,会造成空间浪费.
varchar(消耗空间小,搜索速度慢):变长字符串,真实数据有所长就按照多长存储,最大655字节
含义:
变长字符串类型,指定长度n,存储的字符数最多为n个,存储空间随实际内容动态调整.
作用:
适用于存储长度可变的字符串,如姓名、地址等.
特点:
存储时不填充空格,只会存储实际内容和必要的字符长度信息.
查询效率相比CHAR略低,但节省空间,尤其适合大部分数据长度不一致的情况.
text:
含义:
大文本类型,可以存储多达65,535(2^16-1)个字符的文本数据.
作用:
适用于存储较长的文章、描述、产品说明等.
特点:
TEXT列的数据不在行内存储,而是单独存储在外部区域,因此不会影响主键索引的大小.
不支持全文索引,默认情况下只能建立前缀索引.
直接比较和排序TEXT类型的数据可能会影响性能.
mediumtext:
含义:
更大的文本类型,可以存储多达16,777,215(即2^24-1)个字符的文本数据.
作用:
适用于存储超长的文档、报告、日志记录等.
特点:
与TEXT类型相似,但是存储容量更大,其他特性保持一致
longtext:
含义:
最大的文本类型,可以存储多达4,294,967,295(即2^32-1)个字符的文本数据.
作用:
用于存储极其庞大的文本数据,如大型数据库的备份、大数据分析结果等.
特点:
与TEXT和MEDIUMTEXT类似,但存储容量进一步增大,适用于存储极度庞大的文本内容.
时间型:
time(仅包含时间):
含义:
time 数据类型用于存储时间值,不包含日期部分。它能够存储一天中的时间,即小时、分钟和秒,有的数据库系统还支持存储微秒或毫秒级别的精度,即'-838:59:59' 到 '838:59:59' 的时间范围,表示从-838小时59分钟59秒到838小时59分钟59秒的时间跨度。
格式:
通常表示为 HH:MM:SS,其中 HH 表示小时(00到23),MM 表示分钟(00到59),SS 表示秒(00到59)。有些情况下,还可以包括毫秒或微秒,如 HH:MM:SS.mmm。
date(仅包含日期):
含义:
DATE类型仅用于存储日期信息,不包含时间部分。它的范围是从 '1000-01-01' 到 '9999-12-31'。
格式:
存储和显示格式为 'YYYY-MM-DD',仅关注年、月、日。
datetime(不仅包含时间还包含日期):
含义:
datatime 数据类型用于存储同时包含日期和时间的信息。它能够存储一个具体的日期加上具体的时间点,覆盖的范围广泛,'1000-01-01 00:00:00' 到 '9999-12-31 23:59:59' 的日期时间范围。
格式:
一般格式为 YYYY-MM-DD HH:MM:SS,其中 YYYY 表示年份,MM 表示月份,DD 表示日期,后面跟着时间的小时、分钟和秒。同样,某些数据库系统也支持到毫秒或微秒级别的精度。
实例(从头开始进行演示)
mysql -uroot -p # 登录mysql,命令输入完成后输入密码
# (若环境变量设置完成可直接cmd运行此命令,反之则设置环境变量,或者在mysql.exe的文件中运行cmd后在执行此命令)
mysql -hlocalhost/*登陆地址*/ -uroot/*用户名*/ -p # 登录mysql,命令输入完成后输入密码
show databases; # 查看现有数据库
+--------------------+
| Database |
+--------------------+
| lizi |
| users |
+--------------------+
create database lizi default charset utf8 collate utf8_general_ci; # 建立名为lizi的数据库,设置默认字符集为utf8,默认校对规则为utf8_general_ci
use lizi; # 使用lizi数据库
create table tablelizi /*创建名为tablelizi的数据表*/ (`liziID`/*设置第一个列表名为liziID*/ int/*数据类型为整数型*/ auto_increment/*内容从1开始自增*/ primary key/*设置为主链*/,`liziname`/*设置第二个列表名为liziname*/ varchar(16)/*设置数据最大为16个字符*/ default 'morenshujv'/*如果不输入liziname的数据,将自动默认输入为morenshujv*/,`lizipaword`/*设置第三个列表名为lizipaword*/ varchar(20)/*设置数据最大为16个字符*/ not null/*数据输入不允许为空*/)engine=innodb/*指定使用innodb储存引擎*/ default charset=utf8/*默认字符集为utf8*/;
show tables; # 查看lizi中的数据表
+----------------+
| Tables_in_lizi |
+----------------+
| tablelizi |
+----------------+
insert into `tablelizi`(`lizipaword`) values('lizi123'); # 使用默认liziname,插入lizipaword为'lizi123'的数据
insert into `tablelizi`(`liziname`,`lizipaword`) values('admin','admin'); # 插入liziname为'admin',lizipaword为'admin'的数据
select * from `tablelizi`; # 查询tablelizi中的所有数据
+--------+------------+------------+
| liziID | liziname | lizipaword |
+--------+------------+------------+
| 1 | morenshujv | lizi123 |
| 2 | admin | admin |
+--------+------------+------------+
select * from `tablelizi` where`liziID`='1';#查询tablelizi中liziID等于1的一行的所有数据(此处可以SQL注入)
+--------+------------+------------+
| liziID | liziname | lizipaword |
+--------+------------+------------+
| 1 | morenshujv | lizi123 |
+--------+------------+------------+
select `liziID` from `tablelizi`; # 查询tablelizi中liziID这一列的数据
+--------+
| liziID |
+--------+
| 1 |
| 2 |
+--------+
select `liziname` from `tablelizi` where `lizipaword`='lizi123'; # 查询tablelizi中lizipaword等于lizi123一行的liizname的数据
+------------+
| liziname |
+------------+
| morenshujv |
+------------+
drop table tablelizi; # 删除名为tablelizi的数据表
show tables; # 查看数据表
drop database lizi; # 删除名为lizi的数据库
show databases; # 查看数据库
+--------------------+
| Database |
+--------------------+
| users |
+--------------------+
exit # 退出数据库