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

编辑

Mysql 数据类型

数据类型-int

image

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

有符号的int可以存储负值,无符号的int不可以存储负值;
int类型若不声明是否有符合则默认有符号,正负都可以存储;

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

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

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

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

int 有符号测试

-- 创建一个有符号的int类型的abc的表;默认有符号
create table bcd (a int,b 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;

测试结果:成功
image

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;

测试结果:超出精度异常
image

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

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

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

mysql bin 命令行>查询结果
image
数据库连接工具>查询无效果
image

int自增

  • 自增只能创建在主键上面
  • null 和 0 都可以自自增
  • 可以在自增列插入负值
  • delete数据不会重置自增计数值,truncate数据才会充值自增计数值

自增只能创建在主键上面

-- 非主键字段创建自动增长:异常
create table test_auto_increment(a int auto_increment);

image

-- 主键字段创建自动增长:成功
create table test_auto_increment(a int auto_increment primary key);

image

null 自增验证

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

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

image

0 自增验证
新增前查询结果
image
新增数据

-- 在自增表中新增0
insert into test_auto_increment values(0);

image
image

可以在自增列插入负值

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

image
image

数据类型-字符类型

image

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

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

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

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

数据库中有true和false吗?

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

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

运行结果
image
image

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

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

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

sql测试:1:相当于 true;0:相当于false。
image

#设置为utf8mb4_bin
set names utf8mb4 collate utf8mb4_bin;

image

sql测试:1:相当于 true;0:相当于false。
image

mysql 获取varchar类型数字最大值

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

数据类型-时间类型

image

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:没有时区的概念

timestamp和datetime的区别测试

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

-- 新增数据
insert into test_time values(NOW(),NOW());

-- 查询时间的环境变量
select @@time_zone;

image

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

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

当时间的环境变量为 +00:00时,则可以看出两个时间不同
image
一般所有时间都是北京东八区的时间。

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