基础
MySQL数据类型
数字类型:
整型:
tinyint bool bit 一个字节
smallint 两个字节
mediumint 三个字节
int 四个字节
bigint 八个字节
decimal 自定义长度
浮点型:
float 四个字节
double 八个字节
字符串类型:
char(M): M个字符 M:0--255
varchar(M): M个字符 M:0--255
text:
tinytext: 0-(2^8-1)个字符
text: 0-(2^16-1)
mediumtext: 0-(2^24-1)
longtext: 0-(2^32-1)
日期时间:
date: YYYY-MM-DD
time: HH:MM:SS
datetime: YYYY-MM-DD HH:MM:SS
timestamp
year: 可以指定为显示四位或者两位
BLOB:(长度同text,支持存储二进制文件)
tinyblob
blob
mediumblob
longblob
Set和ENUM
操作数据库
创建:
create database db_name;
删除:
drop database db_name;
使用:
use database_name;
操作数据表
创建:
create [temporary] table [if not exist] table_name(create_defination) [table_options] [select_statement]
temporary:是临时表
create_defination: 字段名 类型 [not null | null] [default 默认值] [auto_increment] [primary key]
删除表:
drop table table_name
更改表项:
alter [ignore] table table_name alter_spec[,alter_spec]
alter_spec:
add [column] create_defination [first|after] col_name ; 添加字段到xxx之前或之后
add index [index_name] (col_name); 添加索引值
add primary key [col_name]; 添加主键,主键不都是建表的时候创建的吗
add unique [index_name] (col_name); 添加unique约束
alter 不管她
change [column] old_col_name create_defination; 更改字段的定义
modify [column] create_defination;
drop [column] col_name;
drop primary key; 不能理解,怎么能删除逐渐呢
drop index index_name;
rename [as] new_tb_name; 更改表的名字
rename table old_tb_name to new_tb_name;
查看表的信息:
describe table_name describe可以简写为desc
show [full] columns from table table_name
操作数据
增:
insert into table_name(字段A,字段B) values(ValueA,ValueB)
删:
delete from table_name where
改:
update table_name set 字段名B=字段值B,字段名C=字段值C,where 条件
查:
select 字段A,字段B,...
from table_name
where
group by
order by
having
limit count
where子句:
条件判断:大于 小于之类
like: %代表任意长度的字符 包括长度为0 _代表一个字符
regexp:
in:
between and:
...
group by 与having:
group by就是按照某一个字段分组,这个相等的分为一组,having就是对group by之后的结果再来一次条件筛选
order by:就是按照什么来排序 desc(descend)降序 asc(ascend)升序
limit:就是限制结果的个数
进阶
查询
单表查询
//todo
多表查询
全连接
select * from tb_user,tb_order where tb_user.col_name=tb_order.col_name;
左连接:
select * from tb_user left join tb_order on tb_user.col_name=tb_order.col_name;
右连接:
select * from tb_user right join tb_order on tb_user.col_name=tb_order.col_name;
子查询
IN关键字
select * from tb_user where name in (select name from tb_order);
//todo