文章目录
- 一、数值类型
- 1.tinyint
- 2.bit
- 3.float
- 4.decimal
- 二、字符串类型
- 1.char
- 2.varchar
- 三、时间类型
- 四、enum和set
- 插入-insert into
- 查找-直接查-find_in_set
一、数值类型
1.tinyint
占用一个字节,取值范围为-128~127。
列名 tinyint
num tinyint //一个列为num的用tinyint类型
无符号tinyint,占用1字节,取值范围为0~255。
列名 tinyint unsigned
num tinyint unsigned//一个列为num的用tinyint的无符号类型
2.bit
占用1-64位数
列名 bit[(M)] //M为比特位数,范围1-64,M可以被省略,默认为1
num bit(8)//一个列num的用8个比特位
3.float
列名 float[(m, d)]//m指定显示总长度,d指定小数点位数,占4个字节
num float(4,2)//长度为-99.99~99.99总共四位数,小数点占两位
无符号float
列名 float[(m, d)] unsigned
num float(4, 2) unsigned//长度为0~99.99
4.decimal
decimal比float精度更高
列名 decimal(m, d) [unsigned]//m指定显示总长度,d指定小数点位数
注意范围不能省略
二、字符串类型
1.char
列名 char(L)//L单位是字符,最大255
num char(2)//最多插入两个字符比如'ab',但是不能插入'abc'
注意:mysql中的字符就是一个字符,一个字符可以是一个字母a也可以是一个汉字
2.varchar
列名 varchar(L)//L单位是字符,最大65535
num varchar(6)//最多插入6个字符比如'abcdef',或者6个汉字一二三四五六,但是不能插入'abcdefg',也不能插入一二三四五六七
char和varchar区别
- char类型的数据是定长的,效率高(直接访问定长的空间)。
- varchar类型的数据是变长的,效率低(需要先读取存储字符串的长度,再访问指定长度的空间)。
三、时间类型
列名 date//日期格式为'YYYY-MM-DD','2024-1-1',占用三字节。
列名 datetime//时间日期格式为'YYYY-MM-DD HH:MM:SS','2024-1-1 12:15:24',占用八字节。
列名 timestamp//时间戳,格式为'YYYY-MM-DD HH:MM:SS',占用四字节,插入不写的话会自动插入当前时间。
四、enum和set
设置enum值时只允许选取其中的一个值,设置set值时可以选取其中的一个或多个值
列名 enum('选项一','选项二')
列名 set('选项一','选项二')
gender enum('男','女')//设置列为gender,选项有男 女
name set('张三','李四', '王五')//name,选项有张三 李四 王五
插入-insert into
//下列表名是student
insert into student value('男', '张三');//用汉字插入一个
insert into student value('男', '张三, 李四');//用汉字插入两个,插入多个中间要用英文逗号隔开insert into student value('1', '张三');//用数字设置,提供1,2,3...insert into student value('男', 1);//用汉字插入男张三
insert into student value('男', 2);//用汉字插入男李四
insert into student value('男', 3);//用汉字插入男张三 李四
注意:set用的是用数字表示是位图,1对应0001是第一个,2对应0010是第二个,3对应0011是第一和第二个,4对应0100是第三个,以此类推。
查找-直接查-find_in_set
//下列表名是student 列名是gender 筛选是'男'或者数字1
select * from student where gender='男'; 或者 select * from student where gender=1;
select * from 表名 where 列名='描述';
find_in_set(str,strlist)函数
- 查找strlist列中是否有str字符串
- 查找strlist字符串中是否有str字符,返回位置,例如select find_in_set(‘a’,‘a,b,c’);//返回1
//下列表名是student 列name
select * from student where find_in_set('张三'name);//在表student中,列name中。查找'张三'
select * from 表名 where find_in_set('str',strlist);
find_in_set和直接查找区别:
- find_in_set查找包括str的值,如查找’代码’,那么’代码’,'代码,游泳’都算
- 直接查找只查找对应值,如查找’代码’,那么’代码’算,'代码,游泳’不算,因为多了游泳