库的操作
//创建数据库
create database <数据库名>;
//判断是否存在该数据库名,没有则添加
create database if not exists <数据库名>;
//删除数据库
drop database <数据库名>;
//使用数据库
use <数据库名>;
//遍历数据库
show databases;
//遍历表
show tables;
//查看表中每列的数据类型
show columns from <表名>;
表的操作
create table <表名>(
<列名> <类型>(4) zerofill primary key not null auto_increment,
//(4)保证了数据为4位,zerofill意为不足4位则用'0'填充,key设置该元素为主键
//auto_increment意为自增(自增必须为int类型,且必须为主键),not null非空
<列名> <类型> unique key,
//unique设置该元素为唯一键,数据不能重
<列名> <类型> default '设置值',
//default设置默认值为 '设置值'
primary key(<列名1>, <列名2>),
//primary可同时设置多个元素为主键,前提是前面不能设有主键且列名存在(主键不能分别设置)
foreign key(<该表普通列>) references <其他表名>(<其他表主键>)
)engine=innodb default charset=utf8;(声明编码为utf8)
//删除该表中所有数据,自增也将从头开始
truncate table <表名>;
//判断有该表则删除
drop table if exists <表名>;
//修改表名
alter table <原表名> rename <新表名>;
其他操作
//修改列名
alter table <表名> rename column <原列名> to <新列名>;
//修改列(元素)的类型
alter table <表名> modify <列名> <新类型>;
//添加一个列
alter table <表名> add <新列名> <类型>;
//删除一个列
alter table <表名> drop column <列名>;
//修改列名并修改类型
alter table <表名> change <原列名> <新列名> <新类型>;
增(insert into)
//自增的可以为null,未声明的可以default默认(',,'直接跳过)
insert into <表名> values(列1,列2,列3,···);
//通过一列进行添加,可','添加多行,前提是其他列有默认或可以设null
insert into <表名> (<列名>) values('数据1'),('数据2');
删(delete)
//删除指定数据的行
delete from <表名> where <列名>='数据';
//删除指定数据和该列为空的行
delete from <表名> where <列名> is null or <列名>=' ';
改(update)
//修改指定行的指定数据
update <表名> set <列名>='新数据' where <列名>='原数据';
查(select)
//查看该表的全部数据信息
select * from <表名>;
//查看表中指定列的数据
select <列名1>,<列名2> from <表名>;
select * from <表名> where <列名> is not null and <列名> > '2020-02-02';
select * from <表名> where <列名> like '张%';
//模糊查询('%'表示后面所有的字符,'_'表示一个字符,可以'张_2%'查张后面有两个字符的数据)
//查找该列数据中不带R的行
select * from 表 where <列名> not like '%R%';
select * from <表名> order by <列名> desc limit 1;
//order by:声明排序,desc:降序,asc:升序,limit n:取排序后的前n行数据
select * from <表名> limit <index>,<count>;
//从第index位开始查count行数据,从下标为0开始计数
select * from <表名> where group by <列名> having 条件;
select * from `names` group by NAME having count(1)>1;
//将having后的条件查询出的数据以group by后的<列名>进行分组
//查找满足该列的60到80之间的行
select * from <表名> where <列名> between 60 and 80;
//查看指定列并去重
select distinct <列名> from <表名>;
//查找的该列数据只显示前n个字符
select left(<列名>,n) from <表名>;
//将两列数据拼接成一列数据
select concat(<列名1>,<列名2>) from <表名>;
concat:如果要拼接的字符串中有一个是null,那么返回结果就是null
例:select concat('11','22'); //结果:1122
concat_ws:拼接时使用指定的分隔符分隔,如果要拼接的字符串中有null,则跳过该null
例:select concat_ws(';','11',null,'22'); //结果:11;22
//查找的该列数据只显示从下标1开始的2个字符
select substr(<列名>,1,2) from <表名>;
substr(str, pos, len) //substr下标从1开始
substr(str, pos) //str为列名/字符串,pos为起始位置,len为截取字符个数/长度
//locate下标从1开始
select locate('<要查找数据>',<列名>,n) from <表名>;
//<列名>中从第n处开始查找,找到第一次出现<要查找数据>的位置(显示的是位置下标)
子查询
//in()语句只会执行一次,它查出字表的所有字段缓存起来,再进行比较
select * from <表名1> where <列名_id> in (
select id from <表名2> where <列名>判断条件
); user表有10000条记录,order表有1000000条记录,那么最多有可能遍历10000*1000000次,效率很差.
//=(子查询)中子查询结果只能取一值
select * from <表名1> where <列名_id> = (
select id from <表名2> where <列名2>判断条件
);
//exists语句会执行多次,它并不会去缓存exists的结果集,因为这个结果集并不重要,你只需要返回真假即可
select * from <表名1> where <列名_id> exists (
select id from <表名2> where <列名>判断条件
); user表有10000条记录,order表有1000000条记录,那么exists()会执行10000次去判断user表中的id是否与order表中的user_id相等.
连表查询
select 表1<列名1>,<列名2>,··· from <表名1> where <列名>判断条件
union
select 表2<列名1>,<列名2>,··· from <表名2> where <列名>判断条件
order by <列名>;
//两表的查询后表单是两表的上下连表,无论是否同一列,按各自表的列顺序进行排序
//order by:声明按指定列表排序,union:只会选取不同的值(去重),union all:选取全部的值
select * from <表名1>
inner join <表名2>
on <表名1>.<列名> 判断条件 <表名2>.<列名>
//两表的查询后表单是两表的左右连表
//inner join:表的交集,outer join:表的并集
//left join:以左表为主,右表填入(左没有,右不能填,左有右没有,默认null),right join反之
其他
数学函数:
绝对值函数:select abs(字段) from 表 ps:此函数指的是求绝对值
平方根函数:select sqrt(9) ps:得到的值为3
求余函数: select mod(10,3) / select 10%3 ps:得到的值为1
随机函数: select rand() ps:得到的值为0~1
幂运算函数:select pow(10,2) ps:10的2次方
字符串函数:
长度函数: select length(‘内容’)
合并函数: select concat(’hello’,’world’)
截取字符串函数:select substring(字段,start,end)
日期/时间函数:
当前日期函数:curdate()
当前时间函数:curtime()
当前日期+时间函数:now()
年函数:year(now())
月函数:month(now())
日函数:dayofmonth(now())
时函数:hour(now())
分函数:minute(now())
秒函数:second(now())
时间格式函数:date_format(now(),’%Y年%m月%d日 %H时%i分%s秒’) as ‘别名’
select year(now()) – year(时间字段) from 类名;