文章目录
mysql基本数据类型
数值类型
tinyint[unsigned] 占1个字节,带符号的范围为-128~127,服务号范围为0~255,默认有符号
smallint[unsigned] 占2个字节,带符号范围为-2^15~2^15-1,无符号为2^16-1
int[unsigned] 占4个字节,带符号范围为-2^31~2^31-1,服务号是2^32-1
bigint[unsigned] 占8个字节,带符号范围为-2^63~2^63-1,无符号为2^64-1
bit类型
bit[M]:m代表当前值有多少位,范围为1到64,忽略默认为1
create table t3(
name varchar(20),
gender bit(1) comment '::男,1::女';
);
浮点数
float
float:
float[(m,d)] [nusigned]:M指显示长度,d指定小数位数,占用4个字节
例如:
float(4,2)表示4伟长度,2位小数,-99.99~99.99
若插入长度位于整个区间内,它容许进行插入,但是会进行四舍五入,例如99.991插入后变成99.99
99.995插入就不行
所以上面的插入范围变成-99.994~99.994
float unsigned(4,2)的范围就变成了0~99.99,不会像整数一样增加范围了
decimal
与float用法一样
但是精确度不一样,精确度更高
decimal最大得位数为65,支持小数最大位数d为30
字符类型
char
char(L):固定长度字符串,L是可以存储的长度,单位为字符,最大长度为255
固定长度的字符串,长度本身也是一种约束
固定的意思是按照规定的长度直接开辟好空间用来使用
varchar
varchar(L),可变长度的字符串,变长上限
在utf8中一个字符占3字节,最大为21845
gbk中一个字符占2字节,最大为32766
varchar(6)表示可以存放6个字符
边长字符串是指在规定的L范围内会根据你所使用的多少进行开辟,不能超过L这个范围
日期和时间类型
enum和set
enum
create table t4(name char(6), sex enum('男','女'));
mysql> insert into t4 values('张三','男');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values('张三','l');
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert into t4 values('李四','女');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t4 values('hello',1);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values('hello',0);
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
mysql> insert into t4 values('hello',2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into t4 values('hello',3);
ERROR 1265 (01000): Data truncated for column 'sex' at row 1
如上面所示,当我们sex一栏插入男或者女,或者其对应的1或者2时都没有问题,但是插入其它内容时就会报错
set
set('选项1','选项2','选项3');
选项1 选项2 选项3
1 0 1
使用一 不使用2 使用3
那么101三个比特位构成数字5,当我们输入数字5个时候就代表选项1和选项3被选择了
create table t5(name char(5),hoppy set('篮球','足球','羽毛球'));
mysql> insert into t5 values('张三',5);
Query OK, 1 row affected (0.01 sec)
mysql> select * from t5;
+--------+------------------+
| name | hoppy |
+--------+------------------+
| 张三 | 篮球,羽毛球 |
+--------+------------------+
1 row in set (0.00 sec)
如上所以,说如5就将这两个选项填入表格了
ysql> insert into t5 values('张三','篮球,足球');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t5;
+--------+------------------+
| name | hoppy |
+--------+------------------+
| 张三 | 篮球,羽毛球 |
| 张三 | 篮球,足球 |
+--------+------------------+
2 rows in set (0.00 sec)
select find_in_set('a','a,b,b');
//查看a是否在’a,b,b‘这个集合中
select *from t5 where hobby='篮球';
//筛选爱好是篮球,严格匹配
mysql> select * from t5 where hoppy='篮球';
+--------+--------+
| name | hoppy |
+--------+--------+
| 李四 | 篮球 |
+--------+--------+
1 row in set (0.00 sec)
select *from votes where find_in_set('登山',hoppy);
//筛选爱好中有篮球的人
mysql> select * from t5 where find_in_set('篮球',hoppy);
+--------+------------------+
| name | hoppy |
+--------+------------------+
| 张三 | 篮球,羽毛球 |
| 张三 | 篮球,足球 |
| 李四 | 篮球 |
+--------+------------------+
3 rows in set (0.00 sec)
ect * from t5 where find_in_set('篮球',hoppy);
+--------+------------------+
| name | hoppy |
+--------+------------------+
| 张三 | 篮球,羽毛球 |
| 张三 | 篮球,足球 |
| 李四 | 篮球 |
+--------+------------------+
3 rows in set (0.00 sec)