默认值似乎是大写的,但是否真的有任何理由要对关键字使用大写?我开始使用大写字母,因为每当我尝试创建新存储过程(例如新存储过程)时,我都试图匹配SQL Server给我的内容。但是后来,我对我的第5根婴儿的手指感到不舒服,这总是需要按住Shift按钮,因此我停止使用大写字母。我为什么要回到大写字母?
编辑:谢谢你们的答案。在COBOL为王的时候,我还没有编程,所以我没有意识到这一点。从现在开始,我将坚持使用小写字母。
默认值似乎是大写的,但是否真的有任何理由要对关键字使用大写?我开始使用大写字母,因为每当我尝试创建新存储过程(例如新存储过程)时,我都试图匹配SQL Server给我的内容。但是后来,我对我的第5根婴儿的手指感到不舒服,这总是需要按住Shift按钮,因此我停止使用大写字母。我为什么要回到大写字母?
编辑:谢谢你们的答案。在COBOL为王的时候,我还没有编程,所以我没有意识到这一点。从现在开始,我将坚持使用小写字母。
Answers:
这只是样式问题,可能起源于编辑人员不进行代码着色的时代。
我以前比较喜欢所有大写字母,但现在我倾向于所有小写字母。
SQL是旧的。大写正在喊。它看起来很奇怪并且令人讨厌。
尽管可以说是正确的,但是这些都没有解决SQL语言特有的原因,为什么大写关键字是一个很好的约定。
与许多更新的语言不同,SQL具有大量的关键字,并且依赖于读者区分关键字和标识符的能力,以便从心理上解析语法。
那么,对您的问题的直接答案是“为什么大多数现代语言都不是SQL语言的读者为什么从大写关键字中受益匪浅?”的答案:
在许多现代语言中,依靠关键字保持头脑是合理的,但对于SQL则不合理;它的关键字太多,变体太多。
对于大多数现代语言而言,依靠标点符号是合理的,但对于SQL而言则是不合理的。它的数量太少,取而代之的是取决于关键字的确切顺序来指示语法。
在通常情况下,对于现代语言而言,依靠自动荧光笔来区分关键字是合理的,但忽略了荧光笔可以为SQL实现的现实。大多数都不会涵盖SQL所有变体的所有关键字,并且无论如何,在荧光笔无济于事的情况下,SQL经常被例行读取。
这些是某些特定于SQL的原因,最好通过对关键字的大写字母进行标准化,并且仅对标识符使用不大写(即小写或混合)的字母来最好地服务于SQL代码阅读器。
突出显示有时会有所帮助。但是,仅在荧光笔知道您已经拥有SQL的情况下;而且我们经常在编辑器/格式化程序无法合理地知道它正在处理SQL的情况下使用SQL。示例包括内联查询,程序员文档以及另一种语言代码内的文本字符串。对于像Python或C ++这样的语言来说,情况并非如此。是的,它们的代码有时确实会出现在那些地方,但通常不会像使用SQL代码那样常规地完成。
此外,读者通常会使用荧光笔,该荧光笔仅知道您的特定SQL实现所使用的关键字的子集。除了那些非常了解您的SQL变体的关键字以外,许多不常用的关键字都不会突出显示。因此,即使读者使用荧光笔,他们仍然需要一些更直接的方法来区分任何中等复杂的SQL语句中的关键字。
因此,读者经常会(而且写者无法提前知道何时会发生)需要SQL语句本身的内容的帮助,以了解作者作为关键字的意图和标识符的意图。因此,SQL内容本身需要为读者区分关键字,而使用大写关键字是这样做的常规且有用的方法。
戈登·贝尔的例子并不完全正确。通常,仅突出显示关键字,而不突出显示整个查询。他的第二个示例如下所示:
SELECT name, id, xtype, uid, info, status,
base_schema_ver, replinfo, parent_obj, crdate,
ftcatid, schema_ver, stats_schema_ver, type,
userstat, sysstat, indexdel, refdate, version,
deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
WHERE category = 0
AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1
我发现这很容易理解,因为关键字更加突出。即使语法高亮显示,我仍然发现不大写的示例更难以阅读。
在我的公司,我们在SQL格式方面走得更远。
SELECT name, id, xtype, uid, info, status,
base_schema_ver, replinfo, parent_obj, crdate,
ftcatid, schema_ver, stats_schema_ver, type,
userstat, sysstat, indexdel, refdate, version,
deltrig, instrig, updtrig, seltrig, category, cache
FROM sysobjects
LEFT JOIN systhingies ON
sysobjects.col1=systhingies.col2
WHERE category = 0
AND xtype IN ('U', 'P', 'FN', 'IF', 'TF')
ORDER BY 1
在我们阅读的文字中,少于10%的字母是大写的。因此,我们的大脑比大写字母更热衷于识别小写字母。研究表明,阅读大写文本需要更长的时间。这只是一个例子:
http://www.guardian.co.uk/media/mind-your-language/2010/oct/04/new-york-street-signs-capitals
我认为上面的示例强调,即使您只谈论一个或两个单词,也会有所作为。
cast
,rank
我小写。
这是因为SQL是一种古老的语言(1974年),以至于在构思时,大多数键盘都没有小写字母!语言文档只是反映了当时的技术。
研究证明,ALL CAPS较难阅读,以至于美国联邦公路管理局在其《统一交通控制设备手册》中要求使用混合大小写标志,其中指出:
常规路标上的地方,街道和高速公路名称的字母应由小写字母和大写字母组成。
纽约邮报还发表了:
研究表明,很难阅读所有大写字母的标志,并且已经证明,花在离开道路上的额外毫秒时间会增加发生事故的可能性,尤其是在年纪较大的驾驶员中。
没有充分的理由使用大写字母,也没有理由。
我个人不喜欢使用大写的SQL关键字。我发现在这个时代,阅读和荒诞变得更加困难。
SQL语言被定义为不区分大小写。将手指移开该切换键!
大写可以提高关键字的可见度,但是您可以补偿代码突出显示和缩进。
我们使用小写字母,因为查询编辑器和其他工具在编辑t-sql代码方面确实令人惊奇,并且我们认为无需折磨小指。
大写字母不太可读。所有单词的轮廓都像盒子一样。没有子孙或子孙。小写FTW!
除了出于一致性的考虑,没有。尽管这是一个非常主观的主题,但我更喜欢对所有SQL使用混合大小写。SQL易于阅读,在现代IDE中,关键字始终使用颜色进行编码,因此不会丢失任何内容。
我不喜欢用大写字母写的任何东西(更讨厌打字用大写字母写),但无法说服自己与社区背道而驰。像往常一样,Vim及其关联的软件包是解决许多问题的解决方案:
http://www.vim.org/scripts/script.php?script_id=305
只需正常输入即可在输入时自动将关键字大写。我还没有使用过所有晦涩的SQL技巧,但是它并没有使我失望。
我从PHP调用了大部分mySQL代码,并在vim中进行了所有PHP编辑(或者在这种情况下,我想是VIM ;-)。现在,我确定有一些插件可以突出显示PHP中的mySQL代码,但我没有找到它,也不必花时间去寻找它。因此,我更喜欢所有内容。我发现:
if ( !$bla )
{
echo "select something from something where something";
}
if ( !$beepboop )
{
echo "create table if not exists loremIpsum;
}
$query = "
CREATE TABLE IF NOT EXISTS HISTORY
(
ID INT NOT NULL AUTO_INCREMENT,
INSERTDATE TIMESTAMP DEFAULT NOW(),
ALTERDATE TIMESTAMP(8) DEFAULT NOW(),
DELETEDATE TIMESTAMP(8),
ALTERCOUNT INT DEFAULT 0,
SELECTCOUNT INT DEFAULT 0,
PRIMARY KEY(ID),
)ENGINE=InnoDB
";
mysqlQuery( $query, $con );
可以帮助我更好地区分PHP和SQL:
if ( !$bla )
{
echo "select something from something where something";
}
if ( !$beepboop )
{
echo "create table if not exists loremIpsum;
}
$query = "
create table if not exists history
(
id int not null auto_increment,
insertdate timestamp default now(),
alterdate timestamp(8) default now(),
deletedate timestamp(8),
altercount int default 0,
selectcount int default 0,
primary key(id),
)engine=InnoDB
";
mysqlQuery( $query, $con );
另外,由于某种原因,我讨厌将大写字母与驼峰式案例混合在一起,例如:
CREATE TABLE IF NOT EXISTS history
(
ID INT NOT NULL AUTO_INCREMENT,
insertDate TIMESTAMP DEFAULT NOW(),
alterDate TIMESTAMP(8) DEFAULT NOW(),
deleteDate TIMESTAMP(8),
alterCount INT DEFAULT 0,
selectCount INT DEFAULT 0,
PRIMARY KEY(ID),
)ENGINE=InnoDB
这ID
让我很生气。应该是id
吗?还是iD
?
all_lower_case
。