SELECT mail
FROM `t_import_mail`
WHERE 1
GROUP BY mail
HAVING count( 0 ) >1
LIMIT 0 , 30
select FQQ,FUserID,count(*) as ct from `Tbl_User_**` GROUP BY FQQ HAVING ct > 1;
//查出表某个字段产生重复值的所有记录
可以用group by 来查出不重复的记录,但是我想查出重复的记录该如何写sql语句呢?
先看这个,
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email
然后看这个,就容易理解了
select uid,email,count(*) as ct from `edm_user081217` GROUP BY email HAVING ct > 1
以下是having和where的区别:
SELECT city FROM weather WHERE temp_lo = (SELECT max(temp_lo) FROM weather);
作用的对象不同。WHERE 子句作用于表和视图,HAVING 子句作用于组。
WHERE 在分组和聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算), 而 HAVING 在分组和聚集之后选取分组的行。因此,WHERE 子句不能包含聚集函数; 因为试图用聚集函数判断那些行输入给聚集运算是没有意义的。相反,HAVING 子句总是包含聚集函数。(严格说来,你可以写不使用聚集的 HAVING 子句,但这样做只是白费劲。同样的条件可以更有效地用于 WHERE 阶段。)
在前面的例子里,我们可以在 WHERE 里应用城市名称限制,因为它不需要聚集。 这样比在 HAVING 里增加限制更加高效,因为我们避免了为那些未通过 WHERE 检查的行进行分组和聚集计算
综上所述:
having一般跟在group by之后,执行记录组选择的一部分来工作的。
where则是执行所有数据来工作的。
再者having可以用聚合函数,如having sum(qty)>1000
PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
阅读全文
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
阅读全文
Definition and Usage
定义和用法
The round() function rounds a number to the nearest integer.
round()函数的作用是:对浮点数进行四舍五入取整。
Syntax
语法
round(x,prec)
Parameter
参数 Description
描述
x Required. The number to be round
必要参数。指定需要进行操作的数值对象
prec Optional. The number of digits after the decimal point
可选参数。指定小数位数
实例,指定小数位数为2位:
第二位小于5,情况:
定义和用法
The round() function rounds a number to the nearest integer.
round()函数的作用是:对浮点数进行四舍五入取整。
Syntax
语法
round(x,prec)
Parameter
参数 Description
描述
x Required. The number to be round
必要参数。指定需要进行操作的数值对象
prec Optional. The number of digits after the decimal point
可选参数。指定小数位数
实例,指定小数位数为2位:
<?php
echo(round(0.6025,3));
?>
[~]# php test.php
0.603
echo(round(0.6025,3));
?>
[~]# php test.php
0.603
第二位小于5,情况:
<?php
echo(round(0.6024,3));
?>
[~]# php test.php
0.602
echo(round(0.6024,3));
?>
[~]# php test.php
0.602
法一:
法二:
可选参数。指定小数位数
实例,参数2是指定小数位数为2位:
如下,制定后三位开始四舍五入:
第二位小于5,情况:
阅读全文
<?php
$num = 10.2323;
echo number_format($num, 2);
?>
$num = 10.2323;
echo number_format($num, 2);
?>
[~]# php test.php
10.23
10.23
法二:
可选参数。指定小数位数
实例,参数2是指定小数位数为2位:
如下,制定后三位开始四舍五入:
<?php
echo(round(0.6025,3));
?>
echo(round(0.6025,3));
?>
[~]# php test.php
0.603
0.603
第二位小于5,情况:
<?php
echo(round(0.6024,3));
?>
echo(round(0.6024,3));
?>
[~]# php test.php
0.602
0.602
阅读全文
var_export 输出,所有的数据是可以作为组织好的变量输出的,都是能够作为直接赋值使用:
需要注意的一点是, var_export对于资源型的变量会输出NULL!
debug_zval_dump 输出结果跟 var_dump 类似,唯一增加的一个值是refcount,就是记录一个变量被引用了多少次,这是php的 copy on write (写时复制) 的机制的一个重要特点[
(PHP 4 >= 4.2.0, PHP 5)
var_export -- 输出或返回一个变量的字符串表示
描述
mixed var_export ( mixed expression [, bool return])
此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。
您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
上面代码将在页面打印:
array ( 'user' => 'yyy', 'psw' => 'xxx', )
'string'
也就是变量在php脚本中的表示。
所以常用于生成缓存文件。
例:
以上代码会生成有一个数组的php缓存文件。
array (
'user' => 'yyy',
'psw' => 'xxx',
)
'user' => 'yyy',
'psw' => 'xxx',
)
需要注意的一点是, var_export对于资源型的变量会输出NULL!
debug_zval_dump 输出结果跟 var_dump 类似,唯一增加的一个值是refcount,就是记录一个变量被引用了多少次,这是php的 copy on write (写时复制) 的机制的一个重要特点[
(PHP 4 >= 4.2.0, PHP 5)
var_export -- 输出或返回一个变量的字符串表示
描述
mixed var_export ( mixed expression [, bool return])
此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。
您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
<?php
$array = array( 'user' => 'yyy', 'psw' => 'xxx' );
$var="string";
echo var_export($array,true);
echo "<br />";
echo var_export($var,true);
?>
$array = array( 'user' => 'yyy', 'psw' => 'xxx' );
$var="string";
echo var_export($array,true);
echo "<br />";
echo var_export($var,true);
?>
上面代码将在页面打印:
array ( 'user' => 'yyy', 'psw' => 'xxx', )
'string'
也就是变量在php脚本中的表示。
所以常用于生成缓存文件。
例:
<?php
$cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
$content = "<?php\r\n";
$content .= "\$data = " . var_export($caches, true) . ";\r\n";
$content .= "?>";
file_put_contents($cache_file_path, $content, LOCK_EX);
?>
$cache_file_path = ROOT_PATH . '/temp/static_caches/' . $cache_name . '.php';
$content = "<?php\r\n";
$content .= "\$data = " . var_export($caches, true) . ";\r\n";
$content .= "?>";
file_put_contents($cache_file_path, $content, LOCK_EX);
?>
以上代码会生成有一个数组的php缓存文件。
一般我们把数组缓存到文件中的话,都是先要转成字符串的形式,然后再存入文本文件中,一般有两种机制把数组转成字符串,
第一种是
$str = var_export($arr, true);
第二种是
$str = serialize($arr);
这两种机制转换之后的字符串是不一样的,第一种是数组的原型模式,第二种是序列化后的形式。第一种存入文件中的只要加上<?php ?>标签,就形式了一个可用的数组原型,对调用来说,不用转换,直接返回这个数组就可以,但第二种,则需要再用一次unserialize函数反序列化一下。对于第种一说,就多了一步操作。下来我们用数据说话吧:阅读全文
第一种是
$str = var_export($arr, true);
第二种是
$str = serialize($arr);
这两种机制转换之后的字符串是不一样的,第一种是数组的原型模式,第二种是序列化后的形式。第一种存入文件中的只要加上<?php ?>标签,就形式了一个可用的数组原型,对调用来说,不用转换,直接返回这个数组就可以,但第二种,则需要再用一次unserialize函数反序列化一下。对于第种一说,就多了一步操作。下来我们用数据说话吧:阅读全文
来源:http://www.javaeye.com/topic/131139
# 软件安装形式
* rpm安装包:使用在RedHat集成套件中
* deb安装包:使用在Debian及其相关的集成套件中,其中包括Corel Linux
* slp:使用在stampede基础套件中,目的是尽可能少的取决于软件包管理器
* tar:tar-ball,一种压缩形式的tar格式文件
* 源代码安装包,需要自己编译具有高度的可配置性
# rpm包安装
* rpm -q 查询rpm数据库
* rpm -V 根据原始软件包验证已安装的文件
* rpm -U 升级或安装软件包
* rpm -e webmin 卸载软件
* rpm -qip webmin-0.89.rpm 查询某个软件包的基本信息
* rpm -qf /etc/sendmail.cf 或者 rpm -qif /etc/sendmail.cf 查询文件属于某个软件包,并带有完整的版本信息
* rpm -qlf /etc/sendmail.cf 查询某个含有/etc/sendmail.cf文件的软件包 并列该软件包的所有文件
* rpm -qacv 查询所有rpm包的详细信息,类似于ls -l
* rpm -va > rmp_verify.txt 强制验证整个软件包,并将信息写道文件中
* rpm -Uvf webmin0.78.rpm 或者 rpm -Uvf ×.rpm 安装软件
源代码安装
* 阅读Readme 和install文件
* 配置:运行configure的脚本文件
* 编译:运行make 编译源代码
* 安装:运行make install
# 软件安装形式
* rpm安装包:使用在RedHat集成套件中
* deb安装包:使用在Debian及其相关的集成套件中,其中包括Corel Linux
* slp:使用在stampede基础套件中,目的是尽可能少的取决于软件包管理器
* tar:tar-ball,一种压缩形式的tar格式文件
* 源代码安装包,需要自己编译具有高度的可配置性
# rpm包安装
* rpm -q 查询rpm数据库
* rpm -V 根据原始软件包验证已安装的文件
* rpm -U 升级或安装软件包
* rpm -e webmin 卸载软件
* rpm -qip webmin-0.89.rpm 查询某个软件包的基本信息
* rpm -qf /etc/sendmail.cf 或者 rpm -qif /etc/sendmail.cf 查询文件属于某个软件包,并带有完整的版本信息
* rpm -qlf /etc/sendmail.cf 查询某个含有/etc/sendmail.cf文件的软件包 并列该软件包的所有文件
* rpm -qacv 查询所有rpm包的详细信息,类似于ls -l
* rpm -va > rmp_verify.txt 强制验证整个软件包,并将信息写道文件中
* rpm -Uvf webmin0.78.rpm 或者 rpm -Uvf ×.rpm 安装软件
源代码安装
* 阅读Readme 和install文件
* 配置:运行configure的脚本文件
* 编译:运行make 编译源代码
* 安装:运行make install
每间隔3小时启动php去执行makescore.php程序:
0 */3 * * * /usr/local/php/bin/php /usr/local/tads/htdocs/*/src/cron/makescore.php
crontab格式:
第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令
下面是crontab的格式:
分 时 日 月 星期 要运行的命令
这里有crontab文件条目的一些例子:
30 21 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/apache/bin/apachectl restart
上面的例子表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/apache/bin/apachectl restart
上面的例子表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/apache/bin/apachectl restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/apache/bin/apachectl restart
上面的例子表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/apache/bin/apachectl restart
每一小时重启apache
* */1 * * * /usr/local/apache/bin/apachectl restart
每一小时重启apache
* 23-7/1 * * * /usr/local/apache/bin/apachectl restart
晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/apache/bin/apachectl restart
每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/apache/bin/apachectl restart
一月一号的4点重启apache
crontab命令:
crontab查看,编辑,重启,停止,开始
crontab -[l,e] service crond [restart,stop,start]
值得注意的地方,crontab里定时调用命令时,命令如果不在crontab的classpath里,要带全路径。
比如mysql应该写为 /usr/local/mysql/bin/mysql
阅读全文
经常开发php程序,老是找不到php的文件,于是否,想加入path,又看不到.bash_profile文件,只好建立这个文件,输入如下内容:
vi /root/.bash_profile
TERM=xterm
LANG=en_US.UTF-8
export PATH=$PATH
alias vi='vim'
alias ll='ls -lh'
alias la='ls -al'
alias ls='ls -GF'
alias chtdoc='cd /data0/htdocs'
alias cphp='cd /usr/local/webserver/php'
alias cmysql='cd /usr/local/webserver/mysql'
alias capache='cd /usr/local/webserver/apache'
Jackxiang:/root # source .bash_profile
修改加入PHP的路径:
其实不止这些:
1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。
2、修改profile文件:
#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
3. 修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH
看看输出里面是不是已经有了/my_new_path这个路径了。
vi /root/.bash_profile
TERM=xterm
LANG=en_US.UTF-8
export PATH=$PATH
alias vi='vim'
alias ll='ls -lh'
alias la='ls -al'
alias ls='ls -GF'
alias chtdoc='cd /data0/htdocs'
alias cphp='cd /usr/local/webserver/php'
alias cmysql='cd /usr/local/webserver/mysql'
alias capache='cd /usr/local/webserver/apache'
Jackxiang:/root # source .bash_profile
修改加入PHP的路径:
其实不止这些:
1、直接用export命令:
#export PATH=$PATH:/opt/au1200_rm/build_tools/bin
查看是否已经设好,可用命令export查看:
[root@localhost bin]# export
declare -x BASH_ENV="/root/.bashrc"
declare -x G_BROKEN_FILENAMES="1"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="localhost.localdomain"
declare -x INPUTRC="/etc/inputrc"
declare -x LANG="zh_CN.GB18030"
declare -x LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
declare -x LESSOPEN="|/usr/bin/lesspipe.sh %s"
declare -x LOGNAME="root"
declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:"
declare -x MAIL="/var/spool/mail/root"
declare -x OLDPWD="/opt/au1200_rm/build_tools"
declare -x PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin:/opt/au1200_rm/build_tools/bin"
declare -x PWD="/opt/au1200_rm/build_tools/bin"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_ASKPASS="/usr/libexec/openssh/gnome-ssh-askpass"
declare -x SSH_AUTH_SOCK="/tmp/ssh-XX3LKWhz/agent.4242"
declare -x SSH_CLIENT="10.3.37.152 2236 22"
declare -x SSH_CONNECTION="10.3.37.152 2236 10.3.37.186 22"
declare -x SSH_TTY="/dev/pts/2"
declare -x TERM="linux"
declare -x USER="root"
declare -x USERNAME="root"
可以看到,环境变量已经设好,PATH里面已经有了我要加的编译器的路径。
2、修改profile文件:
#vi /etc/profile
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
3. 修改.bashrc文件:
# vi /root/.bashrc
在里面加入:
export PATH="$PATH:/opt/au1200_rm/build_tools/bin"
后两种方法一般需要重新注销系统才能生效,最后可以通过echo命令测试一下:
# echo $PATH
看看输出里面是不是已经有了/my_new_path这个路径了。
在mysql中涉及到编码是最让人头疼的。
编写update.txt (注意:utf8的编码要存为utf8的txt格式,当然你也可以命名后缀改为:update.sql etc)
然后,发现php程序读出来发现是乱码。
查看mysql编码:
mysql> show variables like '%char%';
mysql> show variables like '%char%';
+--------------------------+----------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-max-5.0.27-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+----------------------------------------------------------------------+
8 rows in set (0.00 sec)
原来是:
| character_set_server | latin1 |
不是utf-8:
于是:需要,set names 'utf8';
mysql> set names "utf8";
Query OK, 0 rows affected (0.00 sec)
mysql> source /root/update.txt
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql>
在php中显示中文正常,哈哈哈!
编写update.txt (注意:utf8的编码要存为utf8的txt格式,当然你也可以命名后缀改为:update.sql etc)
source的sql包含中文(位置在/root/update.txt):
update Tbl_User set FAddr="四川内江东兴区平安路148号E栋8号" where FQQ="348813422";
update Tbl_User set FAddr="四川内江东兴区平安路148号E栋8号" where FQQ="348813422";
mysql> use DB_****_2nd;
Database changed
mysql> source /root/update.txt
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
Database changed
mysql> source /root/update.txt
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
然后,发现php程序读出来发现是乱码。
查看mysql编码:
mysql> show variables like '%char%';
mysql> show variables like '%char%';
+--------------------------+----------------------------------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-max-5.0.27-linux-i686-glibc23/share/mysql/charsets/ |
+--------------------------+----------------------------------------------------------------------+
8 rows in set (0.00 sec)
原来是:
| character_set_server | latin1 |
不是utf-8:
于是:需要,set names 'utf8';
mysql> set names "utf8";
Query OK, 0 rows affected (0.00 sec)
mysql> source /root/update.txt
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql>
在php中显示中文正常,哈哈哈!
缘起:
REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
依赖主键或索引Mysql能够实现快速的判断,使用REPLACE,需要同时拥有表的INSERT和DELETE权限。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
添加唯一索引如下,实践成功:
多次replace插入实现修改唯一settingName所对应的值:
多次插入不同的温度值,的确是Ok的:
id 自增编号 settingName 变量名称 settingValue 变量数值 updatedTimes 修改次数
8 settingTempValue 40.7 8388607
正文:
讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。
在 SQL Server 中可以这样处理:
if not exists (select 1 from t where id = 1)
insert into t(id, update_time) values(1, getdate())
else
update t set update_time = getdate() where id = 1
那么 MySQL 中如何实现这样的逻辑呢?别着急!MySQL 中有更简单的方法: replace into
replace into t(id, update_time) values(1, now());
或
replace into t(id, update_time) select 1, now();
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
MySQL replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。
REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
依赖主键或索引Mysql能够实现快速的判断,使用REPLACE,需要同时拥有表的INSERT和DELETE权限。
注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。
添加唯一索引如下,实践成功:
多次replace插入实现修改唯一settingName所对应的值:
多次插入不同的温度值,的确是Ok的:
id 自增编号 settingName 变量名称 settingValue 变量数值 updatedTimes 修改次数
8 settingTempValue 40.7 8388607
正文:
讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。
在 SQL Server 中可以这样处理:
if not exists (select 1 from t where id = 1)
insert into t(id, update_time) values(1, getdate())
else
update t set update_time = getdate() where id = 1
那么 MySQL 中如何实现这样的逻辑呢?别着急!MySQL 中有更简单的方法: replace into
replace into t(id, update_time) values(1, now());
或
replace into t(id, update_time) select 1, now();
replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。
要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。
MySQL replace into 有三种形式:
1. replace into tbl_name(col_name, ...) values(...)
2. replace into tbl_name(col_name, ...) select ...
3. replace into tbl_name set col_name=value, ...
前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。
The Linux Cookbook 一书的作者 Michael Stutz 凭借自己多年使用 UNIX 的经验,总结了 10 个良好习惯,个人认为真的很受用,现摘要如下与大家分享。
1. 建立层级目录:使用 mkdir 的 -p 选项,如 mkdir -p tmp/a/b/c。
2. 解包到指定的目录:使用 tar 的 -C 选项,如 tar xvf newarc.tar.gz -C tmp/a/b/c。
3. 联合命令:使用 ;、&&、|| 等控制运算符,如 cd tmp/a/b/c && tar xvf ~/archive.tar。
4. 小心使用变量:把变量放到 “” 中,如
~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa
~ $ echo "$VARa"
~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $
5. 长命令的输入:使用 \ 分行折断,如
~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar
6. 分组命令:使用 ()、{} 来分组命令,如
~ $ ( cd tmp/a/b/c/ || mkdir -p tmp/a/b/c && \
> VAR=$PWD; cd ~; tar xvf -C $VAR archive.tar ) \
> | mailx admin -S "Archive contents"
7. 使用 xargs:可以过滤输出,如
~/tmp $ ls -l | xargs
-rw-r--r-- 7 joe joe 12043 Jan 27 20:36 December_Report.pdf -rw-r--r-- 1 \
root root 238 Dec 03 08:19 README drwxr-xr-x 38 joe joe 354082 Nov 02 \
16:07 a -rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar -rwxr-xr-x 1 \
joe joe 3239 Sep 30 12:40 mkdirhier.sh
~/tmp $
8. 使用 grep 的 -c 选项可以计算输出的行数,它比使用管道的 wc -l 更快,如
~ $ time grep and tmp/a/longfile.txt | wc -l
2811
real 0m0.097s
user 0m0.006s
sys 0m0.032s
~ $ time grep -c and tmp/a/longfile.txt
2811
real 0m0.013s
user 0m0.006s
sys 0m0.005s
~ $
9. 匹配输出的字段:使用 awk,如
~/tmp $ ls -l | awk '$6 == "Dec"'
-rw-r--r-- 3 joe joe 5096 Dec 14 14:26 archive.tar
-rw-r--r-- 1 root root 238 Dec 03 08:19 README
~/tmp $
10. 停用 cat 的管道输出:可用 grep 代替,如
~ $ time cat tmp/a/longfile.txt | grep and
2811
real 0m0.015s
user 0m0.003s
sys 0m0.013s
~ $ time grep and tmp/a/longfile.txt
2811
real 0m0.010s
user 0m0.006s
sys 0m0.004s
~ $
export
例如:
export $HOME=$HOME:YOUR_DIR
set 显示当前shell的变量,包括当前用户的变量
env 显示当前用户的变量
export 显示当前导出成用户变量的shell变量
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如 HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
如用户想增加一目录到PATH中,操作如下:
1.vim .bashrc增加sbin目录到PATH中
$export PATH=$PATH:/sbin 或者export PATH=/sbin:$PATH
2.source到环境变量中
$source
3.查验
set|grep PATH 或env|grep PATH 或 export|grep PATH
这个set 和export很重要:
set env export区别
set 显示当前shell的变量,包括当前用户的变量
env 显示当前用户的变量
export 显示当前导出成用户变量的shell变量
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如 HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
如用户想增加一目录到PATH中,操作如下:
1.vim .bashrc增加sbin目录到PATH中
$export PATH=$PATH:/sbin 或者export PATH=/sbin:$PATH
2.source到环境变量中
$source
3.查验
set|grep PATH 或env|grep PATH 或 export|grep PATH
.bashrc和.bash_profile区别
.bash_profile会用在login shell
.bashrc 使用在interactive non-login shell
Bash下每个用户都可以配置两个初始文件:.bash_profile和.bashrc。man bash中的相关解
释如下:
,------------------------------------------------------------
| ~/.bash_profile
| The personal initialization file, executed for login shells
| ~/.bashrc
| The individual per-interactive-shell startup file
`------------------------------------------------------------
* 每次bash作为login shell启动时会执行.bash_profile。
* 每次bash作为普通的交互shell(interactive shell)启动时会执行.bashrc
** 注意
1, 在shell脚本中“#!/usr/bin/bash”启动的bash并不执行.bashrc。因为这里的bash不是
interactive shell。
2, bash作为login shell(login bash)启动时并不执行.bashrc。虽然该shell也是interactive shell,
但它不是普通的shell。
* 一般.bash_profile里都会调用.bashrc
尽管login bash启动时不会自动执行.bashrc,惯例上会在.bash_profile中显式调用.bashrc。
.bashrc 使用在interactive non-login shell。意思是你每次运行一个bash脚本的话,.bashrc就会被执行一次。有个简单的方法,你在.bash_profile和.bashrc里都用echo打印点什么东西。你就可以看到着两个文件都是什么时候被执行的了.
显示环境变量HOME
$ echo $HOME
设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
使用env命令显示所有的环境变量
$ env
使用set命令显示所有本地定义的Shell变量
$ set
还可以使用export设置
如:
#export DISPLAY=127.0.0.1:0.0
编辑/etc/profile修改全局环境变量
编辑.bash_profile修改当前用户的环境变量
例如:
export $HOME=$HOME:YOUR_DIR
set 显示当前shell的变量,包括当前用户的变量
env 显示当前用户的变量
export 显示当前导出成用户变量的shell变量
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如 HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
如用户想增加一目录到PATH中,操作如下:
1.vim .bashrc增加sbin目录到PATH中
$export PATH=$PATH:/sbin 或者export PATH=/sbin:$PATH
2.source到环境变量中
$source
3.查验
set|grep PATH 或env|grep PATH 或 export|grep PATH
这个set 和export很重要:
set env export区别
set 显示当前shell的变量,包括当前用户的变量
env 显示当前用户的变量
export 显示当前导出成用户变量的shell变量
每个shell有自己特有的变量(set)显示的变量,这个和用户变量是不同的,当前用户变量和你用什么shell无关,不管你用什么shell都在,比如 HOME,SHELL等这些变量,但shell自己的变量不同shell是不同的,比如BASH_ARGC, BASH等,这些变量只有set才会显示,是bash特有的,export不加参数的时候,显示哪些变量被导出成了用户变量,因为一个shell自己的变量可以通过export “导出”变成一个用户变量。
如用户想增加一目录到PATH中,操作如下:
1.vim .bashrc增加sbin目录到PATH中
$export PATH=$PATH:/sbin 或者export PATH=/sbin:$PATH
2.source到环境变量中
$source
3.查验
set|grep PATH 或env|grep PATH 或 export|grep PATH
.bashrc和.bash_profile区别
.bash_profile会用在login shell
.bashrc 使用在interactive non-login shell
Bash下每个用户都可以配置两个初始文件:.bash_profile和.bashrc。man bash中的相关解
释如下:
,------------------------------------------------------------
| ~/.bash_profile
| The personal initialization file, executed for login shells
| ~/.bashrc
| The individual per-interactive-shell startup file
`------------------------------------------------------------
* 每次bash作为login shell启动时会执行.bash_profile。
* 每次bash作为普通的交互shell(interactive shell)启动时会执行.bashrc
** 注意
1, 在shell脚本中“#!/usr/bin/bash”启动的bash并不执行.bashrc。因为这里的bash不是
interactive shell。
2, bash作为login shell(login bash)启动时并不执行.bashrc。虽然该shell也是interactive shell,
但它不是普通的shell。
* 一般.bash_profile里都会调用.bashrc
尽管login bash启动时不会自动执行.bashrc,惯例上会在.bash_profile中显式调用.bashrc。
.bashrc 使用在interactive non-login shell。意思是你每次运行一个bash脚本的话,.bashrc就会被执行一次。有个简单的方法,你在.bash_profile和.bashrc里都用echo打印点什么东西。你就可以看到着两个文件都是什么时候被执行的了.
显示环境变量HOME
$ echo $HOME
设置一个新的环境变量hello
$ export HELLO="Hello!"
$ echo $HELLO
使用env命令显示所有的环境变量
$ env
使用set命令显示所有本地定义的Shell变量
$ set
还可以使用export设置
如:
#export DISPLAY=127.0.0.1:0.0
编辑/etc/profile修改全局环境变量
编辑.bash_profile修改当前用户的环境变量
pHP是一种新型的CGI程序编写语言,易学易用,运行速度快,可以方便快捷地编写出功能强大,运行速度快,并可同时运行于 Windows、Unix、Linux平台的Web后台程序, 内置了对文件上传、密码认证、Cookies操作、邮件收发、动态GIF生成等功能,PHP 直接为很多数据库提供原本的连接,包括Oracle、Sybase、Postgres、Mysql、Informix、Dbase、Solid、 Access等,完全支持ODBC接口,用户更换平台时,无需变换PHP代码,可即拿即用.
阅读全文
阅读全文
今天发现httpwacher出现aborted,查了下:
he result column in HttpWatch may sometimes display the value (Aborted) instead of an HTTP status code:
(Aborted)
(Aborted) is one of three pseudo status codes that are used in HttpWatch to display information about HTTP requests that did not receive a status code from the server:
* (Aborted)
* (Cache)
* ERROR_*阅读全文
he result column in HttpWatch may sometimes display the value (Aborted) instead of an HTTP status code:
(Aborted)
(Aborted) is one of three pseudo status codes that are used in HttpWatch to display information about HTTP requests that did not receive a status code from the server:
* (Aborted)
* (Cache)
* ERROR_*阅读全文
经过仔细考虑,我认为数据库导入乱码问题不只跟数据库编码不仅与数据库默认编码有问题。因此,参照网上资料得出以下解决方案:
1、确定数据库默认编码,比如编码为gbk,将读入途径编码同样设为gbk,命令为:
set names gbk;
2、source d:/20080613.sql 导入数据。验证数据库中的数据是否存在乱码。
3、如果仍然存在乱码问题,这时候就要考虑改变导入文件的编码,试着导入,直至没有乱码出现。
网页数据存入乱码问题依照以上方法同样可以解决。可将网页编码改为与数据库相同的编码。问题自然解决。
另外,在windows中文件路径 d:\ftptemp\test.sql 应写成 d:/ftptemp/test.sql
我再加一句:在set names gbk前看一下:
show variables like '%char%';
1、确定数据库默认编码,比如编码为gbk,将读入途径编码同样设为gbk,命令为:
set names gbk;
2、source d:/20080613.sql 导入数据。验证数据库中的数据是否存在乱码。
3、如果仍然存在乱码问题,这时候就要考虑改变导入文件的编码,试着导入,直至没有乱码出现。
网页数据存入乱码问题依照以上方法同样可以解决。可将网页编码改为与数据库相同的编码。问题自然解决。
另外,在windows中文件路径 d:\ftptemp\test.sql 应写成 d:/ftptemp/test.sql
我再加一句:在set names gbk前看一下:
show variables like '%char%';
1 .create database test default charset GBK
2.修改MYSQL数据库编码,如果是MYSQL数据库编码不正确: 可以在MYSQL执行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin (这个命令就是将MYSQL的test数据库的编码设为utf8)
3.ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin (这个命令用来修改MYSQL表的编码)
以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将MYSQL数据库test表中 dd的字段编码改为utf8
2.修改MYSQL数据库编码,如果是MYSQL数据库编码不正确: 可以在MYSQL执行如下命令: ALTER DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin (这个命令就是将MYSQL的test数据库的编码设为utf8)
3.ALTER TABLE `category` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin (这个命令用来修改MYSQL表的编码)
以上命令就是将一个表category的编码改为utf8
4.修改字段的编码:
ALTER TABLE `test` CHANGE `dd` `dd` VARCHAR( 45 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
以上命令就是将MYSQL数据库test表中 dd的字段编码改为utf8