MySQL数据类型简要描述~

使用Django与MySQL数据库连接时,简要描述一下MySQL数据类型!

学习MySQL数据类型后,在对数据库进行设计时,会更加清晰、明了,在写字段时可以选择性能更好的数据类型等!

一、 整数 (首先要明白:一个字节:8位)

  1. tinyint:迷你整形 1个字节存储,math.pow(2,1*8-1)-1 取值范围就是(-128~127);
  2. smallint:小整形,2个字节存储;
  3. mediumint:中整形,3个字节存储;
  4. int:标准整形,使用4个字节存储数据(常用);math.pow(2,4*8-1)-1
  5. bigint:大整形,使用8个字节存储数据。math.pow(2,8*8-1)-1

代码示例:

drop table if exists my_int;
create table my_int(
 a tinyint not null,
 b smallint not null,
 c mediumint not null,
 d int not null,
 e bigint
);
insert into my_int(a,b,c,d,e) 
values(-128,2,3,1213121,2147483648);
select * from my_int;

执行结果:

abcde
-1282312131212147483648

二、小数

  1. float:单精度,占用4个字节存储数据,精度范围大概为7位左右;float(10,2)代表 总位数为10,小数位数为2;
  2. double: 双精度,占用8个字节存储数据,精度范围大概为15位左右。

代码示例:

drop table if EXISTS my_float;
CREATE TABLE my_float(
a FLOAT not null,
b float(6,2)
);
insert INTO my_float value(2,3333.45);
insert INTO my_float value(2,333.4666);  #如果超出指定的长度,则会进行四舍五入运算
SELECT * from my_float;

执行结果:

ab
23333.45
2333.47

三、 精确数字

  • decimal 常用于表示精确数字; decimal 比 float精确,float 可能会丢失精度,decimal则不会。
  • decimal 和 double 到底有什么区别?
    decimal数据类型用于在数据库中存储精确的数值,我们经常对保持精确精度的列使用decimal数据类型。例如:会计系统中的货币数据。double和 float 在计算的时候都会出现精度丢失的问题,而 decimal 则不会。

代码示例(关于decimal的精度):

drop TABLE if EXISTS my_decimal;
CREATE TABLE my_decimal(
    a decimal(10,2)  not null,  
    b float(10,2)  not null,
	c double(5,2) not null
);    #decimal小数位部分,如果超出范围时:小于5会舍弃,大于等于5会报错!
insert into my_decimal values(99999999.99,9999999.991,999.1288); 
SELECT * from my_decimal;

执行结果:

abc
99999999.9910000000.00999.13

代码示例(关于decimal):

DROP TABLE IF EXISTS t2;
CREATE TABLE t2 (
	i INT,
	d1 DECIMAL(60,30) ,
	d2 DECIMAL(60,30)
); 
INSERT INTO t2 VALUES 
	(2,0.00,0.00),
	(2,-13.20,0.00),
	(2,59.60,46.40),
	(2,30.40,30.40); 
-- SELECT * from t2;
SELECT i,sum(d1) AS a,sum(d2) AS b FROM t2 GROUP BY i ;

执行结果:

iab
276.80000000000000000000000000000076.800000000000000000000000000000

四、 字符串

  1. char 定长 字符串的最大长度为255;
  2. varchar 变长 理论长度是65536 自动节省空间
  3. text 文本字符串
  4. blob 二进制数据(不常用)
  5. enum 枚举字符串 例如:字段性别 sex enum(‘男’,‘女’)
  6. set 集合字符串

代码示例(关于enum(枚举)):

drop table if exists my_enum;
CREATE table my_enum(
    sex enum('男','女')
);
# 枚举
insert into my_enum values('男');    #只能插入已有的枚举对象;
select * from my_enum;

执行结果:

sex

代码示例(关于varchar):

drop table if exists my_varchar;
create table my_varchar(
    s varchar(6) not null
);
insert into my_varchar value('abcdef');    #指定长度后,插入的数据不能超过指定长度;
select * from my_varchar;

执行结果:

s
abcdef

代码示例(关于set):

DROP TABLE if EXISTS my_set;
create table my_set(
    hobby set('LOL','看杂志','开飞机','斗地主','打豆豆')
    --          1      2       4       8       16
    )charset utf8;
insert into my_set(hobby) values('LOL,开飞机,斗地主'); 
insert into my_set(hobby) values(13);
insert into my_set(hobby) values('打豆豆');  
insert into my_set(hobby) values(4);
insert into my_set(hobby) values(8);
SELECT * from my_set;

执行结果:

hobby
LOL,开飞机,斗地主
LOL,开飞机,斗地主
打豆豆
开飞机
斗地主

关于UNSIGNED

  • UNSIGNED属性就是将数字类型无符号化 例如:TINYINT 占1个字节,范围是-128~127,
  • 那么,TINYINT UNSIGNED的范围是多少呢? 答案是:0~255

代码示例(关于UNSIGNED):

drop table if EXISTS aaa;
create table aaa(
    x TINYINT UNSIGNED not null, #  1个字节  8位    0 ~ 255 
    y TINYINT not null
);
insert into aaa(x,y) values(127,127);
insert into aaa(x,y) values(200,127);
SELECT * from aaa;

执行结果:

xy
127127
200127

代码示例(关于UNSIGNED):

drop table if exists my_unsigned;
create table my_unsigned(
    id int not null auto_increment,
    a tinyint unsigned not null,
    b tinyint not null,
    primary key(id)
);
insert into my_unsigned(a,b)values(255,127);
select * from my_unsigned;

执行结果:

idab
1255127

代码示例(关于UNSIGNED和ZEROFILL):

DROP TABLE if EXISTS int11;
CREATE TABLE int11(
    id int not null auto_increment,
    a int(11) unsigned ZEROFILL not null,  # unsigned 可带可不带,加zerofill属性的列默认是无符号的。
    b int(11) not null,
    PRIMARY KEY (`id`)
);
INSERT into int11 values(null,1,1);
select * from int11;
idab
1000000000011

五、 时间和日期

  1. datetime:日期时间,其格式为yyyy-MM-dd HH:mm:ss,表示的范围是从1000年到9999年,有零值,即 0000-00-00 00:00:00;
  2. date:日期 yyyy-MM-dd
  3. time:时间 HH:mm:ss
  4. timestamp:时间戳,但并不是真正意义上的时间戳,其是从1970年开始计算的,格式和 datetime 一致;
  5. year:year(2),year(4)。

代码示例:

drop TABLE if EXISTS my_date;
create table my_date(
    a datetime,
    b date,
    c time,
    d timestamp,
    e year
)charset utf8;
INSERT INTO my_date ( a, b, c, d, e )
VALUES
    ( '1945-09-02 12:10:45', '1945-09-02', '11:11:11', NULL, '45' );

INSERT INTO my_date ( a, b, c, d, e )
VALUES
    ( '1945-09-02 12:10:45', '1945-09-02', '11:11:11', null, '2019' );
    -- 当给timestamp传入 null 时,会自动插入当前的时间;
SELECT * FROM my_date;

执行结果:

abcde
1945-09-02 12:10:451945-09-0211:11:112019-01-10 23:10:332045
1945-09-02 12:10:451945-09-0211:11:112019-01-10 23:10:332019

以上就是MySQL的基本数据类型了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值