https://www.oschina.net/translate/node-mysql-tutorial?cmp&p=1#
insert
//into可省略,
//值可以是表达式,可以为default(默认值)
//NULL可用于自增的值,
//不能省略可空字段
insert into user values (NULL,'x','h');
//多插入,逗号隔开
inser into user values (NULL,'x','h'),(NULL,'x','h');
//只插入必须的值
inser into user (name,pwd) values ('x','h');
//insert set:只能插入一个
inser into user set name='x',pwd="h";
//插入查询的数据:insert select
insert bbs_class (bbs_class.name) select user.name from user where user.id>5;
update
单表更新:
update user set pwd=pwd+'加密'; //值可为表达式
//不加条件更新全部
update user set pwd=pwd+'加密' where id=1; //加限定条件
delete
单表删除:
//不加条件就会删除所有
delete from user where id=1;
查询:select
//查询user表中所有的id与name,*为所有列
select id,name from user
//user.id,user.name是为了区分表的数据
select user.id,user.name from user
//查询列并给一个别名,as可省略,
//别名可用于group by,order by,having子句
select id as ID,name as User from user
//条件,不加条件查询全部
select id,name from user where id=1
//查询结果分组:group by
//以name为条件分组,重复的只取第一个(就是去重...)
select id,name from user group by name;//最后的name可以为下标从1开始,表示前面出现的列
//对分组进行条件指定:having
//最后的id必须在前面出现才能,或者用聚合函数
select id,name,is_admin from user group by 3 having id>1;
//对查询结果进行排序:order by
select id,name from user order by id desc;//以id倒序排列
select id,name from user order by name,id desc;//以name正序排列,再以id倒序排列
//限制数量,编号从0(第1条)开始,编号和id无关
//(页码-1)*记录数)
select id,name from user limit 2;//从第1条开始获取2条
select id,name from user limit 0,3;//从第1条开始获取3条
存储过程
1、使用了存过程,相似的删,改,增等操作就变得轻松了,且便于管理!
2、因为SQL语句已经预编绎过了,因此运行的速度比较快。
3、可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因。
4、运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。
5、主要是在服务器上运行,减少对客户机的压力。
6、可包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
7、可在单个存储过程中执行一系列SQL语句。
8、可从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
//创建存储过程
create procedure sp1(in userid int unsigned) select * from user where id=userid;
//调用
call sp1(3);
//删除
drop procedure sp1;
例子:获取帖子列表并且带上回复贴数量
//用count()计算group分组后每组的数,再与bbs 左外连接
select a.*,b.len from bbs a left join
(select bbs_reply.bbs_id,count(*) len from bbs_reply group by bbs_reply.bbs_id) as b
on a.id=b.bbs_id