数据类型
- 对于整型来说
TINYINT
、SMALLINT
、MEDIUMINT
、INT
、BIGINT
等- 指定长度是没有意义的,它不会限制值的范围,只会影响显示字符的个数,比如
int(10)
如果不足十位的会补足0(通过zerofill属性来显示)。值得注意的是,如果字符少于位数则会补足0,如果超过了宽度则不受影响。
- 指定长度是没有意义的,它不会限制值的范围,只会影响显示字符的个数,比如
对于实数类型来说
FLOAT
(四个字节)、DOUBLE
(八个字节)、DECIMAL
(可以存储比BIGINT还要大的整型,可以存储精确的小数,16字节,精度较高的运算一般用decimal)字符串类型
VARCHAR
、CHAR
、TEXT
、BLOB
- char的长度是固定的,最大为255个字符,而char的最大长度是255每个字符占用的字节数,比如utf8编码就是255\3,gbk就是255*2
- varchar代表变长,最大的长度为65535个字节,如果采用varchar的话需要用1-2个字节来存储长度信息(255个字节一下需要1个字节,超过255需要两个字节)。而varchar最大字符数也是根据编码来决定(注意:char和varchar后面跟的数字都是指字符数),如果是utf8编码,varchar最大字符数=65535/3约为21845个字符,如果是gbkvarchar最大字符数=65533/2约为32766个字符
- text和blob类型查询的时候会产生临时表,尽量不要使用
日期和时间类型(尽量使用TIMESTAMP,比DATETIME空间效率高)
常用命令
- veresion(); //显示当前服务版本
- now(); //显示当前时间
- user(); //显示当前用户
- concat(‘a’, ‘b’); //字符链接
- concat_ws(‘-‘, ‘a’, ‘b’); //使用指定分隔符连接
- lower(‘MYSQL’) upper(‘mysql’) //大小写转换
- left(‘mysql’, 2) //左截取 right(‘mysql’, 2) //右截取
- length(‘mysql’) //获取字符串长度
- replace(‘-my-sql’, ‘-‘, ‘+’) //替换字符
- substring(‘mysql’, 1 ,2) //截取字符
- date_format(‘2017-9-11’, ‘%Y-%m-%d’); //日期格式化
- avg(); //平均值
- count(); //总数
- max(); min() //最大值,最小值
- sum(); //求和
常用数据库操作
1.创建数据库
1 | create {database|schema} [if not exists] db_name [default] character set [=] charset_name |
2.修改数据库
1 | alter {database|schema} db_name [default] character set [=] charset_name |
3.删除数据库
1 | drop {database|schema} [if exists] db_name |
常用数据表操作
1.创建表
1 | create table [if not exists] tbl_name( |
2.查看表结构
1 | show colums from tbl_name; |
3. 修改表结构
1 | alter table tbl_name op[add|drop|modify] [column] (col_name column_definition,..); |
4.插入
1 | (1)insert [into] tbl_name [(col_name,..)] {values|value} ({expr|default},...),(...),...; |
5.更新
1 | update tbl_name set col_name1={expr1|default} [,col_name2={expr2|default}].. [where where_condition] |
6.删除
1 | delete from tbl_name [where where_condition] |
约束性
(1)主键约束:primary key
- 每个表只存在一个
- 保证记录的唯一性
- 自动为not null
- 添加了主键约束
(2)唯一约束: unique key
- 每个表可以存在多个
- 保证记录的唯一性
- 可以存一个null
- 添加了唯一约束
(3)默认约束:default
- 给列添加了默认值
1 | 例如: |
(4)非空约束
(5)外键约束
- 保证了数据的一致性,实现了1对1,1对多的关系
- cascade:从父表中删除或更新且自动删除或更新子表中的匹配行
- set nul: 从父表删除或更新并设置子表中的外键列为null。如果使用该选项,必须保证子表没有指定not null
- restrict:拒绝对父表的删除或更新操作
1 | 添加外键约束: |
子查询
嵌套在内部,始终出现在括号内;
可以包含多个关键字或条件,如distinct,group by,order by,limit,函数等;
外层可以是:select,insert,update,set
1.比较运算符:=,>,<,<=,>=,<>
1 | select * from t1 where col_name1 >= ANY (select col_name2 from t2); |
2.(not)in/exists
1 | select * from t1 where col_name1 NOT IN ALL (select col_name2 from t2); |
连接查询
内连接(inner join),左连接(left join), 右连接(right join),全连接(full join), 交叉连接(across join)
1 | 现有两张表A、B |
联合查询(union与union all)
把多个结果集集中在一起