Questions tagged «sql»

结构化查询语言(SQL)是用于查询数据库的语言。问题应包括代码示例,表结构,示例数据以及正在使用的DBMS实现的标签(例如MySQL,PostgreSQL,Oracle,MS SQL Server,IBM DB2等)。如果您的问题仅涉及特定的DBMS(使用特定的扩展名/功能),请改用该DBMS的标签。使用SQL标记的问题的答案应使用ISO / IEC标准SQL。


21
有充分理由不使用关系数据库?
您能否指出替代的数据存储工具,并给出充分的理由使用它们代替过时的关系数据库?我认为,大多数应用程序很少使用SQL的全部功能-看看如何构建不依赖SQL的应用程序会很有趣。
139 sql  database  nosql 

30
为什么我们需要实体对象?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 改善这个问题 我确实需要就当前接受的企业应用程序设计范例的优点进行一些诚实,周到的辩论。 我不认为实体对象应该存在。 实体对象是指我们倾向于为应用程序构建的典型事物,例如“人”,“帐户”,“订单”等。 我当前的设计理念是: 所有数据库访问都必须通过存储过程来完成。 每当需要数据时,调用存储过程并遍历SqlDataReader或DataTable中的行 (注意:我还使用Java EE构建了企业应用程序,Java人士请用等价的.NET示例代替) 我不是反OO。我为不同目的编写了很多类,而不仅仅是实体。我将承认我编写的大部分类都是静态帮助器类。 我不是在造玩具。我说的是跨多台机器部署的大批量交易应用程序。Web应用程序,Windows服务,Web服务,B2B交互,您可以为其命名。 我曾经使用过OR Mappers。我写了一些。我已经使用了Java EE堆栈,CSLA和其他一些等效项。我不仅使用了它们,而且还在生产环境中积极开发和维护了这些应用程序。 我已经走到了实战检验的结论,即实体对象在我们的方式取得,和我们的生活会如此没有他们容易得多。 考虑一个简单的示例:您会收到有关应用程序中某个页面无法正常工作的支持电话,可能其中一个字段没有得到应有的保留。使用我的模型,分配来查找问题的开发人员仅打开了3个文件。一个带有存储过程的ASPX,ASPX.CS和SQL文件。该问题可能是存储过程调用中缺少的参数,需要几分钟才能解决。但是对于任何实体模型,您将始终启动调试器,开始逐步执​​行代码,最终可能会在Visual Studio中打开15-20个文件。到栈底时,您已经忘记了从哪里开始。我们一次只能记住这么多事情。无需添加任何不必要的层,软件非常复杂。 开发的复杂性和故障排除只是我苦恼的一方面。 现在让我们谈谈可伸缩性。 开发人员是否意识到他们每次编写或修改与数据库交互的任何代码时都需要对对数据库的确切影响进行彻底的分析?不仅仅是开发副本,我的意思是模仿生产,因此您可以看到,您对象现在需要的附加列使当前查询计划无效,并且在1秒内运行的报告现在将需要2分钟,因为您在选择列表中添加了单列?事实证明,您现在需要的索引是如此之大,以至于DBA不得不修改文件的物理布局? 如果您通过抽象让人们离物理数据存储区太远,他们将对需要扩展的应用程序造成破坏。 我不是狂热者。我可以确信,如果我错了,也许我错了,因为对Linq到SQL,ADO.NET EF,Hibernate,Java EE等的大力推动。请仔细考虑您的回答,如果我遗漏了一些我我真的很想知道它是什么,以及为什么我应该改变自己的想法。 [编辑] 看来这个问题突然又活跃起来了,所以现在有了新的评论功能,我已经直接对几个答案发表了评论。感谢您的答复,我认为这是一个健康的讨论。 我可能在讲企业应用程序时应该更加清楚。例如,我真的无法评论在某人的台式机或移动应用程序上运行的游戏。 对于几个相似的答案,我不得不在顶部提出一件事:正交性和关注点分离经常被引用为采用实体/ ORM的原因。对我而言,存储过程是我能想到的分离关注点的最佳示例。如果不允许除通过存储过程之外的所有其他对数据库的访问,则只要您维护存储过程的输入和输出,理论上就可以重新设计整个数据模型并且不破坏任何代码。它们是按合同编程的完美示例(只要您避免“选择*”并记录结果集)。 问一个已经从事该行业很长时间并且使用了长期应用程序的人:在数据库运行期间,有多少个应用程序和UI层来去去了?当有4到5个不同的持久层生成SQL来获取数据时,调整和重构数据库有多难?你什么都不能改变!ORM或生成SQL的任何代码将您的数据库牢牢锁定。
139 sql  database  orm  entities 

9
没有聚合功能的TSQL Pivot
我有这样的桌子... CustomerID DBColumnName Data -------------------------------------- 1 FirstName Joe 1 MiddleName S 1 LastName Smith 1 Date 12/12/2009 2 FirstName Sam 2 MiddleName S 2 LastName Freddrick 2 Date 1/12/2009 3 FirstName Jaime 3 MiddleName S 3 LastName Carol 3 Date 12/1/2009 我想要这个 使用PIVOT可以吗? CustomerID FirstName MiddleName LastName Date ---------------------------------------------------------------------- 1 …

18
我可以通过转义单引号和用单引号引起来的用户输入来防止SQL注入吗?
我意识到,在构建包含用户输入的查询时,参数化SQL查询是清理用户输入的最佳方式,但是我想知道使用用户输入并转义任何单引号并将整个字符串都用单引号引起的问题是什么。这是代码: sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'" 用户输入的任何单引号都将替换为双单引号,这消除了用户结束字符串的能力,因此他们可能键入的其他任何内容(例如分号,百分号等)都将成为字符串的一部分,并且实际上并未作为命令的一部分执行。 我们使用的是Microsoft SQL Server 2000,我认为单引号是唯一的字符串定界符,也是逃避字符串定界符的唯一方法,因此无法执行用户键入的任何内容。 我没有发现针对此问题发起SQL注入攻击的任何方法,但我意识到,如果这在我看来像防弹一样,那么其他人可能已经想到了,并且这将是普遍的做法。 此代码有什么问题?有没有办法使SQL注入攻击超越这种清理技术?利用此技术的样本用户输入将非常有帮助。 更新: 我仍然不知道有什么方法可以有效地对此代码发起SQL注入攻击。一些人建议反斜杠可以转义一个单引号,而让另一个反引号结束该字符串,以便该字符串的其余部分将作为SQL命令的一部分执行,并且我意识到该方法可以将SQL注入到一个MySQL数据库,但是在SQL Server 2000中,唯一能够逃脱单引号的方法是使用另一个单引号。反斜杠不会这样做。 并且,除非有一种方法可以停止转义单引号,否则将不会执行其余的用户输入,因为所有这些都将被视为一个连续的字符串。 我知道有更好的方法可以清除输入,但是我真的更感兴趣于了解为什么我上面提供的方法行不通。如果有人知道针对此清理方法进行SQL注入攻击的任何特定方式,我很乐意看到它。

26
T-SQL分割字串
我有一个SQL Server 2008 R2列,其中包含一个字符串,需要用逗号分隔。我在StackOverflow上看到了很多答案,但是在R2中都没有。我已经确保我对任何拆分函数示例都具有选择权限。任何帮助,不胜感激。

18
SQL Server选择最后N行
这是一个已知的问题,但是我发现的最佳解决方案是: SELECT TOP N * FROM MyTable ORDER BY Id DESC 我的桌子上有很多行。使用该查询不是一种可能,因为它会花费很多时间。那么如何在不使用ORDER BY的情况下选择最后N行呢? 编辑 对不起,这个重复的问题

7
MySQL-在一个查询中更新具有不同值的多行
我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。 例如,将三个更新更新为1个查询: UPDATE table_users SET cod_user = '622057' , date = '12082014' WHERE user_rol = 'student' AND cod_office = '17389551'; UPDATE table_users SET cod_user = '2913659' , date = '12082014' WHERE user_rol = 'assistant' AND cod_office = '17389551'; UPDATE table_users SET cod_user = '6160230' , date = '12082014' WHERE user_rol …
139 mysql  sql  sql-update 


9
mysql更新查询中的增量值
我已将此代码用于提供+1分,但无法正常工作。 mysql_query(" UPDATE member_profile SET points= ' ".$points." ' + 1 WHERE user_id = '".$userid."' "); 在$点变量是user's点现在..我希望它加一个吧..所以举例来说,如果他有一个像5分,应该是5 + 1 = 6 .. 但它不,它只是改变到1 我做错了什么?谢谢
138 php  mysql  sql  sql-update 


19
Android中的SQLite如何更新特定行
我一直在尝试更新特定行已有一段时间了,看来有两种方法可以做到这一点。根据我的阅读和尝试,您可以使用: execSQL(String sql) 方法 或者: update(String table, ContentValues values, String whereClause, String[] whereArgs) 方法。 (让我知道这是否不正确,因为我是android新手,还是SQL新手。) 因此,让我了解我的实际代码。 myDB.update(TableName, "(Field1, Field2, Field3)" + " VALUES ('Bob', 19, 'Male')", "where _id = 1", null); 我正在努力做到这一点: 更新Field1,Field2和Field3,其中主键(_id)等于1。 Eclipse在“更新”一词的正下方给出了一条红线,并给出了以下解释: SQLiteDatabase类型的方法update(String,ContentValues,String,String [])不适用于参数(String,String,String,null) 我猜我没有正确分配ContentValues。谁能指出我正确的方向?
138 java  android  sql  eclipse  sqlite 

5
通过此查询实现分页(跳过/获取)功能
我一直在尝试了解一些有关如何在SQL中实现自定义分页的知识,例如阅读诸如此类的文章。 我有以下查询,它运行良好。但是我想用这个实现分页。 SELECT TOP x PostId FROM ( SELECT PostId, MAX (Datemade) as LastDate from dbForumEntry group by PostId ) SubQueryAlias order by LastDate desc 我要什么 我有论坛帖子以及相关条目。我想获取包含最新添加条目的帖子,因此我可以选择最近辩论过的帖子。 现在,我希望能够获得“前10到20个最近活跃的帖子”,而不是“前10个”。 我尝试了什么 我试图将ROW函数实现为本文中的那个,但确实没有运气。 有什么想法如何实施吗?

14
定义要与IN运算符一起使用的变量(T-SQL)
我有一个使用IN运算符的Transact-SQL查询。像这样: select * from myTable where myColumn in (1,2,3,4) 有没有一种方法来定义一个变量来保存整个列表“(1,2,3,4)”?我应该如何定义它? declare @myList {data type} set @myList = (1,2,3,4) select * from myTable where myColumn in @myList
138 sql  tsql 

10
在MySQL查询中将文本转换为数字
是否可以在MySQL查询中将文本转换为数字?我有一列带有标识符的列,该标识符由名称和数字组成,格式为“名称-数字”。该列具有VARCHAR类型。我想按数字(行名相同)对行进行排序,但按执行字符顺序对列进行排序,即 name-1 name-11 name-12 name-2 如果我减少了数字,是否可以将“ varchar”数字转换为“真实”数字并用它对行进行排序?我想获得以下订单。 name-1 name-2 name-11 name-12 我无法将数字表示为单独的列。 编辑2011-05-11 9:32 我发现以下解决方案... ORDER BY column * 1。如果名称不包含任何数字,是否可以保存使用该解决方案?
138 mysql  sql 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.