实际开发过程中如果用到这个技巧,那必然是客户提出的,
并且会给出一些要求(那些都是限制条件),
过滤出来的数据不会太多(展示的数据不符合三范式,展示的数据也不会保留sql当中),如果展示的数据过多,肉眼是看不完的。客户提出的这个需求便没有存在的意义
不是啊
生成一个超长序列表,根据列数动态匹配
取决于有多少列,如果列数少,比如说10列以下,case when还是可以做到。几百列可以用excel弄个公式填下,然后复制到 sql客户端执行。
异步呐,这还想啥个
DELETE FROM table_name 是mysql 的语法 你说的应该是其他数据库写法
1 show profiles;
2 show variables;查看profiling 是否是on状态;
3 如果是off,则 set profiling = 1;
4 执行自己的sql语句;
5 show profiles;就可以查到sql语句的执行时间;
???
这个提供给有一定sql基础的人看的吧
存储过程已经编译好了,只需要传递和回传参数,数据流量少,执行时间短,提高了并发上限(高并发时请求众多,需要快速响应),我是这样理解的,仅供参考。
需要先开启事务bigin,然后进行insert(在事务中(begin和rollback之间)),最后rollback,就应该能成功了
小白听这个可能会有点难,还是得从基础开始
数据库的函数
入门的话知道增删改查就行了 也不是很难学的
你们不看题目吗 mysql开发技巧 把数据查出来 再处理不使用别的语言了吗
不清楚你的表结构是什么,所以很难去说哪里出错了。但是用数据库最好还是少用函数,这样的话性能会大大的提高,尽量把函数的方法用代码解决
limit限制数量,限制只插入user1_test中(user_name,over,mobile) 前两条记录的值,所以后来只有前两条记录重复了
带耳机啊 不错的
1、如何进行行列转换 2、如何生成唯一序列号 3、如何删除重复数据
sqlercn 网上搜一下 好多都是的
##准备好要用的表
create table user1_practice(id int not null auto_increment primary key,
user_name varchar(3),
over varchar(5),
mobile varchar(100));
insert into user1_practice(user_name,over,mobile) values ('唐僧','旃檀功德佛','12112345678,14112345678,12112345678');
insert into user1_practice(user_name,over,mobile) values ('猪八戒','净坛使者','12144643321,14144643321');
insert into user1_practice(user_name,over,mobile) values ('孙悟空','斗战胜佛','12166666666,14166666666,18166666666,18166666666');
insert into user1_practice(user_name,over,mobile) values ('沙僧','金身罗汉','12198343214,14198343214');
##建一个序列表
create tb_sequence(id int not null auto_increment primary key);
insert into tb_sequence values(),(),(),(),(),(),(),(),();
##列转行后的表user1_trans1
create table user1_trans1 as
select a.id,user_name,over,
replace(substring(substring_index(mobile,',',a.id),char_length(substring_index(mobile,',',a.id-1))+1),',','') as mobile
from tb_sequence a cross join(
select user_name,over,
concat(mobile,',') as mobile,
length(mobile)-length(replace(mobile,',',''))+1 as size
from user1_practice b) b on a.id <= b.size;
##删除user1_trans1表中的重复记录
delete a from user1_trans1 a join (
select user_name,over,mobile,count(*),max(id) as id
from user1_trans1 group by user_name,over,mobile having count(*) > 1 ) b
on a.user_name = b.user_name
and a.over = b.over
and a.mobile = b.mobile
where a.id < b.id;
##用group_concat函数将mobile转化成以逗号分隔的字符串
create table user1_trans2 as
select user_name,over,group_concat(mobile) as mobile from user1_trans1
group by user_name,over;
##对原表user1_practice进行关联更新
update user1_practice a inner join user1_trans2 b on a.user_name = b.user_name
set a.mobile = b.mobile;
这是理想状态,一般一个程序写好了,基本都不会去怎么修改了,除了客户强烈要求修改业务外(不改不付钱啊这些),开发基本不会动程序,都是让实施人员从数据库中动刀子,这就是现状,让你加过程啊,做报表啊。。。
问题是怎么从右边转换为左边,我自己的答案是:
select user_name,(select eq_name from `test_game` b where b.user_name = a.user_name and b.equipment = 'arms' ) as arms,(select eq_name from `test_game` c where c.user_name = a.user_name and c.equipment = 'clothing' ) as clothing ,(select eq_name from `test_game` d where d.user_name = a.user_name and d.equipment = 'shoe' ) as shoe from `test_game` a group by a.user_name;
感觉子查询太多了,效率有点低,哪位大神帮忙优化一下?