#include   <sys/types.h>
#include   <unistd.h>
#include   <stdlib.h>
#include   <stdio.h>
int   main()
{
       FILE   *stream;
       stream=popen("ps aux|grep rpc","r");
       char   buf[4096];
       fread(buf,sizeof(char),4096,stream);
       printf("%s",buf);
}




#include "stdio.h"
int main()
{
char a[256];
system("ps axu|grep httpd>a.txt");
printf("%c",a);
return 0;
}
. 设置crontab文件,并用它来提交作业
. 使用at命令来提交作业
. 在后台提交作业
. 使用nohup命令提交作业

cron 系统调度进程,使用它在每天得非高峰负荷时间段运行作业,或者在一周或一月中得不同时段运行
at命令,在特定时间运行一些特殊作业
& 使用它在后台运行一个占用时间不长得进程
Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
3.1 cron和crontab
cron 是系统得调度进程,在无需人工干预得情况下运行作业。
crontab命令允许用户提交,编辑或者删除相应得作业。每个用户都有一个crontab文件来保存调度信息,
3.1.1 crontab的域
 第1列  分钟1~59
 第2列   小时1~23
 第3列   日1-31
 第4列   月1~12
 第5列   星期0~6
 第6列   要运行的命令
3.1.2 条目举例
 30 21 * * * /apps/bin/clearnup.sh
 每晚的21:30运行/apps/bin目录下的cleanup.sh
 45 4 1,10,22 * * /apps/bin/backup.sh
 每月的1,20,22号的4:45执行/apps/bin 目录下的 backup.sh
 
 10 1 * * 6,0 /bin/find -name "core" rm {} \;
 每个星期六。日1:10运行一个find 命令
 0,30 18-23 * * * /apps/bin/dbcheck.sh
 每天在18:00~23:00每隔30分钟执行/apps/bin目录下的dbcheck.sh
 0 23 * * 6 /apps/bin/qtrend.sh
 每周六的23:00执行/apps/bin/qtrend.sh
3.1.3 crontab的命令选项
 crontab [-u user] -e -l -r
 -u 用户名
 -e 编辑crontab文件
 -l 列出crontab文件的内容
 -r 删除crontab文件
3.1.4 创建一个crontab文件
     crontab faintbearcron
3.1.5 列出crontab文件
     crontab -l
     crontab -l >$HOME/faintbearcron
     (备份)
3.1.6 编辑crontab文件
     crontab -e
3.1.7 删除crontab文件
     crontab -r
3.1.8 恢复丢失的crontab文件
     crontab <filename>
     其中<filename>就是你在$HOME目录中的副本的文件名
二维数组可以看作是由两个一维数组(一个指针数组,一个基本型别的数组)嵌套而成;  
二维数组可以看作是由两个一维数组(一个指针数组,一个基本型别的数组)嵌套而成;  
比如a[10][10];  
其中a是一个数组,他的每个元素(a[i])(0<=i<10)又是一个数组,如a[i]就是一个数组,它的每个元素为a[i][j](0<=j<10);  
其实2维数组中*a就是表示a[0];  

    实际上在内存中只存在一维数组,它只是在语言这一层次上用二维的方式呈现给语言的使用者。  
  其实二维数组和一维数组差不多,  
  一维数组中a[i]与*等同,都指的是值;  
  二维数组中a[i][j]可分为两部分,a[i]代表指向第i行的指针,也就是第i行的首地址;  
  a[i][j]代表第i行的第j个元素
#include <stdio.h>
int main()
{
        int i;
        float a[9]={0,1,2,3,4,5,6,7,8};
        float *p=(float*)malloc(9*sizeof(float));

        for(i=0;i<9;i++)
        {
        scanf("%f",p+i);
        }


        for(i=0;i<9;i++)
        {
        printf("p==%f\n",*(p+i));
        }



}



动态分配内存并填充里面的内容:
[codes=php]
#include <stdlib.h>
#include <stdio.h>
int main()
{
       int i,j;
       int *p[300];
       printf("len of int=%d\n",sizeof(int));
       for(i=0;i<300;i++){
          p[i]=(int *)malloc(262013*sizeof(int));
          for(j=0;j<262013;j++){
             *(p[i]+j)=1;
             //sleep(1);
             //printf("p=%d\n",*(p[i]+j));
          }
          //sleep(0.1);
       }

       printf("End...\n");
       while(1){
         sleep(1);
       }
}
[/codes]

make malloc
cc     malloc.c   -o malloc

./malloc

watch -n 2 ps -opid,ppid,rss,vsz,cmd -C malloc                                                                                                          Mon Sep  2 17:17:11 2019

  PID  PPID   RSS    VSZ CMD
  880 30676 45888  49320 ./malloc
经查实核对,上面的RSS是kb,想要看到M,则要45888/1024=44M ,
244667 ==>280M
61166 ==> 70M
42816 ==> 49.57M     (共享内存SO动态链接库占用)为何是50M,是300个数组指针,42816*4*300/1024=50.175
256896 ==>294M
262013 ==>300.42M   (主进程)


引入了动态链接库在RSS,VSZ上的一个系统不一致研究并查看前的动态链接库的编译基础原理链接,
[实践OK]Linux如何解决动态库的版本控制, Linux如何解决动态库的版本控制,C语言HelloWorld示例,readelf -d libhello.so.0.0.0 |grep SONAME。
[url=https://jackxiang.com/post/7717/]https://jackxiang.com/post/7717/[/url]





整型点几个字节的问题决定上面能使用多少M的内存:
[codes=php]
#include<stdio.h>
   main()
  {
     char a;
     char* b;
     short int c;
     int d;
     unsigned int e;
     float f;
    double g;
    long h;
    long long i;
    unsigned long j;

    printf("char a=%d\n",(int)sizeof(a));
    printf("char*b=%d\n",(int)sizeof(b));
    printf("short int c=%d\n",(int)sizeof(c));
    printf("int d=%d\n",(int)sizeof(d));
    printf("unsigned int e=%d\n",(int)sizeof(e));
    printf("float f=%d\n",(int)sizeof(f));
    printf("double g=%d\n",(int)sizeof(g));
    printf("long h=%d\n",(int)sizeof(h));
    printf("long long i=%d\n",(int)sizeof(i));
    printf("unsiged long j=%d\n",(int)sizeof(j));
  }

[/codes]

make int
./int
char a=1
char*b=8
short int c=2
int d=4
unsigned int e=4
float f=4
double g=8
long h=8
long long i=8
unsiged long j=8


来自:https://www.cnblogs.com/TGSB/p/4824246.html


[url=https://www.wntool.com/filesize/]https://www.wntool.com/filesize/[/url]里得出:
整型变量中,上面得出的1个整型有4个字节(byte),也就是4个byte的类型据上面查出有( 8 )位bit。
1M=1048576个Byte,1048576/4=262144是小B,得乘以8=8388608 .


dmesg | grep oom
[   91.458107] stress-ng (10288): /proc/10288/oom_adj is deprecated, please use /proc/10288/oom_score_adj instead.

dmesg | less -I



用pmap -x pid查看:
pidof main
1589

pmap -x 1589

pmap -x 1589
1589:   ./main
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000       4       4       0 r-x-- main
0000000000600000       4       4       4 r---- main
0000000000601000       4       4       4 rw--- main
00007f79c04da000  355752  355752  355752 rw---   [ anon ]
00007f79d6044000    1804     276       0 r-x-- libc-2.17.so
00007f79d6207000    2044       0       0 ----- libc-2.17.so
00007f79d6406000      16      16      16 r---- libc-2.17.so
00007f79d640a000       8       8       8 rw--- libc-2.17.so
00007f79d640c000      20      12      12 rw---   [ anon ]
00007f79d6411000       4       4       0 r-x-- libhello.so.0.0.0
00007f79d6412000    2044       0       0 ----- libhello.so.0.0.0
00007f79d6611000       4       4       4 r---- libhello.so.0.0.0
00007f79d6612000       4       4       4 rw--- libhello.so.0.0.0
00007f79d6613000     136     108       0 r-x-- ld-2.17.so
00007f79d6658000    1860    1860    1860 rw---   [ anon ]
00007f79d6832000       8       8       8 rw---   [ anon ]
00007f79d6834000       4       4       4 r---- ld-2.17.so
00007f79d6835000       4       4       4 rw--- ld-2.17.so
00007f79d6836000       4       4       4 rw---   [ anon ]
00007fff427ad000    1156      12      12 rw---   [ stack ]
00007fff429e3000       8       4       0 r-x--   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- -------
total kB          364896  358092  357696







[img]attachment/%e6%9c%aa%e5%91%bd%e5%90%8d.bmp[/img]#include <stdio.h>
main()
{
int i=0,j=0;
float a[3][3]={0,1,2,3,4,5,6,7,8};

printf("&a[0]=%p\n",a[0]);
printf("&a[1]=%p\n",a[1]);
printf("&a[2]=%p\n\n",a[2]);


printf("&a[0][0]=%p\n",&a[0][0]);
printf("&a[1][0]=%p\n",&a[1][0]);
printf("&a[2][0]=%p\n",&a[2][0]);
printf("&a[2][2]=%p\n",&a[2][2]);

printf("\n&a[0]+1=%p\n",a[0]+1);
printf("&a[1]+1=%p\n",a[1]+1);

for(i=0;i<3;i++)
{

 for(j=0;j<3;j++)
 {
 
   printf("\na[%d][%d]=%p\t",i,j,&a[i][j]);

 }

}

for(i=0;i<3;i++)
{
printf("\na+%d=%p\n\n",i,a+i);
}


//printf("%f\n",*(a[1]+2));


printf("sizeof:a[0]==%d\n",sizeof(a[0]));
printf("sizeof:a[1]==%d\n",sizeof(a[1]));
printf("sizeof:a[2]==%d\n",sizeof(a[2]));

printf("\nsizeof a = %d\n",sizeof(a));


for(i=0;i<3;i++)
{
printf("\n&(a[0]+%d)=%p\n",i,a[0]+i);
}

for(i=0;i<3;i++)
{
printf("\n&(a[1]+%d)=%p\n",i,a[1]+i);
}

for(i=0;i<3;i++)
{
printf("\n&(a[2]+%d)=%p\n",i,a[2]+i);
}


printf("\n&a+0=%p\n",a+0);
printf("\n&a+1=%p\n",a+1);
printf("\n&a+2=%p\n",a+2);
printf("&(a[1]+2)=%p\n",a[1]+2);
printf("\na[1]+2=%f\n",*(a[1]+2));
printf("&(a+1)=%p\n",a+1);
printf("a+1=%f\n",*(a+1));




}




float a[3][3]={0,1,2,3,4,5,6,7,8};
&a[0]=0xbfbfeac0
&a[1]=0xbfbfeacc
&a[2]=0xbfbfead8

&a[0][0]=0xbfbfeac0
&a[1][0]=0xbfbfeacc
&a[2][0]=0xbfbfead8
&a[2][2]=0xbfbfeae0



a[0][0]=0xbfbfeac0
a[0][1]=0xbfbfeac4
a[0][2]=0xbfbfeac8
a[1][0]=0xbfbfeacc
a[1][1]=0xbfbfead0
a[1][2]=0xbfbfead4
a[2][0]=0xbfbfead8
a[2][1]=0xbfbfeadc
a[2][2]=0xbfbfeae0


a+0=0xbfbfeac0
a+1=0xbfbfeacc
a+2=0xbfbfead8

sizeof a = 36
sizeof:a[0]==12
sizeof:a[1]==12
sizeof:a[2]==12

&(a[0]+0)=0xbfbfeac0

&(a[0]+1)=0xbfbfeac4

&(a[0]+2)=0xbfbfeac8

&(a[1]+0)=0xbfbfeacc

&(a[1]+1)=0xbfbfead0

&(a[1]+2)=0xbfbfead4

&(a[2]+0)=0xbfbfead8

&(a[2]+1)=0xbfbfeadc

&(a[2]+2)=0xbfbfeae0

&a+0=0xbfbfeac0
&a+1=0xbfbfeacc
&a+2=0xbfbfead8

&(a[1]+2)=0xbfbfead4
a[1]+2=5.000000
&(a+1)=0xbfbfeacc
a+1=5.000003



一些c 常见技巧
                                     
/*砍掉字符串中所有空格*/
void CUT_ALL_SPC(char *s)
{
int i,n;
char d[10000];
n=0;
for(i=0;i
if(s[i]!=32)
{
d[n]=s[i];
n++;
}
d[n]=0;
strcpy(s,d);
}

/*砍掉字符串左边空格*/
void CUT_LEFT_SPACE(char *s)
{
int i,j,k=0;
i=strlen(s)+1;
for(j=0;j
for(k=0;j
}


/*砍掉字符串右边空格*/
void CUT_RIGHT_SPACE(char *s)
{
int i,j;
i=strlen(s)-1;
for(j=i;j>-1;j--) if (s[j]!=' ') break;
s[j+1]=0;
}

/*获取机器日期*/
int DATE(char *s,char type)
{
char dat[30];
int num;
struct tm *tblock;
time_t t;
t=time(NULL);
tblock=localtime(&t);
strcpy(dt,asctime(tblock));
strcpy(s,"");
switch(type)
{
case 'N':
num=(*tblock).tm_year+1900;
itoa(num,s,10);
break;
case 'Y':
num=(*tblock).tm_mon+1;
itoa(num,s,10);
break;
case 'R':
num=(*tblock).tm_mday;
itoa(num,s,10);
break;
case 'S':
strcpy(dt,asctime(tblock));
MID(s,dt,12,8);
break;
}
}
return num;
}

/*成批拷贝文件*/
int CopyFile(char *sfile,char *dfile,int f2d,int barlong,int height,int x,int y)
{
int Copyfile(char *sf,char *df);
int MakeNdir(char *Dir);
char filename[200][13],d[40],s[40],s1[40];
struct ffblk ffblk;
int done,i,j,l,len;
i=0;
done=findfirst(sfile,&ffblk,0);
if (!done) strcpy(filename[i],ffblk.ff_name);
while(!done)
{
done=findnext(&ffblk);
if (!done)
{
i++;
strcpy(filename[i],ffblk.ff_name);
}
}
if (f2d)
{
Copyfile(sfile,dfile);
return 1;
}
strcpy(s,sfile);
l=strlen(sfile);
for(j=l-1;j>=0;j--)
if (s[j]=='')
{
s[j+1]=0;
break;
}

/*拷贝一个文件*/
int Copyfile(char *sf,char *df)
{
FILE *in,*out;
char ch;
in=0;
out=0;
if ((in=fopen(sf,"rb"))==NULL)
exit(0);
if ((out=fopen(df,"wb"))==NULL)
exit(0);
while(!feof(in))
{
ch=fgetc(in);
if (ferror(in)) return 0;
fputc(ch,out);
if (ferror(out)) return 0;
}
fclose(in);
fclose(out);
return 1;
}

/*建立目录*/
int MakeNdir(char *Dir)
{
int i,l,j;
char s[10][40];
j=0;
l=strlen(Dir);
for(i=0;i
if (Dir[i]=='')
{
LEFT(s[j],Dir,i);
j++;
}
strcpy(s[j],Dir);
for(i=0;i<=j;i++)
if (access(s[i],0)) mkdir(s[i]);
return 1;
}

/*得到目录*/
int GetDir(char *dirF,char dataK[][14])
{
struct ffblk ffblk;
int done;
int i;
i=0;
done=findfirst(dirF,&ffblk,FA_DIREC);
while(!done)
{
if (ffblk.ff_attrib==16||ffblk.ff_attrib==17)
{
strcpy(dataK[i],ffblk.ff_name);
strcat(dataK[i],"");
i++;
}
done=findnext(&ffblk);
}
return i;
}

/*得到文件名*/
int GetFile(char *dirF,char dataK[][14])
{
struct ffblk ffblk;
int done;
int i;
i=0;
done=findfirst(dirF,&ffblk,0);
while(!done)
{
strcpy(dataK[i],ffblk.ff_name);
done=findnext(&ffblk);
i++;
}
return i;
}


一 家用高性价比标准配置 平台AMD!!

1.CPU:AMD Athlon64 X2 4000+ AM2(65纳米/盒)

参考价格:465

入选原因:1.几乎没有假盒,因为散装4000+单加杂牌风扇还要2次包装之后利润几乎是0。

2.体制好,配合一般的主板,在不加风冷和电压的情况下几乎全都能稳定超到4800+使用,而且相当稳定。相当于花465元买到了价值710的产品。


2.主板:捷波 悍马HA02-GT

参考价格:580

入选原因: 1.采用的是570x的主芯片组,做工精良。配合4000+稳定的运行在4800+甚至更高。配合AMD的CPU和ATi的显卡组成传说中的3A. 兼容性现在以不是问题,但这样的组合更给人自信。570X的芯片组也是现在组建A平台的最佳主流选择。

2.现在的570x的主板几乎都是捷波的代工,虽然这款是价格最高的,但是毫无疑问也是性能最稳定,做工最奢华的。我自己用的是盈通的A570X,其实就是这款主板的简化版,只是简化了一个供电和散热 ,但价格便宜了180。稳超4800+!

3.显卡:蓝宝石 X1950GT黄金版

参考价格:790

入选原因:显卡这一块,确实很难选择,但是考虑到整机的价位水准和使用性的话,我还是给大家推荐1950GT.目前所有的DX9.0游戏1950GT都能给大家一个满意的成绩。而且这个价格也是相当到位。蓝宝石这个牌子在论坛里的口碑更不用说。

4.硬盘:希捷 160G 7200.10 8M(串口/5年盒)

参考价格:465

入选理由:大家共同的选择,虽然希捷硬盘的价格偏贵,但是毕竟是5年的质保,也算给大家一个心理安慰吧。我自己用的是日立的,这里还是给大家推荐了希捷,为什么?因为这是论坛里面大多数人的选择,少数服从多数的选择。160G硬盘对家用来说已经足够了,配合刻录机使用,我个人觉得更大的硬盘完全没有必要。80G的话,现在来说,确实有点落伍了,不是么?

5.内存:Kingmax 1GB DDR2 800 Long-DIMM

Kingmax 1GB DDR2 800 Long-DIMM

参考价格:185+185=370

入选理由:最可靠,最便宜的800内存之一。2G双通道轻松对应现在的各种电脑使用环境。

其实667也是很好的选择,我在这里推荐800是因为以后的延续性更好,而且这个价位,确实也不贵。

6.机箱:新战线新灵830

参考价格:185

入选理由:机箱这个东东,大家各有所爱,但是这款机箱确实是相同价位中,做工最扎实!设计最精良!价格最便宜!最人性化的。很像品牌机的机箱,模样中规中矩。本人使用的就是这个,怎么说也是在中关村转了一天之后的选择。所以特别推荐给大家。

7.电源:航嘉 磐石400

参考价格:280

入选理由:额定功率350w,最大输出450w。配合以上推荐的配置,游刃有余。可以完全发挥出个配件的性能,稳定,安静,可靠。航嘉长城这些电源的口碑还是很好的,在论坛里面的选择也是最多的。

3.DVD LG GSA-H55L

参考价格:280

入选理由:DVD刻录的选择很多,这个还可以,带光雕。


整体价格:3415左右!

配合22寸/24寸液晶显示器,家用经典大众主流电脑。以上配件稳定,可靠,没有任何兼容问题,没有任何使用中的瓶颈。还可以适当超频(4000+到4800+稳定)。性价比高。当然,很多配件朋友们还可以找到更便宜的代替,我自己也是这样做的,但是以上配置绝对是今年论坛里面最经典的一套。

整理一下
CPU P4 620 1200元
RAM DDR2 533 kingston/kingmax 512M 300元
HardDisk 160G SATA 500元
VideoCard 双敏7058 Turbo 699元
MotherBoard ASUS P5PL2 999元
Monitor samsung or viewsonic 1040
DVD-ROM 190元 or DVD-RW 399元
其他 300元
总价5200元左右吧,虽然比很多人期望的5000元的价格贵了200元,但是,你在使用的时候却远远不是这500元可以买到的,东西虽贵,但是值得。最后就是装机的时候要祝你好运
===============================================================
还有个`设计的话CPU最好用Intel 游戏最好用AMD
显示器 明基 FP71G+s  1980元 示器主色为银色,响应时间为8ms,具备DVI数字接口,显示效果不错
显示器 三星710N 12ms 2200元 (17寸液晶显示器)
光驱 BenQ 1650V  180元  
音箱  慧海 乐吧D-102  150元 慧海的音箱更是使整套配置充满了时尚的气息,再搭配一台轻薄的17寸液晶显示器,更体现出了机主MM的简洁、大方。 
漫步者 R101T06
  机箱  永阳YY-A209  250元(挺漂亮的)
鼠标、键盘 三星anypro 水系套装(水晶键+水之灵动)  120元
  罗技 光电高手800套装

整机主要以白色和银色为主,既美观,又不会造成颜色的巨大反差。
美观虽然很重要,但可不能作为选择的唯一参考,一定要在权衡了性能、价格、质量后再决定选购,切勿为了美观牺牲了性能。
cpu和内在的东西一定要强悍。。。思考中。。
内存:金士顿 800 1G   RAM DDR2 533 kingston/kingmax 512M 300元

4.硬盘:希捷 160G 7200.10 8M(串口/5年盒)

参考价格:465

入选理由:大家共同的选择,虽然希捷硬盘的价格偏贵,但是毕竟是5年的质保,也算给大家一个心理安慰吧。我自己用的是日立的,这里还是给大家推荐了希捷,为什么?因为这是论坛里面大多数人的选择,少数服从多数的选择。160G硬盘对家用来说已经足够了,配合刻录机使用,我个人觉得更大的硬盘完全没有必要。80G的话,现在来说,确实有点落伍了,不是么?

5.内存:Kingmax 1GB DDR2 800 Long-DIMM

Kingmax 1GB DDR2 800 Long-DIMM

参考价格:185+185=370

入选理由:最可靠,最便宜的800内存之一。2G双通道轻松对应现在的各种电脑使用环境。


硬盘:西捷160G   HardDisk 160G SATA 500元
MotherBoard ASUS P5PL2 999元
1.CPU P4 620 1200元    
2.CPU:AMD Athlon64 X2 4000+ AM2(65纳米/盒)  
入选原因:
1.几乎没有假盒,因为散装4000+单加杂牌风扇还要2次包装之后利润几乎是0。

2.体制好,配合一般的主板,在不加风冷和电压的情况下几乎全都能稳定超到4800+使用,而且相当稳定。相当于花465元买到了价值710的产品。

电源:航嘉 磐石400参考价格:280
电源长城350的+机箱240元左右



入选理由:额定功率350w,最大输出450w。配合以上推荐的配置,游刃有余。可以完全发挥出个配件的性能,稳定,安静,可靠。航嘉长城这些电源的口碑还是很好的,在论坛里面的选择也是最多的。


DVD-ROM 190元 or DVD-RW 399元

显卡7900/8600/8800系列的有钱就买8800

======================================================================

  华硕945P主板型号为P5LD2 SE,采用Intel 945P+ICH7芯片组,不仅支持1066MHz的前端总线,同时还支持新一代65nm制程的单、双核CPU以及EM64T、EIST、Hyper-Threading等新技术。供电部分,采用三相供电设计,搭配品质过硬的松下电容,提供了良好的稳定性。扩展部分,主板提供了主流的一个PCI-E X16、两个PCI-E 1X、三个传统的PCI插槽。内存方面,主板具备四根可支持DDR2 667的内存插槽,最大容量可扩充至4G,足以应付日常使用。另外,主板集成千兆网卡以及5.1声道声卡。

编辑点评:

  虽然此款主板在这5款主板中是最贵的,基本已经达到945系列主板的价格顶峰,基本同965系列的二线主板一个价位,但华硕主板的品质在广大消费支心中还是有一定影响力的。且这款主板的规格确实是相当高。对于800多元的价格还是说得过去的。

总结

  P965与945之争早已由价格决定,价格又决定了其产品规格。如果您不是需要8个以上的USB口,更多的SATA接口,千兆网卡……,本着够用的就好的经济原则,选一片性能稳定的945主板搭建双核平台又有什么不可以的呢。


机箱  永阳YY-A209  250元
Kingmax 1GB DDR2 800 Long-DIMM  参考价格:185+185=370  2G双通道
硬盘:西捷160G   HardDisk 160G SATA 500元
系列型号:Core 2 Duo(酷睿2)  1220元
电源长城350   150 元
华硕主板945p  P5LD2 SE 豪华版本 700元
明基 FP94VW 1949元
鼠标、键盘 三星anypro 水系套装(水晶键+水之灵动)  120元

机箱:永阳YY-A209  价格:250元; 内存:Kingmax 1GB DDR2 800 Long-DIMM  价格:185+185=370  组2G双通道;硬盘:西捷160G   HardDisk 160G SATA 500元 cpu:Core 2 Duo(酷睿e6300)  1220元;电源:长城350   150 元; 主板:华硕主板945p  P5LD2 SE 豪华版本 700元 液显:明基 FP94VW 1949元  鼠标、键盘 三星anypro 水系套装(水晶键+水之灵动)  120元 光驱:BenQ 1650V  180元 合计(5439)







如果安装了securetCRT那么有一个好东西,
/usr/ports/comms/zmtx-zmrx
安装后,zmtx是用来发送文件,zmrx是用来接收文件 的。“接收”和“发送”是相对于FreeBSD的那台机器来说的。


出现没有那个目录,是没有安装Port:
root@iZ25z0ugwgtZ:~ # cd /usr/ports/comms/zm
/usr/ports/comms/ not found

root@iZ25z0ugwgtZ:~ # cd /usr/ports/comms/
/usr/ports/comms/: No such file or directory.
————————————————————————————————————————————————————
FreeBSD系统的一个非常方便的地方就是它的ports,如果系统没安装ports的话可用下面几种方式安装ports:

1、sysinstall--->configure----->distributions----->ports----->选择Ftp或其它的网络连接即可。

2、直接从官方站点下载ports.tar.gz再解压,这样很快。位置:ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/parts.tar.gz

3、如果是FreeBSD6。0,那么运行:
    #portsnap fetch
    #portsnap extract
    #portsnap update

另外:
更新ports后,如果运行make search name=xxx不成功,请在/usr/ports下运行make fetchindex。

摘自:http://www.jb51.net/os/Unix/1484.html

————————————————————————————————————————————————————
root@iZ25z0ugwgtZ:~ # sysinstall
sysinstall: Command not found.
现在的freebsd 10已经没有了sysinstall 的命令了,已经换成bsdinstall 这个安装命令,和bsdconfig配置的这两个命令了,你要装mpd5可以用ports来安装
whereis mpd5
cd /usr/ports/net/mpd5
make fetch-recursive
make config-recursive
make install clean
这样就装上去了,然后就是修改配置文件,设定开机启动
转自IT168 觉得对框架的认识和定位很有帮助,虽然讲的不是php,但是思想是一致的。


1 空前繁荣的开源世界
  大致2000年以前,Java世界还是Sun一言九鼎,唯我独尊的时代。Sun发布的任何规范和标准都无一例外地被Java社区有意无意的追捧着,Java世界沉浸在一片歌功颂德,前拥后簇的氛围里。IBM,Bea,Oracle这些Java阵营的代表者也都为能最先最快实现Sun的各种规范而弹冠相庆。
  但这三四年来,Java的列车驶进了春秋战国百家争鸣,百花齐放的时代, Apache,JBoss,opensymphony,Eclipse,Codehaus等开源组织个个门庭若市,车水马龙。Java世界似乎天天在过年——张灯结彩,新桃换旧符。打开theserverside.com网站,每天映入眼帘是一条条各种开源项目发布、升级的新闻。虽然嘈杂了些,但却异彩纷呈,惊艳四座。在Java世界里,十室之内必有隐士,十步之内必有芳草,有才华的程序员太多了,抑或怀才的程序员被独裁式的统治压抑太久了,一旦找到了海德公园,庞涓、孙膑、苏秦、张仪式的高手纷纷走出隐居的鬼谷,在开源舞台上劲舞一支,高歌一曲,用一个个开源项目彰显着自己独特的魅力。
  从客户端到数据库,从页面流程控制到业务流程控制,从全文搜索到地图搜索,从论坛到博客,在各种应用领域你都可以方便地找到多个相似的Java开源框架。开源框架的空前繁荣有力的促进了Java技术的交流和分享。一些面向开源的社区,论坛纷纷建立,国内比较著名的就有满江红开源论坛、中文Spring论坛、JavaScud开源平台、JavaEye社区等,宣讲、争论、协作、互动,无数激情和智慧碰撞出耀眼的火花。
  随着开源项目的日益增多,国内甚至出现了象open-open.com Java开源大全的汇总整理网站,它如一个开源项目的大集市,将开源项目分类整理,提供简要的描述说明信息,方便使用者了解、查询和比较。
  开源项目的繁荣还为技术图书业创造了机会,不管是国外的Amazon,还是china-pub或dearbook,开源框架或产品的技术图书,如Spring,Hibernate,Struts,Eclipse等等都成为荣登榜首的畅销先锋。
  这场几乎来源于民间的开源飓风给开发者和CTO们的思路和决策带来了巨大的影响,据Bea的调查,全球排名前2000家软件开发公司中有70%以上在使用一种或多种开源框架——多达28%的公司在开发环境中使用了一种以上的应用服务器。
  同时开源也给走传统路线的Java巨头们带来战略性的影响:Sun去年宣布将其旗舰产品——Solaris开源;去年IBM向第三方厂商开放了其高性能通用并行文件系统(GPFS)的源代码;Unisys也改变企业战略定位投入开源怀抱等等不胜枚举,它们纷纷将营利模式从原来的产品销售调整为支持与服务。

  2 开源框架带来的烦恼
  虽然开源的框架、类库越来越丰富,可供选择的替代者越来越多,但Java程序员却感觉自己慢慢陷入到了技术的漩涡之中:因为他们发现只要一段时间不关注开源社区,就有潮水般陌生的技术框架、专业术语、英文缩略词挟裹着一团团亢奋的热浪将自己淹没,让他们觉得随时都有被Java世界抛弃的危险。许多年纪稍大的程序员甚至觉得职位转换,甩掉技术干管理已经时不我待。

  选择的困惑
  雨后春笋般涌现的开源框架都声称自己是最好的,有过多次因盲从于技术鼓吹而失望伤心的经历后,现在的开发者都变得成熟理智了,他们不会轻易相信某个框架自身的承诺,不会轻易附和他人的宣传,这确实是件好事。为了作出理智的选择,他们往往要自己亲自摸索以做出评判。
  有时,我们会发现向上司推荐一个框架已经变成一件困难的事情,因为上司会冒出各种各样的问题:如Webwork比Struts好在哪里?Hibernate和iBatis有什么区别?OpenWFE比之jBpm有什么优势等等。所以要确定一个框架时,往往需要将相似的框架都研究一遍,以便有充足的理由让上司相信我们的选择是最优的。
  但是,要将同类的框架都做一次研究并比较优劣并非易事,如开源工作流引擎就有Willow,OpenWFE,jBpm,Werkflow,OSWorkflow等不下30余种的框架,炫耀的声音一个比一个响亮。每种框架都有自己的设计思路和实现方案,况且这种技术预研性的工作,又不可能在项目周期内占用太多的时间,而不深入预研又不可能客观地作出评判,所以往往是熬红的双眼依然带着迷茫的目光。
  此外,用人单位为了减少新员工的培训时间,对求职者往往有明确的框架使用技能和经验的要求。求职者为了能找到一个好工作,不得不逼迫自己学习更多的框架,以便让自己拥有更多的求职机会。

  搭配的困难
  开源的繁荣虽然给各个领域都造就了许多优秀的框架,如Spring,Struts,Hibernate,Lucene、OSCache等等,但却没有出现一个一站式,统管全局的整合开发框架。开发者在享用大餐之前,事先得充当大橱的角色,将这些盐,油、酱、菜按合理的方式调配好。
  虽然,我们一直强调整体大于单个的总和,但是如何将单个“个体”正确的组合成发挥更大效应的“整体”却并非易事。因为这些单独的框架都由不同的团队开发,框架与框架之间存在天然的阻抗,这种框架和框架之间的“代沟”需要额外配置和编码才能弥合。
  每个框架都拥有自己的配置文件,框架的整合经常带来配置的灾难,如将Spring和Struts整合时,不仅Struts本身的配置文件一个不能少,在Spring中还需要每个Action提供配置信息,而且两者需要遵守一定的契约。
  相互搭配的框架和框架之间经常会出现相似的或重复的功能,如何取舍,如何使用往往让开发者们为难。如Spring本身提供了AOP方法返回结果的缓存功能,而Hibernate本身也提供二级缓存,究竟两者都使用呢,还是择一而从?往往中间又会引出很多争论。
  框架整合的问题已经日益突出,我们可以在各开源论坛或社区发现大量有关讨论的主题。目前也出现了一些试图解决的框架整合问题的开源项目,如国外的AppFuse,国内的SpringSide,为框架的整合提供了专业的指导。但是并没有很好的解决现实开发中的实际需要。这些整合框架为了增加通用性,网都撒得太大,导致整合框架本身象一个庞然大物,让人望而生畏,定制性和灵巧性上都存在不足,降低了它们的实用性,所以这些整合性的开源项目往往降格为指导性的实例。

  升级的困扰
  活跃的框架每天都在升级改造,丰富功能。其次由于开源框架在一定程度上存在随意性,往往导致框架在实际使用后,发现大量隐含的Bug,所以有时对某个框架的升级变得不可避免。开源框架比之Sun正规的规范有着更加灵活的升级方式,高低版本不兼容的问题已经成为司空见惯的事情。如著名的Hibernate,其3.0版本和2.0版本的包名都发生了彻底的变化,刚发布的Acegi和低版本也存在很大的差异,无法兼容。
  一个整合性的框架由多个出自于不同团队的框架组成,整合框架在这些组合框架之上高位运行,底层框架的升级变化就造成了组合框架水涨船高的局面,整合框架脆弱的稳定性很容易被打破。
组合框架的升级还直接带来了开发团队学习的压力,为了熟悉框架新功能和改进,在开发工作之余,他们不得不努力压榨自己的业余时间不断地充电学习。总是某个框架新功能学习还未完成,另一个框架的新版本又在一阵欢呼声中闪亮登场,让开发人员发现自己所有的努力只是一场骑牛追马游戏。

  3 开发者如何走出迷局
  框架的爆炸性增长和技术更替一日千里的速度,让刚刚从传统J2EE迷局中走出来的开发者重新堕入了新的困境之中。有许多切身体验的开发者在网上大倒苦水,甚至有许多声音在呐喊,希望重新回到JSP+JavaBean+JDBC那个纯真的年代中去。
框架的作者们本想还软件开发一个清新美满的世界,不想个体性的良性企盼变成了一种整体性的混乱纷争。在纷繁复杂的开源世界如何走出迷局和困境,把握自己技术航船的方向,是每个开发者们冥思遐想的事情。

  重点学习 触类旁通
  每个人的时间是有限的,对于周期紧,进度急,加班赶的开发者来说更加如此,使得开发者不可能 “识遍天下字,读尽人间书”逐个学习框架。选择好适合自己、适合项目的框架进行重点学习尤为重要。不但要掌握技术细节,更要理解框架的原理和思想,这样在接触相关框架时,我们才能触类旁通,慧眼识真。
  如果你深入理解了Struts框架的MVC的原理和思想,在接触Tapestry,Spring MVC等框架时,你会发现两者只是形上的区别,而非质上的差异,即使因现实需要确实要转换框架时,也可以轻松平滑地过渡。

  不求最好 但求适用
  开发人员往往都是完美主义者,吹毛求疵,带着浓重的偏执狂倾向。是的,偏执狂是优秀程序员的一个特点,时下《只有偏执狂才能生存》也正在大卖热卖,Rod Johnson,Gavin King,Oberg也都是偏执狂。
  但在有进度工期压力的情况下,我们不得不向实现妥协。对于公司来说,利润永远都是第一位的,不管用不用框架或用什么框架,只要能如期保质保量完成用户的所有功能需求,就是最好的项目。客户永远看不到,也不关心你使用了哪个优秀的技术和框架。
  所以,在实际的开发中,也许我们常常需要委曲内心的冲动,只要目前的框架能满足需求,我们没有必须象服装界一样赶追时髦,一切不求最好,但求适用。
  如果Spring Template JDBC已经很好的满足了目前的需求,就没有必要一定要上Hibernate,如果自己开发的简要列表控件效果不错,就无须转换为ExtremeTable。新框架的学习需要代价,但这种代价的价值在实际发挥功效之前是不被肯定的。况且看似不合时宜的那些简单而古老的技术也可以做出强大的系统,如世界上最大的java项目——巴西全国医疗系统,就是构建在JSP+JavaBean+Servlet之上。

  注重积累 搭建平台
  我们常常发现一些软件公司自身没有任何积累,完全寄希望于这些整合框架解决所有的问题。开源框架解决的都是某个领域的通用性问题,每个公司由于其所处行业,服务用户的不同,要求公司拥有自己的解决方案,框架的通用性和公司的个性化需求是存在矛盾的。软件公司应该加强自身的积累,在这些框架的基础上搭建好符合自身需求的快速开发平台,屏蔽掉底层框架的复杂功能和细枝末节,降低对开发人员的技能要求,以便新员工能够快速参与到项目中,而无需进行一个个开源框架的学习。
  虽然这种积累和平台的建设会耗费额外的工作量,但首先它是一个循序渐进的过程,其次这种任务仅由两三个技术突出的技术人员承担,带来的好处是直接降低了其他开发人员使用难度和技术要求,在一定程序上避免了开源框架的所带来的不稳定性影响。

  4 小结
  开源的繁荣带来了丰富的框架,有力的推动了业界的发展,同时我们也看到,这种繁荣所带来的惊喜背后紧跟着许多困惑的眼神,迷失在繁荣的混乱之中的开发者们希望走出困惑,走出迷局。
  如何在嘈杂喧闹的开源世界把握方向寻求突破,不管是对于开发者还是软件公司的决策者都值得深深的思考。
修改字段存储类型:


最常用同步关于库权限查询指令,基础预备:查一下数据库有用户及权限:
select distinct concat('user: ''',user,'''@''',host,''';') as query from mysql.user;


=================================================================

mysql> show create database jackxiang_mysql;
+-----------------+----------------------------------------------------------------------------+
| Database        | Create Database                                                            |
+-----------------+----------------------------------------------------------------------------+
| jackxiang_mysql | CREATE DATABASE `jackxiang_mysql` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+-----------------+----------------------------------------------------------------------------+
依葫芦画瓢:




建表基本结构都有:

如果是字符串的  NOT NULL DEFAULT '';
如果是数字型的  NOT NULL DEFAULT 0;
有兄弟说default ''  跨库也麻烦,不如default null:
用is null 和 ='' 都无法全部查询出来,有些人写程序,很容易把默认null的字段 插入成'',但是默认的很多数据又是null,这样一个字段会有 ''和null同时存在。

在上面表中加个索引:

Default值设定及Null设定
字符串:
alter table t_tst_root add busiLevel  varchar(255)  default '' not null after f_Id;
Int整形:
alter table t_tst_root add f_TstProjId  int(10)  default 0 not null after f_Id;

ALTER TABLE `Tbl_File` ADD PRIMARY KEY ( `FFileId` )
ALTER TABLE `Tbl_File` CHANGE `FFileId` `FFileId` INT( 11 ) NOT NULL AUTO_INCREMENT
________________________________________________________________________________________________
ALTER TABLE  `temperatureone` CHANGE  `nowTempValue`  `nowTempValue` FLOAT(5,2) NOT NULL COMMENT  '现在温度'
PHPMyadmin:
字段  nowTempValue
类型  FLOAT
长度/值*1  5,2
________________________________________________________________________________________________
alter table test add index id(id); //id不能有引号
加一个字段:


如果想要添加在某个字段的后面则是这样的:


想要修改一个字段及默认值:

把字段由text类似修改为var_char类型(我的bo-blog,里的字段作优化,bo-blog不更新了,自己作如下优化):

mysql里的长度简述:
CHAR(M)  0<M<=255(建议CHAR(1)外,超过此长度的用VARCHAR)  M个字符(所占空间跟字符集等有关系)  
VARCHAR(M)  0<M<65532/N   M个字符(N大小由字符集,以及是否为中文还是字母数字等有关系)  
TEXT  64K个字符  所占空间跟字符集等有关系

想删除某个字段:


添加索引、删除索引:
alter table `boblog_blogs` add index blogalias(blogalias);
alter table `boblog_blogs` drop  index blogalias;
alter table boblog_blogs add FULLTEXT(content); //全文索引
扩大字段的长度:


修改表字段的默认值为空不为null:


修改表字段enum的新类型none:

# 修改表的注释

# 修改字段的注释  --注意:字段名和字段类型照写就行



添加一个自增长字段并且添在最前面用first,如下:
ALTER TABLE `object_video_upload`  ADD `id` INT(32) NOT NULL AUTO_INCREMENT COMMENT 'auto_increase comment' first;

如果我在一个表上两个字段指定auto_increment呢?
mysql> create table tab_auto_incr(a int not null auto_increment,b int not null auto_increment,primary key (a),unique key (b));
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key//是:Innodb:
InnoDb引擎中对auto_increment的误解:http://jiuchen.sinaapp.com/136.html
结论3:在InnoDB中,auto_increment至少需要单独为索引字段(主键也是索引的一种)。
结论4:在InnoDB中,auto_increment可以和其他字段组成联合索引,但auto_increment必须位于最左侧(和MyISAM不同)。


所以,如果表已经建立好了,想加一个id并为auto_increment的字段得,先建立这个字段(暂还能有auto_increment的属性,否则报错如上),再添加索引,再修改这个字段为auto_increment,操作如下,并实践Ok,发现这个新加的id确实变为自动由1,2,3...这样的值了:


MYISM:
不行!说明一个表只能有一个auto_increment,且该列必须是primary key或者unique key。
更多:http://blog.csdn.net/feihong247/article/details/7748788





# 查看字段注释的方法  --show

要想一个字段是AUTO_INCREMENT ,它必须是一个索引,刚才一时心急,搞忘记了,备份下。
其根本是:create table Tbl_File_XXX(select * from Tbl_File_Bak_XXX);  这个语句在表Tbl_File_XXX中是不会有索引的。
以后怎么解决这个问题:
create table aaa like Tbl_User
insert into table select xxx

加在最前面FIRST :
ALTER TABLE `jiu` ADD `11` VARCHAR( 1 ) NOT NULL FIRST ;

测试Ok,索引带过来了:
create table aaa like Tbl_File_Bak;
导入: insert into  aaa select * from Tbl_File_Bak;
示例:
=====================================================================
drop table Tbl_File;
create table Tbl_File like Tbl_File_Bak;
insert into  Tbl_File select * from Tbl_File_Bak;
source /home/admin/745.txt
=====================================================================

   直接select into 不会复制任何索引和主键,一般先create table like ,然后再select into
    
    mysql> create table cc like test;
    Query OK, 0 rows affected (0.04 sec)

    mysql> desc cc;
    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | id      | int(5)      | YES  |     | NULL    |       |
    | name    | varchar(20) | YES  |     | NULL    |       |
    | address | varchar(50) | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    3 rows in set (0.02 sec)

    mysql> insert into cc (select * from test);  
    mysql>Query OK, 5 rows affected (0.01 sec)
Over!


create table cs_bak1 as(select * from test) ; //备份表数据一模一样的,但索引没了,默认引擎和编码:服务器默认的存储引擎而不是源表的存储引擎
create table cs_bak like test; //相同的结构来创建一个新表,列名、数据类型、空指和索引也将复制,但是表的内容不会被复制。外键和专用的权限也没有被复制。
参考对比URL:http://phpdeveloper.cn/mysql-mysql%E5%A4%8D%E5%88%B6%E8%A1%A8%E7%9A%84%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95

select into在Mysql中不适用,不支持:
现在有张表为student,我想将这个表里面的数据复制到一个为dust的新表中去,虽然可以用以下语句进行复制,总觉得不爽,希望各位帮助下我,谢谢。
answer 01:
create table dust select * from student;//用于复制前未创建新表dust的情况下
answer 02:
insert into dust select * from student;//已经创建了新表dust的情况下

现在请各位用select..into..语句实现以上东东,谢谢支持,再次感谢!
网友回复:该回复于2008-09-29 06:37:03被版主删除
网友回复:sqlserver可以那樣寫,但是mySql中貌似不行哦,另外樓主你說的那兩種寫法,應該是最常見的啊
网友回复:create table dust select * from student;
网友回复:楼上的写的是我发的里面的啊,我要的是 select into 语句的啊?


请各位大侠帮忙,谢谢!
网友回复:MySQL不支持Select Into语句直接备份表结构和数据,一些种方法可以代替, 也有其它方法可以处理,总结如下:
方法1:
MYSQL不支持:
Select * Into new_table_name from old_table_name;
替代方法:
Create table new_table_name (Select * from old_table_name);
来源:http://hi.baidu.com/%D3%D2%CA%D6%C4%AA%D4%FA%CC%D8%B5%C4/blog/item/ed236851533190818d5430b3.html


一、
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '合作伙伴ID',
PRIMARY KEY (`id`),
UNIQUE KEY `verifycode` (`verifycode`,`eid`)

二、
新加一个字段:
ALTER TABLE `object_partner` ADD `eid` VARCHAR( 16 ) NOT NULL AFTER `coop_type`

三、
把这新加的字段再加为联合索引:
ALTER TABLE `cntv_sns_language`.`object_partner` DROP PRIMARY KEY ,
ADD PRIMARY KEY ( `verifycode` , `eid` )

四、
添加一个id字段与表开头 FIRST:
ALTER TABLE `object_partner` ADD `id` INT( 11 ) NOT NULL FIRST

五、
给这个id字段加上primary索引(因前面加过primary索引,不能现再加出现下面提示):
ALTER TABLE `object_partner` ADD `id` INT( 11 ) NOT NULL FIRST

六、给前面第三步的primary联合索引去掉后加上 UNIQUE 索引:
ALTER TABLE `cntv_sns_language`.`object_partner` DROP PRIMARY KEY ,
ADD UNIQUE (
`verifycode` ,
`eid`
)

七、去掉后,给id字段加上前面的primary 索引:
ALTER TABLE `cntv_sns_language`.`object_partner` ADD INDEX ( `id` )







use 某个DB后:
status
可以看到DB的情况,尤其是乱码的问题等:
默认:
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
set names utf8 后:
Server characterset:    latin
Db     characterset:    latin
Client characterset:    utf8
Conn.  characterset:    utf8
导入依旧有问题,正确的应该默认就是DB:Utf8,导入才会可能正常:
Server characterset:    latin1
Db     characterset:    utf8
Client characterset:    latin1
Conn.  characterset:    latin1



mysql> ALTER TABLE `Tbl_User_NNN` ADD INDEX ( `FMemo_Extra` ( 16 ) ) ;
Query OK, 3 rows affected (0.12 sec)
Records: 3  Duplicates: 0  Warnings: 0


添加mysql数据库字段
使用ALTER   TABLE   [表名]   ADD   [字段]s语句……

索引

1.普通索引。
      这是最基本的索引,它没有任何限制。它有以下几种创建方式:
      (1)创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB 和 TEXT 类型,必须指定length,下同。
      (2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
      (3)创建表的时候直接指定:CREATE TABLE tableName ( [...], INDEX [indexName] (tableColumns(length)) ;
    
    2.唯一索引。
       它与前面的"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
       (1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
      (2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
      (3)创建表的时候直接指定:CREATE TABLE tableName ( [...], UNIQUE [indexName] (tableColumns(length));

       实践成功如下:
        
     3.主键索引
       它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用ALTER命令。



//主键549830479

   alter table tabelname add new_field_id int(5) unsigned default 0 not null auto_increment ,add primary key (new_field_id);//增加一个新列549830479

   alter table t2 add d timestamp;
   alter table infos add ex tinyint not null default '0';//删除列549830479

   alter table t2 drop column c;//重命名列549830479

   alter table t1 change a b integer;
//改变列的类型549830479

   alter table t1 change b b bigint not null;
   alter table infos change list list tinyint not null default '0';
//重命名表549830479

   alter table t1 rename t2;加索引549830479

   mysql> alter table tablename change depno depno int(5) not null;
   mysql> alter table tablename add index 索引名 (字段名1[,字段名2 …]);
   mysql> alter table tablename add index emp_name (name);加主关键字的索引549830479


   mysql> alter table tablename add primary key(id);加唯一限制条件的索引549830479

  mysql> alter table tablename add unique emp_name2(cardnumber);删除某个索引549830479

   mysql>alter table tablename drop index emp_name;修改表:549830479

增加字段:549830479

   mysql> ALTER TABLE table_name ADD field_name field_type;修改原字段名称及类型:549830479

   mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;删除字段:549830479

   mysql> ALTER TABLE table_name DROP field_name;

参考:http://flyer2010.iteye.com/blog/1064390
An old web technology is slowly being resurrected from the depths of history. Browser features that have gone untouched for years are once again being employed to bring better responsiveness to UIs. Servers are learning to cope with a new way of doing things. And I’m not talking about Ajax.
New services like Jot Live and Meebo are built with a style of data transmission that is neither traditional nor Ajax. Their brand of low-latency data transfer to the browser is unique, and it is becoming ever-more common. Lacking a better term, I’ve taken to calling this style of event-driven, server-push data streaming “Comet”. It doesn’t stand for anything, and I’m not sure that it should. There is much confusion about how these techniques work, and so using pre-existing definitions and names is as likely to get as much wrong as it would get right.

Defining Comet

For a new term to be useful, at a minimum we need some examples of the technology, a list of the problems being solved, and properties which distinguish it from other techniques. As with Ajax, these aren’t hard to find. A short list of example applications includes:
So what makes these apps special? What makes them different from other things that might at first glance appear similar? Fundamentally, they all use long-lived HTTP connections to reduce the latency with which messages are passed to the server. In essence, they do not poll the server occasionally. Instead the server has an open line of communication with which it can push data to the client.
From the perspective of network activity, we can modify JJG’s original Ajax diagram to illustrate how Comet differs:
As is illustrated above, Comet applications can deliver data to the client at any time, not only in response to user input. The data is delivered over a single, previously-opened connection. This approach reduces the latency for data delivery significantly.
The architecture relies on a view of data which is event driven on both sides of the HTTP connection. Engineers familiar with SOA or message oriented middleware will find this diagram to be amazingly familiar. The only substantive change is that the endpoint is the browser.
While Comet is similar to Ajax in that it’s asynchronous, applications that implement the Comet style can communicate state changes with almost negligible latency. This makes it suitable for many types of monitoring and multi-user collaboration applications which would otherwise be difficult or impossible to handle in a browser without plugins.

Why Is Comet Better For Users?

Regular Ajax improves the responsiveness of a UI for a single user, but at the cost of allowing the context to go “stale” for long-lived pages. Changes to data from others users is lost until a user refreshes the whole page. An application can alternately return to the “bad old days” and maintain some sort of state mechanism by which it tells client about changes since the last time they’ve communicated. The user has to either wait until they preform some action which would kick off a request to see the updated state from other users (which might impact the action they wanted to preform!) or request changes from the server at some interval (called “polling”). Since the web is inherently multi-user, it’s pretty obvious that regular Ajax imposes usability and transparency hurdles for users. Applications that employ the Comet technique can avoid this problem by pushing updates to all clients as they happen. UI state does not go out of sync and everyone using an application can easily understand what their changes will mean for other users. Ajax improves single-user responsiveness. Comet improves application responsiveness for collaborative, multi-user applications and does it without the performance headaches associated with intermittent polling.

But Does It Scale?

New server software is often required to make applications built using Comet scale, but the patterns for event-driven IO on the server side are becoming better distributed. Even Apache will provide a Comet-ready worker module in the upcoming 2.2 release. Until then, tools like Twisted, POE, Nevow, mod_pubsub, and other higher-level event-driven IO abstractions are making Comet available to developers on the bleeding edge. Modern OSes almost all now support some sort of kernel-level event-driven IO system as well. I’ve even heard that Java’s NIO packages will start to take advantage of them in a forthcoming release. These tools are quietly making the event-driven future a reality. This stuff will scale, and most of the tools are in place already.
I’ll be giving a more on this topic at ETech and describing the various techniques that Comet applications can employ to push data from the server to the client. As always, I’ll post the slides here as well.
The future of the read-write web is multi-user. There is life after Ajax.

Endnotes

First, a word on terminology and its importance. “Ajax” was coined to describe background request/response data transfer. Many of us had worked on solutions to do exactly this, but it wasn’t until a simple name and accompanying description were provided that it was possible for people not directly building applications to describe what it was they liked about it. Common terminology acts not only as a shortcut in discussions between technical folks, but also as a bridge for those who may not be able to give a technical rundown of exactly how it works.
As with Ajax, those of us who build technology are now faced with another communication challenge. We have a hard problem for which solutions are available (and have been for some time) but no way to communicate about them. Terminology is again the missing link. Today, keeping an HTTP connection open for doing low-latency data transfer to the browser has no digestible name. When I describe a cool new hack, there’s nothing to associate it with. When people say “how the hell did they do that?”, we don’t have a compact answer. Therefore, in the spirit of improved communication (and not technology invention), I’m proposing a new name for this stuff.
Next, for those who are network-level programmers or are familiar with sockets and/or basic TCP/IP programming, you will probably scoff at the concept of web applications finally getting this kind of datagram packet support. Fair enough. It is however interesting to note that while more responsive UIs have been available on a variety of platforms to date, the Web has “won” the broad majority of market share for most classes of applications in which the browser provides enough native (non-plugin) support to make the performance and/or UI feasible. Comet may be a new name for an old set of concepts wrapped in some pretty grotty hacks, but that in no way diminishes the market impact it will have (and is already having).
Lastly, as current Dojo users might expect, Dojo already supports Comet via dojo.io.bind(). More than a year ago we designed the API with Comet in mind. In the next couple of weeks I’ll be showing how bind’s pluggable transport layer can be combined with Dojo’s event topic mechanism to provide message delivery on top of a message bus.
我们先来看一段代码。

<?php
for ($i=10; $i>0; $i--)
{
  echo $i;
  flush();
  sleep(1);
}
?>

按照php手册里的说法

   该函数将当前为止程序的所有输出发送到用户的浏览器。

上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。

好,我们来改一下这段代码,改成

<?php
ob_end_clean();//修改部分
for ($i=10; $i>0; $i--)
{
  echo $i;
  flush();
  sleep(1);
}
?>

嘿,加了这一句ob_end_clean();,居然就OK了。实际上,我们把ob_end_clean()换成ob_end_flush()也一样OK。

我再来改一改。

<?php
for ($i=10; $i>0; $i--)
{
  echo $i;
  ob_flush();//修改部分
  flush();
  sleep(1);
}
?>

运行一下,是不是发现$i也隔一秒输出一次了?这是为什么呢?
别急,我们来看看php.ini。

打开php.ini,搜索output_buffering,我们会看到类似这样的设置 output_buffering = 4096。正如它的名字output_buffering一样,这个设置的作用就是把输出缓冲一下,缓冲大小为4096bytes.

在我们的第一段代码里,之所以没有按预期的输出,正是因为这个output_buffering把那些输出都缓冲了。没达到4096bytes或者脚本结束,输出是不会被发送出去的。

而第二段代码中的ob_end_clean()和ob_end_flush()的作用,就是终止缓冲。这样就不用等到有4096bytes的缓冲之后才被发送出去了。

第三段代码中,用了一句ob_flush(),它的作用就是把缓冲的数据发送出去,但是并不会终止缓冲,所以它必须在每次flush()前使用。

如果不想使用ob_end_clean(),ob_end_flush()和ob_flush(),我们就必须把php.ini里的 output_buffering设得足够小,例如设为0。需要注意的是,如果你打算在脚本中使用ini_set(” output_buffering”,”0″)来设置,那么请停下来吧,这种方法是不行的。因为在脚本一开始的时候,缓冲设置就已经被载入,然后缓冲就开始了。

可能你会问了,既然ob_flush()是把缓冲的数据发送出去,那么为什么还需要用flush()???直接用下面这段代码不行吗??

<?php
for ($i=10; $i>0; $i--)
{
  echo $i;
  ob_flush();
  sleep(1);
}
?>

请注意ob_flush()和flush()的区别。前者是把数据从PHP的缓冲中释放出来,后者是把不在缓冲中的或者说是被释放出来的数据发送到浏览器。所以当缓冲存在的时候,我们必须ob_flush()和flush()同时使用。

那是不是flush()在这里就是不可缺少的呢?不是的,我们还有另外一种方法,使得当有数据输出的时候,马上被发送到浏览器。下面这两段代码就是不需要使用flush()了。(当你把output_buffering设为0的时候,连ob_flush()和ob_end_clean()都不需要了)

<?php
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
  echo $i;
  ob_flush();
  sleep(1);
}
?>

<?php
ob_end_clean();
ob_implicit_flush(true);
for ($i=10; $i>0; $i--)
{
  echo $i;
  sleep(1);
}
?>

请注意看上面的ob_implicit_flush(true),这个函数强制每当有输出的时候,即刻把输出发送到浏览器。这样就不需要每次输出(echo)后,都用flush()来发送到浏览器了。

以上所诉可能在某些浏览器中不成立。因为浏览器也有自己的规则。我是用Firefox1.5,IE6,opera8.5来测试的。其中opera就不能正常输出,因为它有一个规则,就是不遇到一个HTML标签,就绝对不输出,除非到脚本结束。而FireFox和IE还算比较正常的。

最后附上一段非常有趣的代码,作者为PuTTYshell。在一个脚本周期里,每次输出,都会把前一次的输出覆盖掉。
以下代码只在firefox下可用,其他浏览器并不支持multipart/x-mixed-replace的Content-Type.

<?php
 header('Content-type: multipart/x-mixed-replace;boundary=endofsection');
 print "\n--endofsection\n";

 $pmt = array("-", "\\", "|", "/" );
 for( $i = 0; $i <10; $i ++ ){
    sleep(1);
    print "Content-type: text/plain\n\n";
    print "Part $i\t".$pmt[$i % 4];
    print "--endofsection\n";
    ob_flush();
    flush();
 }
 print "Content-type: text/plain\n\n";
 print "The end\n";
 print "--endofsection--\n";
?>
centos 7 禁止root直接登录系统,FreeBSD出于安全原因,默认参数很严格,禁止root用户直接使用ssh登陆
比如先用非root的帐户,登陆到ssh后,su成为root
如果想直接用root登陆,则修改如下配置文件:
vi /etc/ssh/sshd_config  #是sshd_config得有个d,不是这个:/etc/ssh/ssh_config,是这个/etc/ssh/sshd_config

找到其中的如下一行,将前边的#符号去掉,并修改no为yes
#PermitRootLogin no
改成:
PermitRootLogin yes

接下来执行如下命令重新启动SSH服务:
xxx# /etc/rc.d/sshd restart
Stopping sshd.
Waiting for PIDS: 349.
Starting sshd.
xxx#

重新启动完成后,ssh即可登陆。

有可能要重新启动一下,reboot,我有次就重新启动可以ssh进去。AddTime:2016-01-10
service sshd restart
ps -ef|grep sshd
root     49624     1  0 17:14 ?        00:00:00 /usr/sbin/sshd
____________________________________________________________________________

开启SSH服务
(1)ee  /etc/inetd.conf  #编辑,去掉sshd前面的#
ssh     stream  tcp     nowait  root    /usr/sbin/sshd          sshd -i -4
(2)ee  /etc/rc.conf   #编辑,在最后添加
sshd_enable="yes"  
(3)ee  /etc/ssh/sshd_config  #编辑配置文件
PermitRootLogin yes   #允许root登录
PasswordAuthentication yes    #使用密码验证
PermitEmptyPasswords no   #不允许空密码登录
/etc/rc.d/sshd start  #启动ssh服务
/etc/rc.d/sshd restart    #重启ssh

http://www.osyunwei.com/archives/3007.html

____________________________________________________________________________
1 在FreeBSD中执行
ssh-keygen -t dsa

可得到
/home/leakon/.ssh/id_dsa
/home/leakon/.ssh/id_dsa.pub

2 可以用 WinSCP 下载这个两个文件到本地,保存到
C:\Documents and Settings\leakon\Application Data\VanDyke\

这是 SecureCRT 在 Windows 的 leakon 用户的程序数据文件夹中生成的目录
我保存到:D:\ssh_tmp\freeBSD_Key_Login

3 打开会话选项,在 分类 中选择 SSH2,在右边的 身份验证 中选择 公钥(PublicKey),然后点击旁边的 属性(Properites),选择 使用会话公钥设置(注意:会话公钥)(Use session public key setting),在 使用身份文件(Use identify file) 的输入框中,选择刚才下载回来的 id_dsa,注意,id_dsa 和 id_dsa.pub 要保存在一起(两个文件取名任意,但必须符合 somekey 和 somekey.pub)

4 按照 /etc/ssh/sshd_config 中指定的公钥文件名 AuthorizedKeysFile .ssh/authorized_keys,修改本地公钥文件名,在FreeBSD中执行
cd /home/leakon/.ssh/
mv id_dsa.pub authorized_keys  另外一个id_dsa可以不动它。

至此,方法一大功告成,重新用 SecureCRT 连接一下试试,直接就登录好了吧
前言:日期在数据库处理中都是非常麻烦的事情。这里给出mysql中对日期函数的处理及应用

-- 作者:未知
-- 发布日期: 2005-05-27

对于每个类型拥有的值范围以及并且指定日期何时间值的有效格式的描述见7.3.6 日期和时间类型。  

这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内:  

mysql> SELECT something FROM table  
WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) <= 30;  

DAYOFWEEK(date)  
返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。  
mysql> select DAYOFWEEK('1998-02-03');  
-> 3  

WEEKDAY(date)  
返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。  
mysql> select WEEKDAY('1997-10-04 22:23:00');  
-> 5  
mysql> select WEEKDAY('1997-11-05');  
-> 2  

DAYOFMONTH(date)  
返回date的月份中日期,在1到31范围内。  
mysql> select DAYOFMONTH('1998-02-03');  
-> 3  

DAYOFYEAR(date)  
返回date在一年中的日数, 在1到366范围内。  
mysql> select DAYOFYEAR('1998-02-03');  
-> 34  

MONTH(date)  
返回date的月份,范围1到12。  
mysql> select MONTH('1998-02-03');  
-> 2  

DAYNAME(date)  
返回date的星期名字。  
mysql> select DAYNAME("1998-02-05");  
-> 'Thursday'  

MONTHNAME(date)  
返回date的月份名字。  
mysql> select MONTHNAME("1998-02-05");  
-> 'February'  

QUARTER(date)  
返回date一年中的季度,范围1到4。  
mysql> select QUARTER('98-04-01');  
-> 2  

WEEK(date)  
   
WEEK(date,first)  
对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许
你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,
从星期一开始。  
mysql> select WEEK('1998-02-20');  
-> 7  
mysql> select WEEK('1998-02-20',0);  
-> 7  
mysql> select WEEK('1998-02-20',1);  
-> 8  

YEAR(date)  
返回date的年份,范围在1000到9999。  
mysql> select YEAR('98-02-03');  
-> 1998  

HOUR(time)  
返回time的小时,范围是0到23。  
mysql> select HOUR('10:05:03');  
-> 10  

MINUTE(time)  
返回time的分钟,范围是0到59。  
mysql> select MINUTE('98-02-03 10:05:03');  
-> 5  

SECOND(time)  
回来time的秒数,范围是0到59。  
mysql> select SECOND('10:05:03');  
-> 3  

PERIOD_ADD(P,N)  
增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。  
mysql> select PERIOD_ADD(9801,2);  
-> 199803  

PERIOD_DIFF(P1,P2)  
返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。  
mysql> select PERIOD_DIFF(9802,199703);  
-> 11  

DATE_ADD(date,INTERVAL expr type)  
   
DATE_SUB(date,INTERVAL expr type)  
   
ADDDATE(date,INTERVAL expr type)  
   
SUBDATE(date,INTERVAL expr type)  
这些功能执行日期运算。对于MySQL 3.22,他们是新的。ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词。
在MySQL 3.23中,你可以使用+和-而不是DATE_ADD()和DATE_SUB()。(见例子)date是一个指定开始日期的
DATETIME或DATE值,expr是指定加到开始日期或从开始日期减去的间隔值一个表达式,expr是一个字符串;它可以以
一个“-”开始表示负间隔。type是一个关键词,指明表达式应该如何被解释。EXTRACT(type FROM date)函数从日期
中返回“type”间隔。下表显示了type和expr参数怎样被关联: type值 含义 期望的expr格式  
SECOND 秒 SECONDS  
MINUTE 分钟 MINUTES  
HOUR 时间 HOURS  
DAY 天 DAYS  
MONTH 月 MONTHS  
YEAR 年 YEARS  
MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"  
HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"  
DAY_HOUR 天和小时 "DAYS HOURS"  
YEAR_MONTH 年和月 "YEARS-MONTHS"  
HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"  
DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"  
DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"  

MySQL在expr格式中允许任何标点分隔符。表示显示的是建议的分隔符。如果date参数是一个DATE值并且你的计算仅仅
包含YEAR、MONTH和DAY部分(即,没有时间部分),结果是一个DATE值。否则结果是一个DATETIME值。  

mysql> SELECT "1997-12-31 23:59:59" + INTERVAL 1 SECOND;  
-> 1998-01-01 00:00:00  
mysql> SELECT INTERVAL 1 DAY + "1997-12-31";  
-> 1998-01-01  
mysql> SELECT "1998-01-01" - INTERVAL 1 SECOND;  
-> 1997-12-31 23:59:59  
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
INTERVAL 1 SECOND);  
-> 1998-01-01 00:00:00  
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
INTERVAL 1 DAY);  
-> 1998-01-01 23:59:59  
mysql> SELECT DATE_ADD("1997-12-31 23:59:59",  
INTERVAL "1:1" MINUTE_SECOND);  
-> 1998-01-01 00:01:00  
mysql> SELECT DATE_SUB("1998-01-01 00:00:00",  
INTERVAL "1 1:1:1" DAY_SECOND);  
-> 1997-12-30 22:58:59  
mysql> SELECT DATE_ADD("1998-01-01 00:00:00",  
INTERVAL "-1 10" DAY_HOUR);  
-> 1997-12-30 14:00:00  
mysql> SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);  
-> 1997-12-02  
mysql> SELECT EXTRACT(YEAR FROM "1999-07-02");  
-> 1999  
mysql> SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");  
-> 199907  
mysql> SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");  
-> 20102  

如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。  

mysql> select DATE_ADD('1998-01-30', Interval 1 month);  
-> 1998-02-28  

注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。  
TO_DAYS(date)  
给出一个日期date,返回一个天数(从0年的天数)。  
mysql> select TO_DAYS(950501);  
-> 728779  
mysql> select TO_DAYS('1997-10-07');  
-> 729669  

TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。  

FROM_DAYS(N)  
给出一个天数N,返回一个DATE值。  
mysql> select FROM_DAYS(729669);  
-> '1997-10-07'  

TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。  

DATE_FORMAT(date,format)  
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)  
%W 星期名字(Sunday……Saturday)  
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)  
%Y 年, 数字, 4 位  
%y 年, 数字, 2 位  
%a 缩写的星期名字(Sun……Sat)  
%d 月份中的天数, 数字(00……31)  
%e 月份中的天数, 数字(0……31)  
%m 月, 数字(01……12)  
%c 月, 数字(1……12)  
%b 缩写的月份名字(Jan……Dec)  
%j 一年中的天数(001……366)  
%H 小时(00……23)  
%k 小时(0……23)  
%h 小时(01……12)  
%I 小时(01……12)  
%l 小时(1……12)  
%i 分钟, 数字(00……59)  
%r 时间,12 小时(hh:mm:ss  AP M)  
%T 时间,24 小时(hh:mm:ss)  
%S 秒(00……59)  
%s 秒(00……59)  
%p AM或PM  
%w 一个星期中的天数(0=Sunday ……6=Saturday )  
%U 星期(0……52), 这里星期天是星期的第一天  
%u 星期(0……52), 这里星期一是星期的第一天  
%% 一个文字“%”。  

所有的其他字符不做解释被复制到结果中。  

mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');  
-> 'Saturday October 1997'  
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');  
-> '22:23:00'  
mysql> select DATE_FORMAT('1997-10-04 22:23:00',  
'%D %y %a %d %m %b %j');  
-> '4th 97 Sat 04 10 Oct 277'  
mysql> select DATE_FORMAT('1997-10-04 22:23:00',  
'%H %k %I %r %T %S %w');  
-> '22 22 10 10:23:00 PM 22:23:00 00 6'  
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。  

TIME_FORMAT(time,format)  
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。  
CURDATE()  
   
CURRENT_DATE  
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。  
mysql> select CURDATE();  
-> '1997-12-15'  
mysql> select CURDATE() + 0;  
-> 19971215  

CURTIME()  
   
CURRENT_TIME  
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。  
mysql> select CURTIME();  
-> '23:50:26'  
mysql> select CURTIME() + 0;  
-> 235026  

NOW()  
   
SYSDATE()  
   
CURRENT_TIMESTAMP  
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。  
mysql> select NOW();  
-> '1997-12-15 23:50:26'  
mysql> select NOW() + 0;  
-> 19971215235026  

UNIX_TIMESTAMP()  
   
UNIX_TIMESTAMP(date)  
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。  
mysql> select UNIX_TIMESTAMP();  
-> 882226357  
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');  
-> 875996580  

当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。  

FROM_UNIXTIME(unix_timestamp)  
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。  
mysql> select FROM_UNIXTIME(875996580);  
-> '1997-10-04 22:23:00'  
mysql> select FROM_UNIXTIME(875996580) + 0;  
-> 19971004222300  

FROM_UNIXTIME(unix_timestamp,format)  
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。  
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),  
'%Y %D %M %h:%i:%s %x');  
-> '1997 23rd December 03:43:30 x'  

SEC_TO_TIME(seconds)  
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。  
mysql> select SEC_TO_TIME(2378);  
-> '00:39:38'  
mysql> select SEC_TO_TIME(2378) + 0;  
-> 3938  

TIME_TO_SEC(time)  
返回time参数,转换成秒。  
mysql> select TIME_TO_SEC('22:23:00');  
-> 80580  
mysql> select TIME_TO_SEC('00:39:38');  
-> 2378

如果你指定太短的间隔值(不包括type关键词期望的间隔部分),MySQL假设你省掉了间隔值的最左面部分。例如,
如果你指定一个type是DAY_SECOND,值expr被希望有天、小时、分钟和秒部分。如果你象"1:10"这样指定值,
MySQL假设日子和小时部分是丢失的并且值代表分钟和秒。换句话说,"1:10" DAY_SECOND以它等价于"1:10" MINUTE_SECOND
的方式解释,这对那MySQL解释TIME值表示经过的时间而非作为一天的时间的方式有二义性。如果你使用确实不正确的日期,
结果是NULL。如果你增加MONTH、YEAR_MONTH或YEAR并且结果日期大于新月份的最大值天数,日子在新月用最大的天调整。

mysql> select DATE_ADD('1998-01-30', Interval 1 month);
-> 1998-02-28

注意,从前面的例子中词INTERVAL和type关键词不是区分大小写的。
TO_DAYS(date)
给出一个日期date,返回一个天数(从0年的天数)。
mysql> select TO_DAYS(950501);
-> 728779
mysql> select TO_DAYS('1997-10-07');
-> 729669

TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。

FROM_DAYS(N)
给出一个天数N,返回一个DATE值。
mysql> select FROM_DAYS(729669);
-> '1997-10-07'

TO_DAYS()不打算用于使用格列高里历(1582)出现前的值。

DATE_FORMAT(date,format)
根据format字符串格式化date值。下列修饰符可以被用在format字符串中: %M 月名字(January……December)
%W 星期名字(Sunday……Saturday)
%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)
%Y 年, 数字, 4 位
%y 年, 数字, 2 位
%a 缩写的星期名字(Sun……Sat)
%d 月份中的天数, 数字(00……31)
%e 月份中的天数, 数字(0……31)
%m 月, 数字(01……12)
%c 月, 数字(1……12)
%b 缩写的月份名字(Jan……Dec)
%j 一年中的天数(001……366)
%H 小时(00……23)
%k 小时(0……23)
%h 小时(01……12)
%I 小时(01……12)
%l 小时(1……12)
%i 分钟, 数字(00……59)
%r 时间,12 小时(hh:mm:ss [AP]M)
%T 时间,24 小时(hh:mm:ss)
%S 秒(00……59)
%s 秒(00……59)
%p AM或PM
%w 一个星期中的天数(0=Sunday ……6=Saturday )
%U 星期(0……52), 这里星期天是星期的第一天
%u 星期(0……52), 这里星期一是星期的第一天
%% 一个文字“%”。

所有的其他字符不做解释被复制到结果中。

mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
-> 'Saturday October 1997'
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
-> '22:23:00'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%D %y %a %d %m %b %j');
-> '4th 97 Sat 04 10 Oct 277'
mysql> select DATE_FORMAT('1997-10-04 22:23:00',
'%H %k %I %r %T %S %w');
-> '22 22 10 10:23:00 PM 22:23:00 00 6'
MySQL3.23中,在格式修饰符字符前需要%。在MySQL更早的版本中,%是可选的。

TIME_FORMAT(time,format)
这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。
其他修饰符产生一个NULL值或0。
CURDATE()
 
CURRENT_DATE
以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
mysql> select CURDATE();
-> '1997-12-15'
mysql> select CURDATE() + 0;
-> 19971215

CURTIME()
 
CURRENT_TIME
以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
mysql> select CURTIME();
-> '23:50:26'
mysql> select CURTIME() + 0;
-> 235026

NOW()
 
SYSDATE()
 
CURRENT_TIMESTAMP
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的
上下文被使用。
mysql> select NOW();
-> '1997-12-15 23:50:26'
mysql> select NOW() + 0;
-> 19971215235026

UNIX_TIMESTAMP()
 
UNIX_TIMESTAMP(date)
如果没有参数调用,返回一个Unix时间戳记(从'1970-01-01 00:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一
个date参数被调用,它返回从'1970-01-01 00:00:00' GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME
字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
mysql> select UNIX_TIMESTAMP();
-> 882226357
mysql> select UNIX_TIMESTAMP('1997-10-04 22:23:00');
-> 875996580

当UNIX_TIMESTAMP被用于一个TIMESTAMP列,函数将直接接受值,没有隐含的“string-to-unix-timestamp”变换。

FROM_UNIXTIME(unix_timestamp)
以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串
还是或数字上下文中被使用。
mysql> select FROM_UNIXTIME(875996580);
-> '1997-10-04 22:23:00'
mysql> select FROM_UNIXTIME(875996580) + 0;
-> 19971004222300

FROM_UNIXTIME(unix_timestamp,format)
返回表示 Unix 时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条
目同样的修饰符。
mysql> select FROM_UNIXTIME(UNIX_TIMESTAMP(),
'%Y %D %M %h:%i:%s %x');
-> '1997 23rd December 03:43:30 x'

SEC_TO_TIME(seconds)
返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字
上下文中被使用。
mysql> select SEC_TO_TIME(2378);
-> '00:39:38'
mysql> select SEC_TO_TIME(2378) + 0;
-> 3938

TIME_TO_SEC(time)
返回time参数,转换成秒。
mysql> select TIME_TO_SEC('22:23:00');
-> 80580
mysql> select TIME_TO_SEC('00:39:38');
-> 2378

END

1.  设置CVS环境
  setenv CVSROOT :ext:你的CVS用户名@10.88.15.205:/cvsroot/mailrept

2.  从CVS中检出源代码,操作命令如下:

  针对RC1版本:
  cvs co -r RELENG_ENTPLATFORM_1_2_RC1 src/entplatform

  针对RC2版本:
  cvs co -r RELENG_ENTPLATFORM_1_2_RC2 src/entplatform

检出最新代码:
1步骤后:
运行:

cvs co src/entplatform src/entplatform


OK!
分页: 253/271 第一页 上页 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 下页 最后页 [ 显示模式: 摘要 | 列表 ]