mysql 计算两行数据类型_mysql(二)数据类型

MySQL 字段的常用数据类型

整数型:TINYINT(tinyint),SMALLINT(smallint),INT(int),BIGINT(bigint)

浮点型:FLOAT(float),DOUBLE(double),DECIMAL(M,D)( decimal(m,d) )

字符型:CHAR(char),VARCHAR(varchar)

备注型:TINYTEXT(tinytext),TEXT(text),LONGTEXT(longtext)

日期型:DATETIME(datetime),DATE(date),TIMESTAMP(timestamp)

1、整数型

column0

column1

column2

column3

column4

类型

所占字节

最小值

最大值

最大长度

(带符号的 / 无符号的)

(带符号的 / 无符号的)

TINYINT (tinyint)

1

-128

127

0

255

SMALLINT (smallint)

2

-32768

32767

0

65535

MEDIUMINT (mdeiumint)

3

-8388608

8388607

0

16777215

INT (int)

4

-2147483648

2147483647

0

4294967295

BIGINT (bigint)

8

-9223372036854775808

9223372036854775807

0

18446744073709551615

1. TINYINT 最大长度 4

2. SMALLINT 最大长度 6

3. MEDIUMINT 最大长度 8

4. int 最大长度是 11 位:

如果在建表时不指定字段 int 类型的长度时,系统则默认生成长度为 11 的字段。11 也是 int 类型的最大长度,其中第一位表示符号+或者-,后面十位表示数字

5. BIGINT 最大长度 20:

注意:int(M) 在 integer 数据类型中,M 表示最大显示宽度。在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何关系。和数字位数也无关系 int(3)、int(4)、int(8) 在磁盘上都是 占用 4 btyes 的存储空间。 int(11),tinyint(1),bigint(20),后面的数字,不代表占用空间容量。而代表最小显示位数。 这个东西基本没有意义,除非你对字段指定 zerofill。 所以我们在设计 mysql 数据库时,建表时,mysql 会自动分配长度:int(11)、tinyint(4)、 smallint(6)、mediumint(9)、bigint(20)。 所以,就用这些默认的显示长度就可以了。不用再去自己填长度,比如搞个 int(10)、tinyint(1) 之类的,基本没用。而且导致表的字段类型多样化。

2、浮点型

column0

column1

column2

column3

类型

字节

最小值

最大值

FLOAT (float)

4

+-1.175494351E-38

+-3.402823466E+38

DOUBLE (double)

8

+-2.2250738585072014E-308

+-1.7976931348623157E+308

DECIMAL (decimal)

可变

它的取值范围可变。

FLOAT 和 DOUBLE 在不指定精度时,默认会按照实际的精度(由计算机硬件和操作系统决 定),DECIMAL 如果不指定精度,默认为(10,0)。

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的范围;缺点是会 引起精度问题。

3、字符串型

column0

column1

column2

column3

column4

CHAR(4)

存储需求

VARCHAR(4)

存储需求

''

' '

4个字节

''

1 个字节

'ab'

'ab '

4个字节

'ab '

3 个字节

'abcd'

'abcd'

4 个字节

'abcd'

5 个字节

'abcdefgh' 'abcd'

4 个字节

'abcd'

5 个字节

varchar 使用额外的 1-2 字节内来存储值长度,列长度<=255 使用 1 字节保存,其它情况使 用 2 字节保存。例如 varchar(10)会占用 11 字节存储空容间,varchar(500)会占用 502 字节存 储空间。

varchar 最大长度可以是多少?

根据字符集,字符类型若为 gbk,每个汉子占用 2 个字节,最大长度不能超过 65535/2 =32766; 字符类型若为 utf8,每个汉子最多占用 3 个字节,最大长度不能超过 65535/3 =21845,若 超过这个限制,则会自动将 varchar 类型转为 mediumtext 或 longtext,

5、日期型(实际项目很少用)

column0

column1

列类型

零值

DATETIME(datetime)

'0000-00-00 00:00:00'

DATE(date)

'0000-00-00'

TIMESTAMP (timestamp)

00000000000000

TIME(time)

'00:00:00'

YEAR (year)

0000

实际项目中我们存储日期用的都是 int 类型的时间戳

Mysql 查询语句详解

创建一个 school 的数据库

create database school;

创建一个 class 表里面有 id、name、email、score 字段

CREATE TABLE class (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255),

`email` varchar(255),

`score` tinyint(4),

PRIMARY KEY (`id`)

)

PRIMARY KEY (`id`) //表示 id 为主键,让 id 值唯一,不得重复。自增;

2 给这个班级表 class 新增 5-10 条学员记录

查看班级所有字段的记录以及查看班级 id,name 的记录

select * from class;

select id,name from class;

WHERE 表达式的常用运算符

MYSQL运算符

含义

=

等于

<

小于

>

大于

<=

小于或等于

>=

大于或等于

!=

不等于

IS NOT NULL (is not null)

具有一个值

IS NULL (is null)

没有值

BETWEEN (between)

在范围内

NOT BETWEEN (not between)

不在范围内

IN (in)

指定的范围

OR (or)

两个条件语句之一为真

AND (add)

两个条件语句都为真

NOT (not)

条件语句不为真

LIKE (like)

搜索列中的指定模式

查找 emial 不为空的数据 (空字符串和这个空不一样)

select * from class where email is not null ;

查找 emial 为空的数据

select * from class where email is null or email="";

查找成绩大于等于 70 小于等于 90 的数据

select * from class where score>=70 AND score<=99;

select * from class where score between 70 and 99;

select * from class where score not between 70 and 99;

查找 score 为 89 和 98 的数据

select * from class where score in (89,98);

查找 score 不是 89 和 98 的数据

select * from class where score not in (89,98);

Or

select * from class where score=87 or score=88;

And

select * from class where score>=70 AND score<=99;

like 模糊查询

select * from class where email like "%qq%"; // 包含qq的

select * from class where email like "ja%"; // ja 开头的

select * from class where email like "%163.com"; //163.com 结尾的

select * from class where email not like "%163.com"; //不是 163.com 结尾的

Mysql 分组函数

函数

用法

描述

AVG()

AVG(column)

返回列的平均值

COUNT()

COUNT(column)

统计行数

MAX()

MAX(column)

求列中的最大值

MIN()

MIN(column)

求列中的最小值

SUM()

SUM(column)

求列中的和

统计班级的平均分

select avg(score) from class;

统计班级一共多少人

select count(1) from class;

找出这个班成绩最高的学生 (将一个查询语句的结果作为另一个查询语句的条件,会先执行 in里面的语句)

select max(score) from class;

select * from class where score in (select max(score) from class);

找出这个班成绩最低的学生

select min(score) from class;

select * from class where score in (select min(score) from class);

统计这个班的总分

select sum(score) from class;

Mysql 别名

设置一个列显示出来的别名

select name as a from class;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值