最近由于业务线的更换,后期可能涉及频繁的使用sql语句,故在假期期间sql语句进行整理如下(随时更新,有不正确之处,请指教*_*):
db_name:数据库名称
table_name:表名称
field_name:字段名称
data_type:数据类型
value:字段对应的值
virtual_table:虚拟表
例如(select field1_name,sum(field2_name) as all from db_name.table_name )as virtual_table_name
|(一)新建库-表-记录
操作 | 语句 | 备注 |
---|---|---|
新建库 | create database db_name charset utf-8 | 默认只支持英文,需要增加charset 设置 |
新建表 | create table table_name(id int primary key auto_increment,field1_name varchar(20) not null,field2_name enum(“M”,“F”) default(“F”) | |
新增记录 | insert into table table_name (field1_name,field2_name,…,fieldn_name) values (value1,value2,…,valuen) | |
(二)增加表字段-
操作 | 语句 | 备注 |
---|---|---|
增加表字段 | alter table table_name add field1_name data_type | 增加field_name字段,数据类型为data_type设定的 |
(三)删除库-表-记录-字段
操作 | 语句 | 备注 |
---|---|---|
删除库 (drop) | drop database db_name | 慎用 |
删除表(drop) | drop table table_name | 慎用 |
删除记录"(delete) | delete from table_name where condition | |
删除字段(drop) | alter table drop field_name | 删除掉field_name字段 |
(四)修改表字段属性-表名-字段的值
操作 | 语句 | 备注 |
---|---|---|
修改字段属性(modify) | alter table table_name modify field1_name data_new_type | 只可以修改数据类型, 不可以修改字段的名称 |
修改字段属性(change) | alter table table_name change field1_name field1_name data_new_type | 此时和使用modify一样 |
alter table table_name change field_old_name field_new_name data_new_type | 可以修改所有字段 | |
修改表名称(rename) | alter table table_old_name rename table_new_name | - |
修改表中的值(update) | update table_name set field1_name= new_value1, field2_name= new_value2 where condition | 本条使用较多 |
(五)查询
(1)数据库基本查询使用
操作 | 语句 | 备注 |
---|---|---|
查看所有数据库 | show databases | |
使用数据库 | use db_name | |
查看所有表 | show tables | |
表结构的查询 | desc table_name | |
show columns from table_name | ||
复制表结构 | create table table_new_name like table_old_name | |
显示表的详细索引信息 | show index from table_name | |
退出 | exit | |
quit |
(2)数据库中单表查询
操作 | 语句 | 备注 |
---|---|---|
基本语法 | select */field_name/as(别名) /distinct(去重)/聚合函数 from table_name/virtual_table | 必有部分,注意关键字与()之间不要有空格 |
where condition | 填写条件,非必有部分 | |
group by field1_name,field2_name | 支持一个分组也支持联合分组,联合分组先按field1_name进行分组,再按照field2_name进行分组 | |
having 一般后面加聚合函数均多 | 只能跟在group by 之后 | |
order by field_name desc | 默认为按照升序进行排序,降序为desc | |
limit m,n | 从m+1记录开始向下取n条记录,不写m即默认从第一条开始取 | |
时间问题 | select sysdate() | 获取当前系统时间 |
select date_format(table_name.field_name,’%Y-%m-%d’) | 只获取时间中的日期 | |
select * from table_name where TIMESTAMPDIFF(DAY,date_format(store_info.sign_time,’%Y-%m-%d’),date_format(sysdate(),’%Y-%m-%d’))>60 | ||
获取满足距当前时间大于60天的数据 | ||
SECOND \MINUTE \HOUR \DAY \MONTH \YEAR | 比较秒、分钟、小时、天、月、年更换上一条的时间维度即可 | |
(3)数据库中多表查询
查询方式 | 语句 | 说明 | 优点 | 缺点 |
---|---|---|---|---|
等值连接 | select */field_name from table1_name,table2_name,…,tablen_name | 必有部分 | 简单 | 查询效率低,生成大量无效数据 |
where table1.primary_key = table2.foreign_key and table3.primary_key = table2_name.foreign_key and condition | 必填两表连接字段,筛选条件非必有部分 | 不适于海量数据的查询 | ||
内连接 | select * | 复杂,先判断再连接(无无效数据) | ||
from table1_name | ||||
inner join table2_name on table1_name.key = table2_name.key | ||||
inner join table3_name on table1_name.key = table3_name.key | ||||
… | ||||
where condition | ||||
左连接 | select * | 显示左边表的全部数据 | ||
from table1_name | ||||
left join table2_name on table1_name.key = table2_name.key | ||||
where condition | ||||
右连接 | select * | 显示右边表的全部数据 | ||
from table1_name | ||||
right join table2_name on table1_name.key = table2_name.key | ||||
where condition |