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;