欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

例题SQL语句详解-数据库基本操作5-数据类型

程序员文章站 2022-07-15 10:38:16
...

|版权声明:本文为博主原创文章,未经博主允许不得转载。转载请附上原链接,博客地址:https://blog.csdn.net/sgsgy5

1.1 数据类型——值类型

1.1.1 整型

类型 字节 范围
tinyint 1 -128~127
smallint 2 -32768~32767
mediumint 3 -8388608~8388607
int 4 -2^31^~2^31^-1
bigint 8 -2^63^~2^63^-1

1、无符号整数(unsigned):无符号数没有负数,正数部分是有符号的两倍。

例题

mysql> create table stu(
    -> id smallint unsigned auto_increment primary key comment '主键',
    -> age tinyint unsigned not null comment '年龄',
    -> money bigint unsigned comment '存款'
    -> );
Query OK, 0 rows affected (0.06 sec)

mysql> desc stu;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type                 | Null | Key | Default | Extra          |
+-------+----------------------+------+-----+---------+----------------+
| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| age   | tinyint(3) unsigned  | NO   |     | NULL    |                |
| money | bigint(20) unsigned  | YES  |     | NULL    |                |
+-------+----------------------+------+-----+---------+----------------+
3 rows in set, 3 warnings (0.00 sec)

2、整型支持显示宽度(最小的显示位数) 比如int(5),如果数值的位数小于5位,前面加上前导0。比如输入12,显示00012;大于5位就不添加前导0。

脚下留心:必须结合zerofill才起作用
mysql> create table stu(
    -> id int(5),
    -> age int(5) zerofill   # 填充前导0
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc stu;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| id    | int(5)                   | YES  |     | NULL    |       |
| age   | int(5) unsigned zerofill | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> insert into stu values (1,11);
mysql> insert into stu values (1111111,2222222);
Query OK, 1 row affected (0.00 sec)

mysql> select * from stu;
+---------+---------+
| id      | age     |
+---------+---------+
|       1 |   00011 |
| 1111111 | 2222222 |    # 注意:age填充了前导0
+---------+---------+
2 rows in set (0.00 sec)

1.1.2 浮点型(保存近似值小数)

浮点型 占用字节 范围
float(单精度) 4 -3.4E+38~3.4E+38
double(双精度) 8 -1.8E+308~1.8E+308

1、浮点数声明: float(M,D) double(M,D)

M:总位数

D:小数位数

例题;

mysql> create table t1(
    -> num1 float(5,2),   #总位数是5,小数位数是2,那么整数位数是3,
    -> num2 double(4,1)
    -> );
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t1 values (1.23,1.23); #如果精度超出了允许的范围,会四舍五入
Query OK, 1 row affected (0.00 sec)

mysql> select * from t1;
+------+------+
| num1 | num2 |
+------+------+
| 1.23 |  1.2 |   #如果精度超出了允许的范围,会四舍五入
+------+------+
1 row in set (0.00 sec)

2、浮点的精度可能会丢失【精度指的是小数】
例题SQL语句详解-数据库基本操作5-数据类型

1.1.3 定点数

语法:decimal(M,D)

mysql> create table t4(
    -> num decimal(20,19)
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t4 values (1.1234567890123456789);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t4;
+-----------------------+
| num                   |
+-----------------------+
| 1.1234567890123456789 |
+-----------------------+
1 row in set (0.00 sec)
多学一招:
1、定点数是变长的,大致每9个数字用4个字节来存储。定点数之所以能保存精确的小数,因为整数和小数是分开存储的。占用的资源比浮点数要多。
2、定点数和浮点数都支持显示宽度和无符号数。

1.2 数据类型——字符型

数据类型 描述 长度
char(长度) 定长 最大255
varchar(长度) 变长 最大65535
tinytext 大段文本 2^8^-1=255
text 大段文本 2^16^-1=65535
mediumtext 大段文本 2^24^-1
longtext 大段文本 2^32^-1

1、char(10)和varchar(10)的区别?

答:相同点:它们最多只能保存10个字符;

​ 不同点:char不回收多余的字符,varchar会回收多余的字符。

​ char效率高,浪费空间,varchar节省空间,效率比char低。

2、char的最大长度是255。
例题SQL语句详解-数据库基本操作5-数据类型
3、varchar理论长度是65535字节,实际根本达不到。具体长度与字符编码有关。
例题SQL语句详解-数据库基本操作5-数据类型

例题SQL语句详解-数据库基本操作5-数据类型
4、一个记录的总长度不能超过65535个字节。

5、大块文本(text)不计算在总长度中,一个大块文本只占用10个字节来保存文本的地址。
例题SQL语句详解-数据库基本操作5-数据类型