您的位置:首页 > 健康 > 养生 > 广州企业建站公司_公司设计网站定制_查网站域名_seo关键词软件

广州企业建站公司_公司设计网站定制_查网站域名_seo关键词软件

2025/4/19 14:12:27 来源:https://blog.csdn.net/liuty0125/article/details/146535639  浏览:    关键词:广州企业建站公司_公司设计网站定制_查网站域名_seo关键词软件
广州企业建站公司_公司设计网站定制_查网站域名_seo关键词软件

目录

  • 数据类型
  • tinyint类型(整形)
  • bit类型
  • 小数
    • 浮点数 float、double
    • decimal
  • 字符串类型
    • char
    • varchar
    • char与varchar的比较
  • 日期时间类型
  • enum和set
  • 总结

数据类型

在这里插入图片描述

tinyint类型(整形)

例:

mysql> create table tt1(num tinyint);mysql> insert  into tt1 values(1);mysql> insert  into tt1 values(128); -- 越界插入,报错
ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> select * from tt1;+------+| num  |+------+|  1   |+------+1 row in set (0.00 sec)
  • 在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。
  • 可以通过UNSIGNED来说明某个字段是无符号的
 mysql> create table tt2(num tinyint unsigned);mysql> insert into tt2 values(-1); -- 无符号,范围是: 0 - 255ERROR 1264 (22003): Out of range value for column 'num' at row 1mysql> insert into tt2 values(255);Query OK, 1 row affected (0.02 sec)mysql> select * from tt2;+------+| num  |+------+| 255  |+------+1 row in set (0.00 sec)

bit类型

bit[(M)]

位字段类型

M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。

  • bit字段在显示时,是按照ASCII码对应的值显示。
 mysql> insert into tt4 values(65, 65);mysql> select * from tt4;+------+------+| id   | a    |+------+------+|   10 |      |   |   65 | A    |+------+------+

如果我们有这样的值,只存放0或1,这时可以定义bit(1)。这样可以节省空间

小数

浮点数 float、double

float[(m, d)] [unsigned]

M指定显示长度

d指定小数位数,占用空间4个字节

  • 如float(4,2)表示的范围是-99.99 ~ 99.99
  • MySQL在保存值时会进行四舍五入,四舍五入超过范围则会失败
 mysql> create table tt6(id int, salary float(4,2));Query OK, 0 rows affected (0.01 sec)mysql> insert into tt6 values(100, -99.99);Query OK, 1 row affected (0.00 sec)mysql> insert into tt6 values(101, -99.991);Query OK, 1 row affected (0.00 sec)mysql> select * from tt6;+------+--------+| id   | salary |+------+--------+|  100 | -99.99 ||  101 | -99.99 |+------+--------+2 rows in set (0.00 sec)
  • double与float类似,只是精度更高,占8字节

decimal

decimal(m, d) [unsigned]

定点数m指定长度,d表示小数点的位数

  • decimal和float区别:

float和decimal表示的精度不一样

 mysql> create table tt8 ( id int, salary float(10,8), salary2 decimal(10,8));mysql> insert into tt8 values(100,23.12345612, 23.12345612);mysql> create table tt8 ( id int, salary float(10,8), salary2  decimal(10,8));mysql> select * from tt8;+------+-------------+-------------+
| id   | salary      | salary2     |
+------+-------------+-------------+
|  100 | 23.12345695 | 23.12345612 |
+------+-------------+-------------+
  • float表示的精度大约是7位
  • decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10
  • 如果希望小数的精度高,可以使用decimal

字符串类型

char

char(L): 

固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

  • 注意:MySQL中的字符和我们在语言中学的字符是不一样的,语言中的字符指的是一个字节的数据,但MySQL中的字符就真的代表一个字符,无论你是‘a’还是‘中’,都是一个字符
 mysql> create table tt9(id int, name char(2));mysql> insert into tt9 values(100, 'ab');mysql> insert into tt9 values(101, '中国');mysql> insert into tt9 values(101, '中');mysql> select * from tt9;
+------+--------+
| id   | name   |
+------+--------+
|  100 | ab     |
|  101 | 中国   |
|  101 ||
+------+--------+

varchar

varchar(L)

可变长度字符串

L表示字符长度,最大长度65535个字节,注意单位是字节,char,单位是字符

mysql> create table tt10(id int ,name varchar(6)); --表示这里可以存放6个字符mysql> insert into tt10 values(100, 'hello'); mysql> insert into tt10 values(100, '我爱你,中国');mysql> select * from tt10;+------+--------------------+| id   | name               |+------+--------------------+|  100 | hello              ||  100 | 我爱你,中国         |+------+--------------------+ 

char与varchar的比较

  • char是定长的,你定义多长他就会分配多大的空间
  • varchar是可变的,你定义的只是它的上限,实际上它的空间会根据的数据的大小而变化,也就是给多少用多少

那在平时我们该如何选择使用哪一种呢?

  • 定长的磁盘空间比较浪费,但是效率高。
  • 变长的磁盘空间比较节省,但是效率低。

所以,如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5

如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

在这里插入图片描述

日期时间类型

date

‘yyyy-mm-dd’ ,占用三字节

datetime 

时间日期格式
‘yyyy-mm-dd HH:ii:ss’
表示范围从1000 到 9999 ,占用八字节

timestamp

时间戳,从1970年开始
yyyy-mm-dd HH:ii:ss
格式和datetime 完全一致,占用四字节

  • timetamp 在使用时会自动更新,其他两个需要外部插入
//建表
mysql> create table birthday (t1 date, t2 datetime, t3 timestamp);Query OK, 0 rows affected (0.01 sec)//插入数据:
mysql> insert into birthday(t1,t2) values('1997-7-1','2008-8-8 12:1:1'); 
--插入两种时间Query OK, 1 row affected (0.00 sec)mysql> select * from birthday;+------------+---------------------+---------------------+| t1         | t2                  | t3                  |+------------+---------------------+---------------------+| 1997-07-01 | 2008-08-08 12:01:01 | 2017-11-12 18:28:55 | +------------+---------------------+---------------------+--添加数据时,时间戳自动补上当前时间//更新数据:
mysql> update birthday set t1='2000-1-1';Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from birthday;+------------+---------------------+---------------------+| t1         | t2                  | t3                  |+------------+---------------------+---------------------+| 2000-01-01 | 2008-08-08 12:01:01 | 2017-11-12 18:32:09 | +------------+---------------------+---------------------+
-- 更新数据,时间戳会更新成当前时间

enum和set

enum

枚举类型
enum(‘选项1’,‘选项2’,‘选项3’,…);
多选一类型

该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,…最多65535个;

当我们添加枚举值时,也可以添加对应的数字编号。

set

集合,“多选”类型;
set(‘选项值1’,‘选项值2’,‘选项值3’, …);

该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值

而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,… 最多64个。

  • enum中只能插入枚举类型中的数据,不能插入枚举类型没有的数据,字符或下标(从1开始)插入都行

  • set同样也只能插入原有的数据,不过可以选择单个或者多个一起插入

  • 注意,enum中可以使用下标插入,但是set中是以位图的方式插入的,如:2的二进制为00010,所以我们插入的是第二个数据

  • 数据可以为NULL,也可以是空串

下面是一个调查表实例,调查人的喜好与性别:

mysql> create table votes(-> username varchar(30),
-> hobby set('登山','游泳','篮球','武术'),
-> gender enum('男','女'));    Query OK, 0 rows affected (0.02 sec)insert into votes values('雷锋', '登山,武术', '男');insert into votes values('Juse','登山,武术',2);//插入数据
select * from votes where gender=2;+----------+---------------+--------+| username | hobby         | gender |+----------+---------------+--------+| Juse     | 登山,武术      ||+----------+---------------+--------+

查询筛选语句:

1.enum

 select * from votes where .......
mysql> select * from votes where gender='男';+----------+--------+--------+| username | hobby  | gender |+----------+--------+--------+| LiLei    | 登山   ||+----------+--------+--------+

2.set
find_ in_ set函数

在一个集合中查找某一个元素是否存在,返回值为对应的下标

mysql> select find_in_set('a', 'a,b,c');mysql> select find_in_set('a', 'a,b,c');+---------------------------+| find_in_set('a', 'a,b,c') |+---------------------------+|                         1 |+---------------------------+

所以我们查找时可以用该函数的返回值充当where的判断值

mysql> select * from votes where find_in_set('登山', hobby);

找多个

mysql> select * from votes where find_in_set('登山', hobby) and find_in_set('羽毛球', hobby);

总结

其实数据类型就是MySQL中的一种天然的约束,满足就可以插入

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com