mysql数据操作类型_MySQL数据类型与操作
内容提要:
建表完整语法规范(create table 表格(字段名1 类型 (宽度) 约束条件))
MySQL数据库数据类型(整型、浮点型、字符类型(char与varchar)、⽇期类型、枚举与集合)
约束条件(primary key、unique key、not null、foreign key)
⼀、创建表的完整语法
语法:
create table 表名(
字段名1 类型 (宽度) 约束条件,
字段名2 类型 (宽度) 约束条件,
字段名3 类型 (宽度) 约束条件);
特别注意:
在同⼀张表中,字段名不能相同
宽度和约束条件为可选项,但是字段名和类型必须有
最后⼀个字段添加完毕后后⾯不能加逗号!
补充:1、这⾥的宽度是对存储数据的⼀种限制,在不同MySQL版本⾥⾯可能会出现不同的结果,这⾥只是不同版本的默认约束条件不⼀样导致,在最新版本5,7中如果输⼊数据
宽度超出限制,则会报错。
2、类型与约束条件的区别:类型是限制字段必须以什么样的数据类型存储,⼆约束条件是在这⼀类型之上添加⼀种额外的限制。
⼆、MySQL基本数据类型
整型(int)
分类:tinyint smallint mediumint int bigint
作⽤:储存年龄、等级、id、各种号码等
类型存储范围:
验证整型字段有⽆符号及范围
int类型默认是有符号的,也就是说默认⽀持输⼊负数到正数
mysql>reate table t1(id tinyint);
mysql> insert into t1 values(128),(-129);#结果:ERROR 1264 (22003): Out of range value for column 'id' at row 1#因为tinyint类型最⼤正整数限制为127,输⼊128超出范围。报错
create table t2(id tinyint unsigned);#unsigned表⽰这⾥类型设置为⽆符号(⽆正负号)
mysql> insert into t2 values (0),(255);#这⾥类型约束为⽆符号,所以输⼊负数就会报错,输⼊超过255的数也会报错。tinyint⽆符号范围是0-255。
以下同理:
create table t3(id int unsigned);
mysql> insert into t3 values (4294967296);
ERROR1264 (22003): Out of range value for column 'id' at row 1mysql> insert into t3 values (429496
7295);
Query OK,1 row affected (0.01sec)
强调:对于整型来说,数据类型之后的宽度并不是存储限制,⽽是现实宽度限制,所以在创建表的时候,
如果字段采⽤的是整型类型,完全⽆需指定显⽰宽度,因为默认的显⽰宽度(11),⼀般情况下,就⾜够显⽰完整的数据。
浮点型(分为float、double、decimal)
应⽤场景:⾝⾼、体重、薪资
字符限制特点(5,3),前⼀位表⽰所有的位数,后⼀位表⽰⼩数个数
区别对⽐:
#存储限制
float(255,30)
double(255,30)
decimal(65,30)#精确度验证
mysql> create table t9(x float(255,30));
mysql> create table t10(x double(255,30));
mysql> create table t11(x decimal(65,30));
mysql> insert into t9 values(1.111111111111111111111111111111);
mysql> insert into t10 values(1.111111111111111111111111111111);
mysql> insert into t11 values(1.111111111111111111111111111111);
mysql> select * fromt9;+----------------------------------+
| x |
+----------------------------------+
| 1.111111164093017600000000000000 |
+----------------------------------+
1 row in set (0.00sec)
mysql> select * fromt10;+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111200000000000000 |
+----------------------------------+
1 row in set (0.00sec)
mysql> select * fromt11;+----------------------------------+
| x |
+----------------------------------+
| 1.111111111111111111111111111111 |
+----------------------------------+
1 row in set (0.00sec)
从上⾯的查询创建的表中数据可以看出:
精度对⽐:decimal的精度最⾼,其次是double,最后是float,
但是就算是精度最低的float它的精度也有16位,所以⼀般使⽤完全能够应付99%的数据场景。字符类型(char定长与varchar变长)
作⽤:姓名、地址、描述类信息
理解通过实际使⽤来描述:
char:
mysql> create table t12(name char(4));
mysql> insert into t12 values ('hello');
ERROR1406 (22001): Data too long for column 'name' at row 1 #超出限制范围会报错。
mysql> insert into t12 values ('hell');
Query OK,1 row affected (0.01sec)
mysql> insert into t12 values ('he');
Query OK,1 row affected (0.00sec)
mysql> select * fromt12;+------+
| name |
+------+
| hell | #4个字符正好填满
| he | #不够4个字符空格补全
+------+
--------------------------------------------------------------varchar:
mysql> create table t13(name varchar(4));
mysql> insert into t13 values ('hello');
ERROR1406 (22001): Data too long for column 'name' at row 1 #超出范围,报错
mysql> insert into t13 values ('hell');
Query OK,1 row affected (0.00sec)
mysql> insert into t13 values ('he');
Query OK,1 row affected (0.01sec)
mysql> select * fromt13;+------+
| name |
+------+
| hell | #正好4个,填满
| he | #不够4个,按实际宽度占位。(这⾥看不出来,但是⼀定要记住,varchar是变长,所以不够4个肯定按实际宽度存储) +------+
>
TIP:
select char_length(name)fromt12
select char_length(name)from t13 #仍然⽆法查看到真正的结果
"""⾸先应该肯定的是在硬盘上存的绝对是真正的数据,但显⽰的时候mysql会⾃动将末尾的空格取掉"""
#如果不想让mysql帮你做⾃动去除末尾空格的操作,需要再添加⼀个模式
set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";#退出客户端重新登陆
select char_length(x) from t12; #4
mysql创建表数据类型select char_length(y) from t13; #1
#针对char类型,mysql在存储时会将数据⽤空格补全存放到硬盘中。但是会在读出结果的时候⾃动取掉末尾的空格####
char 与 varchar 的使⽤区别
name char(5)
优点:浪费空间,每个name信息都是按照5个字符存,这样如果不够5个的也会⽤空格补全,造成存储空间浪费
缺点:存取速度很快,因为存储数据的结构固定,所以存取速度快。
egon alex lxx jxx txx 存⽤5个字符5个字符存,取的话也是5个字符为⼀部分取,准确快捷
name varchar(5)
缺点:存取速度慢,每个name信息按照可变长的形式去存,同时存的时候要在前⾯加⼊该字符长度的
报头,⼀并存⼊,取的时候按照报头⾥的长度数据去取数据,⽐char多了好⼏步,所以存取数据相⽐较char会慢些。
优点:节省空间,通过可变长来存⼊,加上报头数据也不会造成空间的太多浪费
1bytes+egon 1bytes+alex 1bytes+lxx 1bytes+jxx 1bytes+txx
时间类型
分类:
date:2019-05-13
time:11:11:11
datetime:2019-05-13 11:11:11
year:2019
测试:
mysql> create table stu(id int,name char(16),birth_d date,study_time time,reg_time datetime); #创建表
mysql> insert into stu values(1,'jason','2019-05-09','11:11:11','2019-11-11 11:11"11'); #插⼊表数据
Query OK, 1 row affected (0.00sec)
mysql> select * from stu; #显⽰表内容
+------+-------+------------+------------+---------------------+
| id | name | birth_d | study_time | reg_time |
+------+-------+------------+------------+---------------------+
| 1 | jason | 2019-05-09 | 11:11:11 | 2019-11-11 11:11:11 |
+------+-------+------------+------------+---------------------+
1 row in set (0.00 sec)
枚举与集合类型:
分类
枚举enum 多选⼀
集合set 多选 ⼀或多
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
如何使用MySQL进行空间数据分析和查询
« 上一篇
mysql在建表语句中添加索引
下一篇 »
发表评论