Questions tagged «sql»

结构化查询语言(SQL)是一种用于在关系数据库管理系统中管理数据的语言。该标签用于一般的SQL编程问题。它不适用于Microsoft SQL Server(为此,请使用sql-server标记),也不能单独引用SQL的特定方言。

6
代码格式化SQL查询
我应该在不同的行中中断SQL查询吗?例如,在我正在进行的项目中,我们有一个查询,该查询占用1600列!1600 +制表符。我写了这样的查询: "SELECT bla , bla2 , bla FROM bla " . "WHERE bla=333 AND bla=2" . "ORDER BY nfdfsd ..."; 但是他们要求我将它们放在一行中,并说我的样式格式不好。为什么这是不好的做法?

7
什么更快?使用REST API还是直接查询数据库?
什么是更快的性能明智的选择?创建REST API并让您的Web应用使用REST API来与数据库进行所有交互,或者直接查询数据库(即使用您的语言用来查询数据库的任何典型对象,例如Java的JDBC)? 我使用REST的方式: 您在代码中创建一个对象以调用REST方法 调用http方法 REST API中的代码查询数据库 数据库返回一些数据 REST API代码将数据打包到Json中并将其发送到您的客户端 客户端收到Json / XML响应 将响应映射到代码中的对象 另一方面,直接查询数据库: 使用查询字符串创建对象以查询数据库 数据库返回一些数据 将响应映射到代码中的对象 因此,这是否意味着使用REST API会更慢?也许取决于数据库的类型(SQL vs NoSQL)?
16 database  rest  sql 

7
您如何版本/跟踪对SQL表的更改?
在每个人都在对本地表和开发表进行更改的开发人员团队中工作时,如何使所有更改保持同步?每个人都保留其sql更改的中央日志文件?一个Wiki页面,用于跟踪alter table语句,开发人员可以运行以将其本地db更新到最新版本的单个.sql文件?我已经使用了其中一些解决方案,并且希望获得一个可以一起工作的好的可靠解决方案,因此,感谢您的想法。

4
为什么关系数据库仅接受SQL查询?
据我所知,大多数关系数据库不提供任何用于查询的驱动程序级API,只有query将SQL字符串作为参数的函数除外。 我在想,如果可以做的话,会变得多么容易: var result = mysql.select('article', {id: 3}) 对于联接的表,它会稍微复杂一些,但仍然可能。例如: var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'}); mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID']) 代码更简洁,没有字符串解析开销,没有注入问题,更易于重用查询元素...我可以看到很多优点。 为什么选择仅通过SQL提供对查询的访问有特定原因吗?
15 database  sql 

7
去域还是不去域
SQL92和SQL99标准定义了DDL构造。并非所有的数据库都支持此功能,或者并非所有数据库都支持此名称(例如,SQL Server具有用户定义的类型)。CREATE DOMAIN 这些允许人们定义要在其数据库中使用的约束数据类型,以简化和执行与允许值有关的规则。这种数据类型可用于列声明,存储过程和函数的输入和输出等。 我想知道: 人们实际上在他们的数据库设计中使用域吗? 如果是这样到什么程度? 它们有多有用? 您遇到了什么陷阱? 我正在尝试评估在将来的数据库开发中使用它们的可行性。
15 sql  sql-domain 

10
为什么RDBMS不以嵌套格式返回联接的表?
例如,假设我要获取一个用户及其所有电话号码和电子邮件地址。电话号码和电子邮件存储在单独的表中,多个电话/电子邮件的一位用户。我可以很容易地做到这一点: SELECT * FROM users user LEFT JOIN emails email ON email.user_id=user.id LEFT JOIN phones phone ON phone.user_id=user.id 问题在于,它会为每条记录(用户通过电子邮件发送电话记录)一遍又一遍地返回用户名,DOB,最喜欢的颜色以及存储在用户表中的所有其他信息,这可能会占用带宽并减慢速度降低结果。 那岂不是更好,如果它返回一个单列为每个用户,而该纪录内有一个列表的电子邮件和列表的手机?这也将使数据更容易使用。 我知道您可以使用LINQ或其他框架来获得类似的结果,但这似乎是关系数据库的基础设计中的一个弱点。 我们可以通过使用NoSQL解决此问题,但是不应该有一些中间立场吗? 我想念什么吗?为什么不存在? *是的,它是按照这种方式设计的。我知道了。我想知道为什么没有替代方法更容易使用。SQL可以继续做它在做的事情,但是他们可以添加一个或两个关键字来做一些后期处理,这些后处理以嵌套格式而不是笛卡尔乘积返回数据。 我知道可以使用您选择的脚本语言来完成此操作,但是它要求SQL Server发送冗余数据(下面的示例),或者发出多个查询,例如SELECT email FROM emails WHERE user_id IN (/* result of first query */)。 而不是让MySQL返回类似于此的内容: [ { "name": "John Smith", "dob": "1945-05-13", "fav_color": "red", "email": "johnsmith45@gmail.com", …
14 design  sql  rdbms 

6
数据库规范化后是否还需要索引
完成良好的归一化之后,还需要对表建立索引吗?这将如何影响性能?良好的规范化后,它甚至会以某种方式影响性能吗? 如果您已经具有主键和外键,通常会索引哪些列? 规范化数据库似乎已经有效。但是,我可能已经跳过了索引如何影响数据库。这仅在使用查询时有效吗?如何运作/执行并改善数据库?

4
具有SQL和数据操作功能的TDD
当我是一名专业程序员时,我从未接受过软件工程方面的正式培训。由于我经常在这里访问,所以我注意到了尽可能编写单元测试的趋势,并且随着我的软件变得越来越复杂,我认为自动化测试是帮助调试的一个好主意。 但是,我的大部分工作涉及编写复杂的SQL,然后以某种方式处理输出。例如,您将如何编写测试以确保SQL返回正确的数据?然后,假设如果数据不受您的控制(例如,第三方系统的数据),那么您如何能有效地测试您的处理例程,而不必手写大量的伪数据? 我能想到的最佳解决方案是对涵盖大多数情况的数据进行查看。然后,我可以将这些视图与SQL连接起来,以查看它是否返回正确的记录,并手动处理视图以查看我的函数等是否正在执行应有的功能。尽管如此,它似乎过于油腻和胡扯。特别是找到要测试的数据...

7
为什么SQL被称为基于关系/功能的语言?
我们了解到,大多数语言都被分类为“基于关系的”或“高级”这两种语言。我以前从未使用过SQL,但是通过阅读其语法,它似乎更像是命令式/高级语法,而不是基于函数/关系的(Lisp,Haskell)? 或者可能是我对我的教授的讲义的解释是错误的...但是它确实将SQL列为基于关系的语言之一(与高级语言相对),并且将基于关系的语言等同于功能性的语言...或者也许是我不明白为什么SQL处理关系数据库这一事实使函数语言成为应实现的方式?(为什么在对编程语言进行分类时,“基于关系的”等同于“功能的”?) 谢谢 :)

5
有什么问题可以测试程序员的SQL知识?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 有什么问题可以测试程序员的SQL知识?这个问题的答案是什么?缺乏正确答案的时间可能意味着您理解与该问题相关的概念? GOOGLED: sql挑战
14 sql  hiring 

4
关于我的数据库日期数据类型讨论:有效吗?值得吗?还有其他人感觉到吗?
我花了很多时间在SO上回答SQL问题。我经常遇到这样的问题: SELECT * FROM person WHERE birthdate BETWEEN '01/01/2017' AND '01/03/2017' SELECT * FROM person WHERE birthdate BETWEEN '2017-01-01' AND '2017-03-01' SELECT * FROM person WHERE birthdate BETWEEN 'some string' AND 'other string' 即要么依赖给定参数从字符串到日期的隐式转换(错误),要么依赖数据库将x百万个数据库行值转换为字符串并进行字符串比较(更糟糕) 我偶尔会发表评论,尤其是如果这是一个非常有名的用户,他们编写了一个明智的答案,但是我认为,他们的数据类型确实应该少一些草率/字符串式输入 注释通常采用以下形式:如果他们使用to_date(Oracle),str_to_date(MySQL),convert(SQLSERVER)或类似的机制将字符串显式转换为日期,可能会更好: --oracle SELECT * FROM person WHERE birthdate BETWEEN TO_DATE('20170101', 'YYYYMMDD') AND TO_DATE('20170301', 'YYYYMMDD') --mysql …

4
数据库历史记录表/跟踪表
目前,我想构建一个跟踪/历史记录表,如下所示: PrimaryKey-ID OtherTableId-fk fieldName-其跟踪的字段名称 旧值 新价值 用户名 CreateDateTime 因此,基本上,我希望有一个表可以跟踪另一个表的历史记录,并使用新值和旧值存储更改后的字段的列名。我的问题是,有人可以戳破这个漏洞吗?另外,最简单的方法是确保仅将其跟踪表中的列名输入到fieldName列中?目前,我的选择是在要构建的服务中包含一个枚举,或者创建另一个状态表并使fieldName成为fk。还有更好的主意吗? 修改 目标:我们目前只跟踪2个字段。一个字段将显示在网页上以显示历史记录,而另一个字段将仅由一个部门访问,并且他们有权访问他们可以查询的数据库视图。他们将只查询这一字段,以获得有关谁更改了字段以及更改内容的信息。这就是我们想要在数据库字段定义表列的位置而不是具有表记录历史记录的精确副本的地方进行设置的原因。我们只希望跟踪两个字段,以便将来增加或删除字段。 谢谢!
13 database  sql  tracking 

3
依靠参数化查询是防止SQL注入的唯一方法吗?
我对SQL注入攻击的所有了解似乎都表明,参数化查询(尤其是存储过程中的参数化查询)是防范此类攻击的唯一方法。在我工作的时候(回到黑暗时代),存储过程被认为是一种不好的做法,主要是因为它们的可维护性较差。可测试性较低;高度耦合;并将系统锁定在一个供应商中;(此问题涵盖其他一些原因)。 尽管在我工作时,项目实际上并没有意识到这种攻击的可能性。采用了各种规则来保护数据库免受各种损坏。这些规则可以概括为: 没有客户端/应用程序可以直接访问数据库表。 对所有表的所有访问都是通过视图进行的(对基本表的所有更新都是通过触发器进行的)。 所有数据项都有指定的域。 不允许任何数据项为空-这意味着DBA有时会磨牙。但被执行了。 角色和权限已适当设置-例如,受限制的角色仅授予视图更改数据的权利。 那么,这样的一组(强制)规则(尽管不一定是特定的一组)是否可以替代参数化查询,以防止SQL注入攻击?如果没有,为什么不呢?可以通过(仅)数据库特定措施来保护数据库免受此类攻击吗? 编辑 鉴于收到的初步答复,对该问题的重视程度略有变化。基本问题不变。 编辑2 依赖参数化查询的方法似乎只是防御系统攻击的外围步骤。在我看来,更基本的防御措施既可取,又可能使对此类查询的依赖变得不必要或不太关键,甚至可以专门防御注入攻击。 我的问题中隐含的方法基于“加固”数据库,我不知道它是否是可行的选择。进一步的研究表明存在这样的方法。我发现以下来源提供了一些指向这种方法的指针: http://database-programmer.blogspot.com http://thehelsinkideclaration.blogspot.com 我从这些来源获得的主要特征是: 广泛的数据字典,与广泛的安全数据字典相结合 从数据字典生成触发器,查询和约束 最小化代码并最大化数据 尽管我到目前为止所获得的答案非常有用,并指出了忽略参数化查询所带来的困难,但最终它们并没有回答我的原始问题(现在以粗体强调)。


3
整理存储在代码中的SQL查询的最佳方法?(还是应该?)[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我确信我不是唯一一个在看到一页充满SQL查询的代码时感到沮丧的人。ActiveRecord和其他ORM模式有助于减少项目中使用的大量SQL,但是在许多复杂查询的情况下,SQL的使用似乎不可避免。 我正在寻找有关如何与其余代码(或外部代码)一起组织SQL查询的意见,以防止其散布到各处?一个明显的想法是使用视图,但是在处理多个大型索引表等时,视图通常会成为性能问题的源头。 编辑1-我假设您已经将其分离到模型层中

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.