一、数据类型
TinYINT 小整数值 1字节 (0,255)
SMALLINT 大整数值 2字节 (0,65535)
MEDIUMINT 大整数值 3字节
INT 大整数值 4字节
BIGINT 极大整数 8字节
FLOAT 单精度浮点 4字节
DOUBLE 双精度浮点 8字节
DECIMAL 小数值
时间和日期类型
DATE 日期值 3字节 YYYY-MM-DD
TIME 时间值或持续时间 3字节 HH:MM:SS
YEAR 年份值 1字节 YYYY
DETATIME 混合日期和时间值 8字节 YYYY-MM-DD HH:MM:SS
TIMESTAMP 混合日期,时间戳 4字节 YYYYMMDDMMSS
字符串类型
char 0-255 定长字符串
Varchar 0-65535 变长字符串
tinyblob 0-255 二进制字符串
tinytext 0-255 短文本字符串
blob 0-65355 二进制长文本
text 0-65355 文本长数据
mediumtext 中等长文本
longtext 极大文本
数据类型属性
NULL 数据类可变包含NULL值
NOTNULL 数据类不予许包含null值
DEFAULT 默认值
PRIMARY KEY 主键
AUTO_INCREMENT 自动递增,使用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集
WHERE子句
查询语句中可以使用一个或多个表,之间用,分割开,并使用where语句设定查询条件,也可以用在更新 删除等操作语句中
可以使用 and 或 or 指定一个或多个条件
操作符:= != > < >= <=
where BINARY name1 = 'ABC' #BINARY关键字用来区分大小写,不加的话默认是不区分大小写的
UPDATE语句
update table set name1 = value1+1 where。。
可以同时更新一个或多个字段,用,分割; where语句指定条件;
可以批量修改字符串 update table set field=replace(field,‘old-string’,‘new-string’)where clause
DELECT语句
delect from table where
如果没有指定where字句默认会删除所有记录
delect drop truncate都有删除表的作用,区别在与:delect和truncate仅仅删除表数据,drop连接表数据和表结果一起删除,delect是单杀,truncate是团灭,drop是摔电脑
delect可以回滚,但是效率最低
LIKE字句
like字句中使用%字符来表示任意字符,类似于正则表达式中的*号,否则like和=的效果是一样的
%a 以a结尾的数据
a% 以a开头的数据
%a% 含有a的数据
_a_ 三位且中间字母是a
_a 两位且结尾是a
a_ 两位且开头是a
UNION操作符
用于连接两个以上的select语句的结果组合到一个结果集合中。多个select语句会删除重复的数据
select 列表名 from 表名 union select 列表名 from 表名 order by 列表名 #查询出的结果不包含重复数据
select 列表名 from 表名 union all select 列表名 from 表名 order by 列表名 #查询出的结果包含重复数据
mysql 排序 order by
select name1 name2 order by nuber1【asc desc】,nuber2【asc desc】 默认asc升序排列
MySQL 拼音排序
如果字符集采用的是 gbk(汉字编码字符集),直接在查询语句后边添加 ORDER BY
如果字符集采用的是 utf8(万国码),需要先对字段进行转码然后排序
SELECT * FROM table ORDER BY CONVERT(name using gbk);
mysql分组 group by
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。
select coalesce(name,‘总数’) sum(singin) as sumsngin from table group by name with rollup;

select coalesce(a,b,c) 如果a是null,则选择b,如果b为null,则选择c,都为null则返回null(没有意义)
WITH ROLLUP 可以实现在分组统计数据基础上再进行相同的统计(SUM,AVG,COUNT…)
1、group by 可以实现一个最简单的去重查询,假设想看下有哪些员工,除了用 distinct,还可以用:select name from table order by name
2、分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by ,例如:
SELECT name ,sum(*) FROM employee_tbl WHERE id<>1 GROUP BY name HAVING sum(*)>5 ORDER BY sum(*) DESC;
mysql多表查询
- INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
- LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
- RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM table1 a INNER JOIN table2 b ON a.runoob_author = b.runoob_author;

mysql null处理
- IS NULL: 当列的值是 NULL,此运算符返回 true。
- IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。
- <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。
关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 NULL 值 。
在 MySQL 中,NULL 值与任何其它值的比较(即使是 NULL)永远返回 false,即 NULL = NULL 返回false 。
MySQL 中处理 NULL 使用 IS NULL 和 IS NOT NULL 运算符。
select * , columnName1+ifnull(columnName2,0) from tableName; 如果columnName2是null 就给它赋值0;
SELECT * FROM runoob_test_tbl WHERE runoob_count IS NULL; 不能写 where runoob_count = null