mysql-笔记 操作语句
Call sp_name([parameter[,…]]) 调用存储过账 如果存储过程没有参数 可以使用call p 或 call p()
select row_count(); 查询行数
在api中调用 mysql_affected_rows() 函数 查询行数
-——————————————————————————————————-
delete from tbl_name [partition (partition_name[,partition_name)] [where where_condition] [order by …][limit row_count]
从表中删除数据 并返回删除的行数。 row_count()
truncate table 语句比 delete 语句 快。truncate table 不能用于事务或在表上有锁时。
多表删除
delete t1,t2 from t1 inner join t2 inner join t3 where t1.id=t2.id and t2.id=t3.id;
或 delete from t1,t2 using t1 inner join t2 inner join t3 where t1.id=t2.id and t2.id=t3.id; 只删除 t1/t2中的数据
delete t1 from t1 left join t2 on t1.id=t2.id where t2.id is null
如果使用表的别名,则引用表时要使用 别名 delete t1 from test as t1,test2 where ….
-———————————————————————————————————————————————————
do 是select expr,的简化,稍微快一点
do 执行表达式但不返回结果 如select sleep(5); do sleep(5);
-————————————————————————————————————————————————————-
insert into vlaues
auto_increment 列在所有列插入数据后计算值
Insert [low_priority|high_priority ] [ignore] [into] tbl_name [partition (partition_name[,partition_name]…)][(col_name[,col_name]…)]
select … [on duplicate key update assignment_list] 可以快速从多具表中取多条数据插入多条记录
insert into tbl_temp2(fld_id) select tbl_temp1.fld_order-id from tbl_temp1 where tbl_temp1.fld_order_id >100;
指定ignore 忽略引起重复键冲突,该行被丢弃,不会有出错,会有报警。
插入数据的表与选择数据的表不能是同一个表,支持并发插入
on duplicate key update 语句 重复的键会引起更新
如果一个新行被插入则影响的行数据是1;
如果一个存在的行被更新则影响行数是2;
如果一个存在的行被赋值为当前的值,则影响行数是0
insert into tbl_name() values(); 按默认插入一行数据
default(col_name) 产生默认值
insert into tbl_name(col1,col2) values(15,col1*2); 表达式可以使用前面已指定值的列
insert into tbl_name(a,b,c) values(1,2,3),(4,5,6),(7,8,9); 可以插入多行记录
使用 low_priority 插入会延迟,直到没有其他客户端读取数据
使用 high_priority 并发插入不可用
-———————————————————————————————————————————
Replace tbl_name[(col_name[,col_name]…] {values|value} (value_list)[,(value_list)]…
replace tbl_name set assignment_list
replace tbl_name select …
同插入操作。如果有相同的主键则删除后重新插入一条记录,返回影响行数,如果是1 则为只插入数据,如果大于1 则为删除后插入数据 可以使用 mysql_affected_row()函数取值
create table test( id int unsigned not null auto_increment, data varchar(64) default null, ts timestamp not null default current_timestamp on update current_timestamp,primary key (id));
replace into test values(1,’0ld’,current_timestamp);
replace into test values(1,’new’,current_timestamp);
select
标准的sql中having 只能使用group by 、或聚合函数中的列,mysql支持使用select 或子句中的列
having 语句可使用聚合函数 select user, max(salary) from users group by user having max(salary)>0
limit 使用1个或2个非负数字参数 第一个参数是偏移数量,第2个是返回数量
select * from tbl limit 5,10 返回 6-15行
如果在子查询中有limit ,外层查询也有limit,优先使用外层的limit
标准sql中inner join AB交集,left outer join A 完全集,right outer join B的完全集,full outer join 产生 A和B的并集 cross join AB 表的迪卡儿积 N* M的组合
mysql中 join /cross join /inner join 可互换使用是等同的。select * from t1 left join (t2 ,t3 t4) on (t2.a=t1.a and t3.b=t1.b and t4.c=t1.c)
使用union时,每个子句中的order by 排序功能不起作用,限制行数启作用。order by 放于所有union语句后 时起作用
(select a from t1 ) union (select a from t2) order by a linit 10;
-———————————————————————————————————————————————-
update
可以使用order by 优先 修改 记录行
update t set id=id +1 order by id desc; 优先修改 id 较大者,按id倒序修改
转载于//www.cnblogs.com/caojuansh/p/11128045.html
还没有评论,来说两句吧...