SQL基本数据类型及表操作(DMLDQL)

本文介绍了SQL的基本数据类型,包括整型、浮点型和定点数类型,如tinyint、smallint、int、bigint、float、double及decimal。强调了无符号类型和精度设置对取值范围的影响,以及decimal类型用于精确存储浮点数。同时,文章通过示例展示了创建表和插入数据的过程,解释了列定义中长度参数的作用以及存储溢出和四舍五入的规则。
摘要由CSDN通过智能技术生成

SQL基本数据类型及表操作(DML/DQL)

SQL注释

一般在编写sql脚本文件时需要添加合理的注释信息

单行注释 select 1; #说明信息

​ select 1; – 说明信息

多行注释 /*开头 */收尾

数据类型

数据类型主要给列上添加域完整性约束。开发者设置列的数据类型后,DBMS会对添加的数据进行合法 性验证,如果不合法则报错,拒绝添加

数值型

5种整型 tinyint、smallint、mediumint、int和bigint,主要区别就是取值范围不同,还可以在类 型前添加一个限制词unsigned,不允许添加负数

3种浮点型:不能精确存放float和double,可以精确存放decimal和numeric

类型名称说明
tinyint1B,取值范围-128到127
smallint2B,取值范围为-32768到32767
mediumint3B,取值范围为-8388608到8388607
int4B,取值范围为2e9
bigint8B,取值范围为9e18
float4B,单精度浮点型,取值范围3.4e38
double8B,双精度浮点型,取值范围1.7e308
decimal和numeric采用定点存放浮点数,具体字节数取决于定义时设置的参数

unsigned设置列为无符号型,只能存放大于等于0的数据,没有负数。当使用无符号类型时取值范围由 于没有负数部分,从而导致上限扩大一倍

create table t3(id int unsigned); 

mysql> insert into t3 value(-10); -- 不允许存储负数 
ERROR 1264 (22003): Out of range value for column 'id' at row 1 

mysql> insert into t3 value(255); -- 存储数据的上线扩大一倍 
Query OK, 1 row affected (0.01 sec)

可以在类型名后添加括号,其中包含一个正整数,例如int(5),这里的含义并不是要求只能存放5位长度 的整数;含义是当进行查询时自动使用空格填充到5个长,如果真实数据长度大于5,则按实际输出

mysql> create table t4(id int(2)); 
Query OK, 0 rows affected (0.02 sec) 

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

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

mysql> select * from t4; 
+-------+ 
| id    | 
+-------+ 
| 99999 | 
|     9 | 
+-------+ 
2 rows in set (0.00 sec)

decimal和numeric作为字符串存储浮点数,可以实现浮点数的精确存储,并不是float和double种使用 二进制浮点数存储。使用方法numeric(总位宽,小数位数),小数位数必须小于等于总位宽;小数位数最 大值30,总位宽最大值为65,注意可能存储的数据会超出范围,其中的符号位和小数点不占位宽,

mysql> create table t5(id numeric(5,3)); 
Query OK, 0 rows affected (0.03 sec)

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

mysql> insert into t5 values(-99.999); -- 位宽统计中符号位不算 
Query OK, 1 row affected (0.01 sec) 

mysql> insert into t5 values(100); -- 整数超出范围报错 
ERROR 1264 (22003): Out of range value for column 'id' at row 1 

mysql> insert into t5 values(9.1235); -- 小数位数多余则自动四舍五入 
Query OK, 1 row affected, 1 warning (0.00 sec) 

mysql> insert into t5 values(9.1234); 
Query OK, 1 row affected, 1 warning (0.01 sec) 

mysql> select * from t5; 
+---------+ 
| id      | 
+---------+ 
|  99.999 | 
| -99.999 | 
|   9.124 | 
|   9.123 | 
+---------+ 
4 rows in set (0.00 sec)

int和numeric

int类型不能保存小数位,存储小数时会自动进行四舍五入

mysql> create table t6(id int); 
Query OK, 0 rows affected (0.03 sec)

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

mysql> select * from t6; 
+------+ 
| id   | 
+------+
|  100 | 
+------+ 
1 row in set (0.00 sec)

numeric可以保存小数位,如果小数位数为0,可以模拟得到int类型的存储效果。采用的实际存储 方式为字符串。查询效率远低于int

mysql> create table t7(id numeric); 
Query OK, 0 rows affected (0.03 sec) 

mysql> desc t7; 
+-------+---------------+------+-----+---------+-------+ 
| Field | Type          | Null | Key | Default | Extra | 
+-------+---------------+------+-----+---------+-------+ 
| id    | decimal(10,0) | YES  |     | NULL    |       | 
+-------+---------------+------+-----+---------+-------+ 
1 row in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值