仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 676|回复: 8
打印 上一主题 下一主题

[学习教程] MSSQL网站制作之乐成软件开辟者的9种编程习气

[复制链接]
透明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:24:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
限制,如果WHERE子句的查询条件里有不等号(WHEREcoloum!=),MySQL将无法使用索引。类似地,如果WHERE子句的查询条件里使用了函数(WHEREDAY(column)=),MySQL也将无法使用索引。编程好的原程序做出好的软件

  有些人会想:只需程序运转了局好,就不论原程序编得如何。但相对不是如许的。软件不是一次性就作完的,有需要做修正,扩大等办理。以是原程序要只管作成易看懂,办理便利。

  如许做,第一是为了软件开辟者便利,其次还会影响到软件的功能。办理不便利的程序不会作出好的软件。

  但愿经由过程这篇文章能学到好的编程习气。要了解这文章的内容,你最少要明白1个开辟工具言语。这里举例申明的都是C言语,但你对C言语没有懂得也不要忧虑。这里申明的是道理而不是特定的言语。

1.语句要停止得完全---(分号;)

  程序员常常有的掉误之一是健忘在语句停止后加一个分号。如许的成绩点不容易发明,时而让程序员手足无措。编程时要不时注重每一个语句是不是以分号停止,固然不是一切言语都以分号停止。上面有健忘点分号的例子。

intmain(void)
{
  /*没有分号,招致成绩*/
  printf("HelloWorld!
")
  return(0);
}

  良多的人犯如许的毛病。不到几条的程序是不难发明如许的成绩,但1000条以上的程序里呢?查找那健忘写分号了的语句不会是很简单的事。记着,停止一条语句,必定要写分号,好像一样平常文章停止后点句号一样。

  另有一种关于分号的掉误是不应写分号的时分写分号。有履历的程序员看到上面例子会以为可笑,但笔者的确看到了良多如许的掉误。

/*main()前面不应写分号*/
intmain(intargc,char*argv[]);
{
  printf("HelloWorld");
  return(0);
}


函数或Method前面是不应写分号的。

2.要合适利用空格和tab键

  C言语是不分辩空格的,因而程序也能够不必要空格一向写下往,但如许的程序会是谁都看不懂的"很有难度"的程序,请看以下例子:

if(x==0){a=b=c=d=MAX;x++;}

  如许写,大概会节俭空间,但不但他人,编程的自己也会很丢脸懂。程序要写得简单看懂!

if(x==0)
{
  a=b=c=d=MAX;
  x++;
}

  如许写,看起来不很分明吗?程序要有切实的空格才简单看得懂。

3.一致利用年夜括号和割断体例

  每一个程序员利用年夜括号({})和转业的体例都有本人的习气,如许,把程序移交给他人持续做的时分,会呈现凌乱。好比象以下例子:

intmain()
{
  intx=1;
  inty=10;
  while(x<y){
    printf("Valueofxis%d
",x);
   x++;
  }
}

有些程序员会如许写年夜括号:

intmain()
{
  intx=1;
  inty=10;
  while(x<y)
  {
    printf("Valueofxis%d
",x);
    x++;
  }
}

  笔者是喜好第二种体例。由于一段语句的入手下手和停止很分明。我们不克不及请求每一个程序员都用某一种体例来编程,但一个程序里必定要一致。另有,看他人编的程序时要想到别人编程的习气大概与你分歧。

4.稳定用if语句

有些人很喜好用“if”语句,以下:

if(a==0)
{
  a++;
  return(a);
}

if(a==1)
{
  a+=5;
  return(a);
}

if(a==2)
{
  a+=10;
  return(a);
}

if(a==3)
{
  a+=20;
  return(a);
}

if(a==4)
  exit(1);

  有无比这更好的举措呢?elseif语句?不是。好的办法是用“switch-case”语句来写烦琐的程序:

switch(a)
{
  case0:a++;
    return(a);

  case1:a+=5;
    return(a);

  case2:a+=10;
    return(a);

  case3:a+=20;
    return(a);

  default:exit(1);
}

  假如没有与a分歧的值,会实行default里界说的功课,下面的例子是要实行停止。

5.稳定用程序割断(Block)

  良多人常常乱花程序割断。利用三个以上的割断是对照难以看懂的程序。请看上面例子:

inta=10;
intb=20;
intc=30;
intd=40;

if(a==10)
{
  a=a+d;
  if(b==20)
  {
    b=b+a;
    if(c!=b)
    {
      c=c+1;
      if(d>(a+b))
        printf("Madeitallthewaytothebottom!
");
    }
  }
}

  这大概是夸大了,但的确有良多人真的如许做。那怎样写得更好一点呢?一种办法是用函数来分写:

voidnext(inta,intb,intc,intd)
{
  if(c!=b)
  {
    c=c+1;
    if(d>(a+b))
      printf("Madeitallthewaytothebottom!
");
  }
}

intmain()
{
  inta=10;
  intb=20;
  intc=30;
  intd=40;

  if(a==10)
  {
    a=a+d;
    if(b==20)
    {
      b=b+a;
      next(a,b,c,d);
    }
  }
return(0);
}

  要如许写,大概会增添事情量,但程序编得布局化,简单看懂,并且假如函数做得更好,也能够在其他中央再利用。

6.写好正文

  要养成写正文的习气。出格是他人难以了解的程序或变量必定要正文,一个月后,大概你本人也必要看那正文呢。

intx=100;
inty=1000;

if(x<y)
  a=0;
else
  a=1;

  你能晓得下面的程序意味着甚么?假如不晓得变量x,y和a指的是甚么,那末很难了解。让我们给它标个正文再看吧:

/*
*检测损益的程序
*/

intx=100;
/*x是卖书的总额*/
inty=1000
/*y是做书籍的用度*/
inta;
/*确认是不是有获利*/

/*对照x和y:*/
if(x<y)
/*1指丧失*/
  a=1;
else
/*0指获利*/
  a=0;

  如许正文,不懂C言语的人也会看懂各语句意味着甚么,各变量指的是甚么。写正文是好习气,但不要甚么都正文。正文是为了好了解,不是为了写长编文章。

intprofit=1;
/*获利即是1??*/
intloss=0;
/*吃亏即是0??*/

/*假如获利即是1*/
if(profit==1)
  /*打印出“得获利啦”??*/
  printf("Wemadeaprofit!
");
/*假如不是*/
  else
  /*打印出“我们吃亏啦”*/
  printf("Wemadealoss!
");


  如许正文是华侈工夫。通常为定变量或变量值的时分必要正文,另有申明程序的目标,利用某个函数,procedule等的时分也必要。

7.起名要公道

  程序,变量,procedure,structure等名必定要跟它的内容接洽起来,变量不要起名如”x”,”y”,”z”

  大概你会说笔者在下面举的例子里也用了x,y等,可笔者如许做的来由是他不扳连到其他程序,实践开辟软件的时分,笔者固然会利用成心义的变量名。请看上面例子:

voidx(inta,intb)
{
  intz;
  z=a+b;
  printf("zis%d
",z);
}

  在这,我们能够晓得x做甚么,但不晓得它意味着甚么。a,b,z也一样。让我们略微悔改来再看吧:

voidsum_of_ages(intjacks_age,intjills_age)
{
  inttotal_age;
  total_age=jacks_age+jills_age;
  print("total_ageis%d
",total_age);
}

  固然没有正文,但简单看出来要做甚么。起名起得好,没有正文也能够。

8.确认Buffer

  要不时确认对设定的分列或变量的巨细,以免数据凌乱或招致体系出成绩。请看上面利用者输出数据的例子:charcity[10];
/*为都会称号的分列*/

printf("Enteracityname:");
scanf("%s",city);
printf("Cityis%s
",city);

  在这里,都会称号设定为10字(英笔墨)之内。假如利用者输出10字以上的都会称号会怎样呢?能够说程序失利或掩盖Buffer内里的数据。不论如何,不要做冒险的事,你要反省笔墨的长度:

charcity[10];
/*为都会称号的分列*/

printf("Enteracityname:");
fgets(city,sizeof(city),stdin);
printf("Cityis%s
",city);

  下面已修正的程序是:假如利用者输出10字以上的都会名,只承受Buffer能承受的长度为止,其外的会不承受。

9.相对不信任利用者

  这是很主要的纪律。万万不要信任将要利用你的软件的人,不要以为利用者会按你但愿的体例来操纵,反而把他们想成专门发明程序偏差的人。举例说,下面的程序就是为了那些输出都会名更长的的利用者而确认笔墨长度的。

  象C言语必要明白的数据情势的开辟工具利用者,要记着确认输出数据情势和程序数据情势是不是分歧,否则会呈现成绩。

磨刀不误砍材工

  以上的编程习气是为你本人的便利。实践编程之前,要多做筹办(剖析,计划)。固然稍贫苦,但为了编出易懂划一的程序,不要舍不得花工夫筹办,否则今后会必要更多的工夫来修正,扩大你的程序的。


目前的方案是用mysqlbinlog工具,增加一个Flashback参数,输出结果为一个新的binlog文件――姑且叫做flashbacklog,这个flashbacklog顺序执行,可制定某张表和执行到哪个pos,来实现数据库的闪回。
再现理想 该用户已被删除
沙发
发表于 2015-1-19 11:04:27 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-24 15:09:02 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
灵魂腐蚀 该用户已被删除
地板
发表于 2015-2-1 17:32:42 | 只看该作者
在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集。
蒙在股里 该用户已被删除
5#
发表于 2015-2-7 13:27:23 | 只看该作者
理解了存储结构,再阅读下性能优化的章节基本上会对sqlserver有个清晰地认识
再见西城 该用户已被删除
6#
发表于 2015-2-22 00:46:51 | 只看该作者
而SQLServer如果能像Oracle一样可以为登陆分配如:5%的cpu,10%的内存。就可以解决这个漏洞。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-6 22:31:25 | 只看该作者
很多书籍啊,不过个人认为看书太慢,还不如自己学。多做实际的东西,就会遇到很多问题,网上搜下解决问题。不断重复这个过程,在配合sql的F1功能。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-3-13 22:12:57 | 只看该作者
原来公司用过MYSQL自己也只是建个表写个SQL
冷月葬花魂 该用户已被删除
9#
发表于 2015-3-20 21:08:42 | 只看该作者
外键的级联更能扩展可能大部分的同行在设计OLTP系统的时候都不愿意建立外键,都是通过程序来控制父子数据的完整性。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表