此时情绪此时天,无事小神仙
好好生活,平平淡淡每一天

编辑

mysql数据类型

mysql数据类型-int

int 的有符号和无符号的区别

  • 有符号的int可以插入负值,无符号的int不可以插入负值

整型的每一种都分无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。

无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个smallint能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。

由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。另外,unsigned若省略后一个关键字,大多数编译器都会认为是unsigned int。

简而言之就是由于Int型占4字节,也就是16位,2^16 = 65535,如果有符号位就+ -两边均分,如果没有就全给+。

int 有符号测试

#创建一个有符号的int类型的abc的表
create table bcd (a int,b int);#int类型不声明则默认为有符号

#插入数据
insert into bcd values(1,2);

#查询数据
select * from bcd;

#查询2-1:结果为1
select b-a from bcd;

#查询1-2:结果为-1
select a-b from bcd;

测试结果:

int 无符号测试

#创建一个无符号的int类型的abc的表
create TABLE abc (a int unsigned,b int unsigned);

#插入数据
insert into abc values(1,2);

#查询数据
select * from abc;

#查询2-1:结果为1
select b-a from abc;

#查询1-2:结果异常
select a-b from abc;

 测试结果:超出精度异常

int(n):其中的n是什么意思?

  • n 的意思是显示长度:若结果长度小于 n 则会自动前面加 0 进行补齐,若结果长度不小于 n 则正常显示

#创建一个int(4)的数据库表
create table test_int_n (a int(4) zerofill);-- Ps:若不加 zerofill 则没什么鸟用
#在里面插入两条数据(一个值为1;一个值为123456)
insert into test_int_n values(1),(123456);

#mysql bin 命令行>查询结果

Ps:在工具中查询无效果

 

mysql中的int自增

  • 1.自增只能创建在主键上面
  • 2. null 和 0 都可以自自增
  • 3. 可以在自增列插入负值

1.自增只能创建在主键上面

#创建自动增长:会报错
create table test_auto_increment(a int auto_increment);

\

#创建自动增长:创建成功
create table test_auto_increment(a int auto_increment primary key);

 

 null 和 0 都可以自增

测试插入 null
#在自增表里面插入数据
insert into test_auto_increment values(null),(10),(null),(100),(null);

#查询自增表中的数据
select * from test_auto_increment;

 

测试插入0

插入前查询

#在自增表中插入0:是和null一样自增的
insert into test_auto_increment values(0);

 插入后查询:

 

 Ps : 插入 0 或 插入 null 执行一次后结果为 102 ,若把 102 删除后,再执行插入 0 或 插入 null ,则会在 102 的基础上自增,无关 102 是否被删除

3.可以在自增列插入负值

#在自增表中插入负值:是可以执行成功的
insert into test_auto_increment values(-1);

mysql数据类型-字符类型

字符(n)中的 n 是字符还是字节?

char(n) 和varchar(n) 中的 n 是字符还是字节?

答:字符。

text(n)  中的 n 是字符还是字节?

答:字节。

除了 char 和 varchar 中的 n 是字符,其他的都是字节。

数据库中有true和false吗?

数据库中只有0和1,没有true和false;

1:相当于 true;0:相当于false。

#1:相当于true
select 'a' = 'a';
#0:相当于false
select 'a' = 'b';

运行结果:

数据库中排序规则里面的 bin 和 ci 是什么意思?

bin:二进制的方式存储的,大小写敏感(不会忽略大小写)。

ci:大小写不敏感(会忽略大小写)。

sql测试:

1:相当于 true;0:相当于false。

#设置为utf8mb4_bin
set names utf8mb4 collate utf8mb4_bin;

 

1:相当于 true;0:相当于false。

 

mysql 获取varchar类型数字最大值

SELECT MAX(CAST(no AS SIGNED)) FROM sys_user ;

 

mysql数据类型-时间类型

date、timestamp和datetime的区别是什么?

  • date表示日期,其范围为1000-01-01到9999-12-31
  • datetime表示日期时间,其范围是1000-01-01 00:00:00到9999-12-31 23:59:59
  • timestamp表示时间戳,1970-01-01 00:00:00到2038-01-19 03:14:07,timestamp具有自动初始化和自动更新功能。

  timestamp:有时区的概念;datetime:没有时区的概念

sql测试timestamp和datetime的区别

#创建一个时间类型的表
create table test_time (a timestamp,b datetime);

#插入数据
insert into test_time values(NOW(),NOW()); 
#查询时间的环境变量
select @@time_zone;

 当时间的环境变量为 SYSTEM 时,看不出区别

#修改时间的环境变量
set time_zone='+00:00';

  当时间的环境变量为 +00:00时,则可以看出两个时间不同

 一般所有时间都是北京东八区的时间。

posted @ 2020-05-13 21:33  踏步  阅读(1060)  评论(0编辑  收藏  举报