问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库有两表,T1(id int主键、 pid int)和T2(pid int主键、 text nvchar)T1 pid 与 T2主键一对多关联

发布网友 发布时间:2023-03-21 00:13

我来回答

5个回答

热心网友 时间:2023-10-09 00:50

我也在学编程滴,这是从我收藏的一个网站上找的,希望对你有用~~
很多网友非常不喜欢用ASP来编程,他们总是抱怨说ASP程序太慢,效率太低。更希望用PHP,JSP等来写程序。其实不能从 "认为" 这个角度来看问题 ,而应该从实际中看问题,ASP真的很慢的吗,那么微软的站为何用ASP也不慢呢?PHP真的很快吗,其实它也仍然是解释性的语言。只不过在Linux下的结合比较好而以。JSP的开发也不会简单到何处,而且要通过JDBC-ODBC桥才能连接ACCESS库等,这种情况下效率也不高。
其实,三种语言各有特点,就是优,缺点。作为一个程序员不应该总是怪语言不好,而更应该看重的是自己的技术。所以今天我们不会比较这三种WEB语言到底谁好,谁坏,而是讲解如何提高程序的执行效率问题。
第一篇:SQL语句篇
WEB程序中最引人注目的应该是数据库操作。今天我们就来讲讲如何提高SQL语句的效率。假设有一张结构如下的users的表格,其中ID为主键。已经有10000条记录。
ID int 4 自增
Name char 10 //姓名
Age int 2 //年龄
Sex char 2 //性别 默认值为 "男"
Address nvchar 255 //地址
Cash int 4 //积分
Photo char 2 //是否有照片 默认值为 "没有"
PhotoUrl nvchar 255 //照片路径

首页我们讲讲关于数据库中表和字段的问题,对于WEB进行的数据库对象中,自然表的个数越少,越好;表中的安段个数越少,越好;字段中所占的字节是越少,越好。
例如Users表中sex的字段完全可以用bit字段,进行0或1的操作,可以定义 "0"为男性,而 "1"为女性,这样就可以减少char所占的字节数,这样记录一多还是相当可观的。
再例如表的Photo的字段根本可以去掉,这样更能减少字段,从而加快读取的速度。因为Photo字段只是用来判断用户是否有照片,而我们安全可以用PhotoUrl字段来判断。如PhotoUrl字段的值如果为空,就表示此用户没有照片,否则如果有的话,PhotoUrl字段一定是有值的,同样可以完成相应的功能。

例如我们要显示出前10个用户名的记录。有的网友会进行如下的操作:

I=0
Set rs=conn.execute("select * from users")
Do while not rs.eof and I<=10
I=I+1
Response.write("name")&"<br>"
Rs.movenext
Loop
这段代码是可以完成上面的功能,可是如果真正的放到程序中,效率就太低了。因为下面的程序一下可是读出了所有的记录,即10000条啊,可我们只需要10条啊,如果这样的话是不是太浪费啊,当然我们可以使用Ms SQL中的top命令来完成这个求,或是Mysql中的limit命令。
另外,我们只需要用户名的字段显示出来,而其他的根本不需要,而此网友却用了 "select *" 的命令,一下子读了所有字段的值,这是非常没有必要的,而且在字段很多的情况下,更是加重了执行的负担。所以说应该使用 "select 字段"来进行相应的操作。所以上面的程序可以修改为:
set rs=conn.execute("select top 10 name from users")
do while not rs.eof
response.write rs("name")&"<br>"
rs.movenext
loop
这样的话,在记录很多的情况下,操作会快出很多。
另外在操作结束后,不需要再进行操作时,一定要关闭数据库的连接。
Set rs=nothing
Set conn=nothing
有的网友说,原来是这样啊,那他用下面的代码来查看Users表中就可以用下面的代码来完成了。
Set rs=conn.execute("select name from users")
I=0
Do while not rs.eof
I=I+1
Rs.movenext
loop
set rs=nothing
其实,这段代码的效率仍然是非常低下的。为了知道表中有多少条记录,而遍历所有记录,是非常不值的。我们完全可以用下面的代码来实现:

set rs=conn.execute("select count(id) as num from users")
I=rs("num")
Set rs=nothing

是不是很简单呢,其实count()命令就可以统计出你所要查询的记录数,用where加上条件也可以。
如果一位用户对数据库一次要进行若干个操作的话,我们还要注意在操作后锁定表,用lock操作完成后解锁的步骤,用unlock,因为如果一位用户在操作数据库,另一位用户也正在操作,容易造成数据的混乱,甚至使数据插错记录号,产生非常严重的后果。
在ASP的操作中,对于数据库的操作,分别有两种方法,一种是直接引用conn.execute流,另一种是使用rs.open操作。两种操作各有其好处,而在MS SQL操作中,前者使用的比较多,因为它是一种单一流的操作,一般不能使用rs.addnew或rs.update等,因为此种操作要打开表的写操作才行,如rs.open sql,conn,3,3,后面的3就表示可以执行写操作,而1表示是读操作。
最后,应该要尽可能多的使用where条件,把多个语句合在一起。例如:显示按积分的高低排列的最前面的10位男性用户的用户名。
看看一位网友下面的代码:
set rs=conn.execute("select * from users order by cash desc")
I=0
If I<=10 and not rs.eof then
If rs("sex")='男' then
Response.write rs("name")&"<br>"
I=I+1
End if
Rs.movenext
End if
Set rs=nothing
这段代码同样可以完成上面的任务,可是效率实在是太低了,从数据库中读出的每一句还要进行一次判断。对于性别的判断完全可以放到where语句中,下面看看修改过的代码:
set rs=conn.execute("select top 10 name from users where sex='男' order by cash desc")
do while not rs.eof
response.write rs("name")&"<br>"
rs.movenext
loop
set rs=nothing
加上上面讲到的top命令,select 字段名,和where的条件判断,不但使程序代码减少很多,而且也会使得程序的执行效率大增。
其实提高SQL语言的效率还有很多,只不过这些都是初学者朋友或是中级的朋友都会经常遇到,而又不在意的地方。希望大家能多多学习,广开思路,不断的从实践中得到经验。
追问额,,,只是,,呃,,,,好像没会有回答问题。。。。。

还有,,,,ASP已经落后了。。。

热心网友 时间:2023-10-09 00:50

如果T2表名称能够确定,SQL语句很简单,就是select T2.text from T1,T2 where T1.pid = T2.pid and T1.pid = 传递的参数
对你来说,编程的时候T2是动态的,所以T2应该作为参数传递,最后拼写出SQL语句,就能解决你的问题了。
你的程序应该有个地方能够确定T2表的具体名称,总不能让人猜呀,这个就是你规划的问题了

热心网友 时间:2023-10-09 00:51

我看了 你的补充及给别人的回复
感觉比较适合用 java的hibernate 将数据库持久化后
lazsy 加载 此时 t2的id 就不是id 而是对象 T1
不管是一对多 还是多对一 都会把相关数据 存到对象里去 很简单的

热心网友 时间:2023-10-09 00:51

T2不确定?你只能让它确定,否则你的效率会很差,要扫描所有“T2”,数据库没有这么设计的。
提供一个思路,T2根据pid分区。

PS:根据标题描述,T1 pid 与 T2主键多对一,不是一对多。追问问题其实可以这么抽象。。

把每个文件夹和文件都变成数据库里的表和记录。

文件夹是表,文件是记录(有唯一编号)。但文件夹有父文件夹,再父文件夹的表里,子文件夹也是记录(同样有唯一编号——就是所谓关联的外键)。

就是这样,问一下如何实现类似NTFS的权限控制(用户也是一张表,隶属的组也是一张表,有类似Windows 账户的 SID 原理的编号系统)。。。。

热心网友 时间:2023-10-09 00:52

T2表未知? 这样的情况没遇到过,去CSDN问问吧、、、看看有没有大牛处理过
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
为什么我老是容易出汗,不管夏天还是冬天,只要一活动就出汗。这样要怎么... 一年四季长期爱出汗,一动就大汗淋淋 交通事故次要责任可以构成工伤认定吗 ...认定工伤九级,付次要责任那企业一次性伤残就业补助金也按_百度知... 交通事故次要责任工伤赔偿标准 才生下来的乌龟吃什么 大蒜四月份管理要点 HR要学什么 HR所需的法律 耳夹式耳机有哪些优点?蛇圣星环耳夹式耳机实测分享 注销了钱还能找回来吗? 初三应该听的励志故事有哪些? 劳动最光荣儿童演讲稿? 做光荣的劳动者小学生演讲稿 魅蓝note手机微信语音没声音的打电话放音乐都有声音怎么了 忘记Apple ID账号和密码怎么办? 京东金条借款后如果不需要能马上撤销吗? 妈妈的简单画法 关于佐鸣的贴吧到底有多少个?请谁出这些名字 火影中,所有关于鸣人,小樱的微博是?还有佐鸣的说? 佐鸣吧为什么发不了贴 为什么苹果7在耗尽电之后充电不会自动开机,要手动按下开机键才开 HTC G7 Hero Android 2.2 手机老显示“手机内存不足”怎么解决 android手机紧急求助,机器内存不足 梦见掉牙而且很疼的预兆 梦见胡子太长的预兆 梦见自己胡子长长了的预兆 梦见梦胡子长长了的预兆 梦见开车路特别难走的预兆 做梦梦到开车路很难走预示着什么 肠胃不好怎么排毒 吃什么可以清理肠胃排毒 吃什么东西排毒清肠胃 网球正手发力动作怎样? qq好友在黑名单后,点击了“从该组删除”后好友是被删除了还是在哪里? 梦见家乡家乡发大水了的预兆 梦见家乡发洪水的预兆 水果面膜的制作方法大全 小手拉大手共创文明城征文6篇 WDZN—BYJ是什么电线? 关于妈妈的二年级作文 幼儿园教师讲道德有品行发言稿 思想品德优秀教师发言稿 注销后手机号是否还可以注册? 注销后手机号可以重新注册吗 可以注销吗。注销了可以再用这个手机号码注册吗? 美术老师2022年工作总结 钓黄鳝技巧 如果能重来一回,插上翅膀你敢不敢高飞——写在开学季 科技知识小制作大全手抄报 科技知识手抄报