Questions tagged «sql»

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

12
为什么人们在历史上为什么使用255而不是256来表示数据库场大小?
您经常看到数据库字段设置为255个字符,为什么是传统/历史原因?我认为这与分页/内存限制和性能有关,但是255和256之间的区别始终使我感到困惑。 varchar(255) 考虑到这是容量或大小,而不是索引器,为什么255优于256?是否为某个目的保留了一个字节(终止符或null或其他内容)? 大概varchar(0)是废话(容量为零)吗?在这种情况下,2 ^ 8的空间肯定是256? 还有其他提供性能优势的幅度吗?例如,varchar(512)的性能是否比varchar(511)或varchar(510)低? 所有新旧关系数据库的值均相同吗? 免责声明 -我不是DBA开发人员,我使用适合我的业务逻辑的字段大小和类型,但是我想知道这种偏好的历史原因,即使它不再相关(但如果仍然有用,则更多)。 编辑: 感谢您的回答,似乎有人同意使用字节来存储大小,但这在我心中并没有最终解决问题。 如果元数据(字符串长度)存储在相同的连续内存/磁盘中,则是有意义的。1个字节的元数据和255个字节的字符串数据非常适合彼此,并适合256个连续字节的存储,这大概是整齐的。 但是...如果将元数据(字符串长度)与实际的字符串数据分开存储(也许在主表中),则将字符串数据的长度限制为一个字节,只是因为更容易存储一个1字节的整数元数据似乎有点奇怪。 在这两种情况下,似乎都是很微妙的,可能取决于数据库的实现。使用255的做法似乎已经很普遍了,所以某处某人一定在一开始就为它辩护了一个很好的案例,有人能记得那个案例是/是什么吗?程序员将无缘无故地采取任何新做法,而这一定是一次新的。

4
联接顺序在SQL中重要吗?
无论性能如何,下面的查询A和B都会得到相同的结果吗?C和D呢? -- A select * from a left join b on <blahblah> left join c on <blahblan> -- B select * from a left join c on <blahblah> left join b on <blahblan> -- C select * from a join b on <blahblah> join c on <blahblan> -- D select …

4
如何在PostgreSQL中查找重复记录
我有一个名为“ user_links”的PostgreSQL数据库表,该表当前允许以下重复字段: year, user_id, sid, cid 唯一的限制是目前所谓的“ID”的第一场,但是我现在希望增加一个约束,以确保year,user_id,sid和cid都是独一无二的,但由于重复的值已存在违反此约束我不能应用约束。 有没有办法找到所有重复项?

20
将数据库从单用户模式设置为多用户
我需要设置将SINGLE_USER模式恢复为的数据库的帮助MULTI_USER。每次我跑步 ALTER DATABASE BARDABARD SET MULTI_USER; GO 我收到此错误: 目前无法更改数据库“ BARDABARD”的状态或选项。 数据库处于单用户模式,并且当前有用户连接到该数据库。 它必须处于非SINGLE_USER模式才能将其设置为另一种模式,但是当数据库处于mode时,我不能将其设置为任何其他SINGLE_USER模式。
188 sql  sql-server 

9
更改varchar列的最大长度?
我正在尝试将varchar列的长度从255个字符更新为500个而不丢失内容。我之前删除并重新创建过表,但是我从未接触过alter语句,这是我认为需要使用的语句。我在这里找到了文档:ALTER TABLE(Transfact-SQL),但是我无法做到这一点。 到目前为止,我有以下情况(不幸的是,基本上没有): alter table [progennet_dev].PROGEN.LE alter column UR_VALUE_3 我该如何处理?是否有更好的文档用于此语句(我对示例语句进行了一些搜索,但结果为空)?


4
如何更改表的默认排序规则?
create table check2(f1 varchar(20),f2 varchar(20)); 用默认排序规则创建一个表latin1_general_ci; alter table check2 collate latin1_general_cs; show full columns from check2; 将列的各个排序规则显示为“ latin1_general_ci”。 那么alter table命令的作用是什么?
187 mysql  sql  collation 


10
在MySQL查询中将时间戳转换为日期
我想将timestampMySQL中的A 转换为日期。 我想将user.registration字段格式化为文本文件yyyy-mm-dd。 这是我的SQL: $sql = requestSQL("SELECT user.email, info.name, FROM_UNIXTIME(user.registration), info.news FROM user, info WHERE user.id = info.id ", "export members"); 我还尝试了日期转换: DATE_FORMAT(user.registration, '%d/%m/%Y') DATE(user.registration) 我在写文本文件之前回显结果,然后得到: email1; name1; DATE_FORMAT(user.registration,'%d /%m /%Y');新闻1 email2; name2; news2 如何将该字段转换为日期?

3
在Postgresql中,在两列组合上强制唯一
我想在PostgreSQL中建立一个表,使得两列在一起必须是唯一的。只要没有两个共享这两个值,就可以有多个值。 例如: CREATE TABLE someTable ( id int PRIMARY KEY AUTOINCREMENT, col1 int NOT NULL, col2 int NOT NULL ) 所以,col1和col2可以重复,但不能在同一时间。因此,这将被允许(不包括ID) 1 1 1 2 2 1 2 2 但不是这个: 1 1 1 2 1 1 -- would reject this insert for violating constraints
187 sql  postgresql  unique 

20
数据库触发了邪恶吗?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心寻求指导。 8年前关闭。 数据库触发一个坏主意吗? 以我的经验,它们是邪恶的,因为它们可能导致令人惊讶的副作用,并且难以调试(尤其是当一个触发器触发另一个触发器时)。通常,开发人员甚至根本不考虑是否存在触发器。 另一方面,如果您有每次FOO在数据库中创建新逻辑时都必须发生的逻辑,则放置它的最简单方法是在FOO表上插入触发器。 我们唯一使用触发器的时间是用于设置设置等非常简单的事情ModifiedDate。
186 sql  triggers 

5
mysql ::插入表中,来自另一个表的数据?
我想知道是否有一种方法可以完全在sql中执行此操作: q1 = SELECT campaign_id, from_number, received_msg, date_received FROM `received_txts` WHERE `campaign_id` = '8'; INSERT INTO action_2_members (campaign_id, mobile, vote, vote_date) VALUES(q1.campaign_id, q1.from_number, q1.received_msg, q1.date_received); 注意: q1将返回约3万行。 有什么办法可以在直式sql中完成上述操作?要直接从一个表(基本上是原始数据表)中提取数据并插入到另一个表(基本上是已处理数据表)中?
186 sql  mysql 

4
如何在Postgresql的datetime字段中比较日期?
比较PostgreSQL中的日期(Windows中的9.2.4版)时,我一直面临一个奇怪的情况。我的表中有一列说update_date,类型为“没有时区的时间戳”。客户只能在该字段中搜索日期(即:2013-05-03)或带时间的日期(即:2013-05-03 12:20:00)。此列当前所有行的时间戳记值为值,日期部分相同(2013-05-03),但时间部分不同。 当我在本专栏进行比较时,会得到不同的结果。如下所示: select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-03' -> No results select * from table where update_date >= '2013-05-03' AND update_date < '2013-05-03' -> No results select * from table where update_date >= '2013-05-03' AND update_date <= '2013-05-04' -> results found select * …
186 sql  database  postgresql  date 

9
可以直接选择EXISTS吗?
我想知道是否可以做这样的事情(不起作用): select cast( (exists(select * from theTable where theColumn like 'theValue%') as bit) 似乎应该可行,但是许多在SQL中应该无法工作的东西;)我已经看到了解决方法(SELECT 1 where ... Exists ...),但似乎我应该能够将存在函数的结果转换为一点并完成它。
185 sql  sql-server  tsql 

11
将CSV文件导入SQL Server
我正在寻找使用导入.csv文件到SQL Server的帮助BULK INSERT,我有几个基本问​​题。 问题: CSV文件数据,之间(例如:描述)之间可能有(逗号),那么如何进行导入处理这些数据? 如果客户端从Excel创建CSV,则用逗号括起来的数据""(用双引号引起来)(如下例所示),那么导入如何处理呢? 我们如何跟踪某些行是否包含不良数据,哪些导入会跳过?(导入会跳过不可导入的行) 这是带标题的示例CSV: Name,Class,Subject,ExamDate,Mark,Description Prabhat,4,Math,2/10/2013,25,Test data for prabhat. Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test." sanjay,4,Science,,25,Test Only. 和SQL语句导入: BULK INSERT SchoolsTemp FROM 'C:\CSVData\Schools.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = ',', --CSV field delimiter ROWTERMINATOR = '\n', --Use to shift …
185 sql  sql-server  csv  bulkinsert  bulk 

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.