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倒序修改

原文地址:https://www.cnblogs.com/caojuansh/p/11128045.html