今天BOSS要我对网站所有的会员发一条消息,原来的系统是通过后台对每个会员发【每次只能选择一个或者多个,但不能选择全部】,前台根据消息表message_info里的user_id字段查询出对应该会员的消息。
本系统采用SSH+MYSQL
message_info数据结构如下
-------------- ------------------------------- -------
ID bigint(20)
TITLE varchar(255)
CONTENT text
USER_ID bigint(20)
PUBER_ID bigint(20)
CREATED_TIME datetime
前台查询语句如下:[这是翻译后的SQL,本是HQL]
select * from message_info where userId=${user.id} order by id desc
思路一:“写一个循环插入语句,在数据库里运行”
由于我对MYSQL不是很熟,所以我花了1个小时去研究该怎样写SQL,但最终还是放弃了。大概思路就是建立一个存储过程然后里面加一个循环。
思路二:“在程序中for循环Insert语句”
这个实现起来相对简单一些,不过需要改代码,服务器需要重启。
吃过饭后,坐在电脑前休息了一会,突然想到,网站现在只有上千的会员,但要是以后上万甚至上十万难道 还要继续这样循环插入么?一个是速度慢,影响服务器性能甚至可能直接导致服务器崩溃。第二个,这么多数据插到数据库里,有什么坏处地球人都应该知道吧。
于是我马上想到从SQL语句下手,方案如下:
SQL语句更改为:
select * from message_info where userId=${user.id} or userId=0 order by id desc
//userId=0用于表示所有userId,id是标识列,这里的0也可以用其他负数代替
插入语句:
INSERT INTO message_info
(title,content,user_id,puber_id,created_time)
VALUES('测试所有',
'三大随碟附送大时代<br><br>更多详情请点击<A target=_blank href=http://www.wibowibo.com/space.do?m=index&id=10>http://www.wibowibo.com/space.do?m=index&id=10</a> ',
0,
1,
now())
这样我只更改了前台的HQL【由于使用了自定义标签,所以服务器不需要重启】,数据库里只插入了一条信息,这样就解决BOSS交给我的问题,而不用再去写什么循环插入语句了~
总结:在我们编写循环插入语句的时候,最好先问一下自己,这样做是不是必要的?这样做是不是最适合的?作为程序员,实现一个功能有很多种方式,也许没有最好的方式,但一定有一个是最适合的,“退一步,海阔天空”。
程序员是脑力劳动者,所以当你在不断的重复同样的工作时,你就该想想,有什么方法可以替代这些无聊的步骤,作为程序员,就应该让自己变得“懒”点。
第一次写东东,表达能力有限,欢迎高手指点。
分享到:
相关推荐
第一种方法是使用循环语句逐个将数据项插入到数据库中;第二种方法使用的是SqlBulkCopy,使您可以用其他源的数据有效批量加载 SQL Server 表;第三种使用的方法是sql server中的表值参数方法,表值参数是 SQL Server...
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选,...
询、薮据操纵和数据控制于一体,是一种统一的、综合的关系数据库语言。它功能强大,使用简 单方便、容易为用户掌握 语言具有如下特点: 功能一体化 的功能一体化表现在以下两个方面 支持多媒体数据类型,用户在建表...
实验35:在块中使用循环,三种循环模式 72 实验36:在块中自定义数据类型,使用复合变量 73 实验37:在块中使用自定义游标 76 实验38:在块中处理错误exception 78 编写程序 80 实验39:触发器 80 实验40:编写函数 ...
作者: Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom 本书是斯坦福大学计算机科学专业数据库系列课程第二门课的教科书。书中对数据库系统实现原理进行了深入阐述,并具体讨论...9.5 封锁调度器的一种体系...
系统权限提供了在Oracle数据库系统范围内执行某种任务的操作能力,而对象权限则是一种赋予用户在指定的数据库对象(如表、视图、过程等) 16. Oralce数据库在进行物理备份有联机备份和脱机备份两种方式可供选择。 ...
技术方案一:压缩时间下程序员写出的第一个版本,仅仅为了完成任务,没有从程序上做任何优化,实现方式是利用数据库访问类调用存储过程,利用循环逐条插入。很明显,这种方式效率并不高,于是有了前面的两位同事讨论...
JDBC技术事实上是一种能通过JAVA语言访问任何结构化数据库的应用程序接口(API)(Sun这样说的,我也不知道是不是真的),而且现在的JDBC 3.0据Sun说也能访问Execel等电子表格程序! JDBC对于数据库的访问有四种方式,...
Access 2000数据库系统设计(PDF)---025目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
自连接是一种在单一标准化表格上使用的JOIN声明,实质上,你可以使用自连接在一个表格内获得行与行之间的等级关系。你必须使用别名作为表格的两个实例来描述表格,然后将其连接起来。 使用自连接的实例可以体现在列...
两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。 B: EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时...
这种特性使得开发者能够轻松地在静态网页中插入动态内容,实现数据渲染、条件判断、循环处理等功能,极大地简化了Web开发流程。同时,PHP也支持纯脚本文件编写,适用于构建复杂的后台逻辑。 PHP语法简洁明了,借鉴...
SQLServer中防止并发插入重复数据,大致有以下几种方法: 1.使用Primary Key,Unique Key等在数据库层面让重复数据无法插入。 2.插入时使用条件 insert into Table(****) select **** where not exists(select 1 ...
Access 2000数据库系统设计(PDF)---002目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
有一种规避的方法,就是避免向数据库插入NULL,即要求所有业务数据入库的值都不为空。但这样作实际上是限制了程序的行为能力,例如无法实现单据草稿的保存。 <br>第三,在插入数据时无法方便的使用字段默认值。最...
Access 2000数据库系统设计(PDF)---018目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
Access 2000数据库系统设计(PDF)---002目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
Access 2000数据库系统设计(PDF)---011目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....
724.2 理解关系型数据库 744.3 使用Access数据库文件和表 754.3.1 Access系统数据库 754.3.2 Access 库数据库 754.4 创建一个新数据库 754.5 理解表和字段的属性 774.6 选择字段数据类型、大小和格式 804.6.1 为数值...
Access 2000数据库系统设计(PDF)---020目 录译者序前言第一部分 Access基础第1章 Access 2000的新增功能 11.1 Access 2000透视 11.2 用Office Web组件部署数据访问页 21.2.1 Office Web 组件 21.2.2 DAP演示测试....