mysql 笔记

mysql平时用得不多   最近做的项目里面数据库操作很多  遇到一些实用的操作  记录一下

create table havenot_topup20140925
(
	SELECT DISTINCT vc_mobile as number FROM npn_account_bind WHERE ti_type = '2' 
	AND vc_mobile NOT IN 
	( 
		SELECT DISTINCT vc_mobile FROM npn_account_bind WHERE ti_type = '2'
		AND vc_account IN 
		( 
			SELECT DISTINCT vc_account FROM npn_hsbc 
		) 
	) 
)

这是同事写的代码,我以前没这么用过,

这样创建一个临时表,这个表只有数据,没有主键索引之类的东西  用完我们要手动删除

使用上我们称之为临时表  其实在mysql中临时表是这么定义的

CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
这样定义的临时表在断开数据库后会自动销毁


如果有两个表需要合并 a表有10个字段  b表只有5个字段 b表中的字段a表都有  a表中除了这五个字段其他字段可以为null

合并完全没有问题是吧

我第一次这样写的:

insert into a ( select * from b  )
它会提示你两个表字段不匹配,正确的写法是这样做的:

insert into a (c1,c2,c3,c4,c5) ( select c1,c2,c3,c4,c5 from b )
</pre><p></p><p></p>接下来是一个最坑爹的事情:<p>我要把远程一个数据库db的a表导到本地 ,直接在mysql命令行下面操作了一下还ok</p><p>最后我要用php执行这句话的时候就遇到各种不快了</p><p>ps:下面的代码是php写的  其他语言都会有 一个类似exec的函数去执行系统的shell命令</p><p></p><pre code_snippet_id="554318" snippet_file_name="blog_20141217_6_4911625" name="code" class="php">system('E:/UinServer/UniServer/usr/local/mysql/bin/mysqldump.exe -h203.23.123.33 -P3306 -uroot -p"abc!@#$%^" db a > a.sql',$rt) ;
		if ( $rt != 0 )  die( "导出数据表失败 " ) ;
看一下容易出错的地方,如果安装mysql添加了path环境变量的都知道打开cmd直接输入mysqldump就有效,我也是这样的,但是!!!

放到程序里面一定要把mysqldump.exe的路径写出来,我刚开始就没写,半天不知道哪里错了 

第二个问题,有没有发现我的密码中又特殊字符,我把上面执行的语句直接放大mysql命令行中执行,error报错  说我密码错误,我就把密码取消了  等回车在输入密码

正确,没问题,密码中的特殊字符在cmd中我不知道起到了什么作用 ,但是肯定有干扰,于是我加上了单引号,奇迹发生了  还是报错  密码错误   这些我懵了

然后问公司的同事  都没有解决  我无意中把单引号改成了双引号  尼玛  windows就是个奇葩

windows上折腾了一番还不算,服务器是linux的  本地测好了还要到服务器上测试一下:

system('/var/www/mysqldump -h203.23.123.33 -P13306 -uroot -p'abc!@#$%^'  db a> a.sql',$rt) ;
		if ( $rt != 0 )  die( "导出数据表失败 " ) ;
眼力2.0人已经发现两个写法有些不同了  下面来看 为什么 why:

首先打开shell  首先把语句放进去跑一下 

mysqldump -h203.23.123.33 -P13306 -uroot -p"abc!@#$%^"  db a> a.sql

====bash  @#$%^ is not found 大概意思就是把感叹号后面的东西作为bash指令了,

我这次很机灵  马上把双引号换成单引号  因为我知道双引号在shell里面会被解释

ok 完美通关

开始把代码放到php里面去,首先mysqldump的路径是要变换的 在linux中可执行文件很多都是没有后缀的  

不要自作聪明在后面加个.exe , 好  路劲我改好了  运行没效果,在php里面把命令输出来 复制到shell命令行下面能执行

但是为啥子在php中就不行了呢  开始谷歌了  不经意间发现 权限 两个字  马上想起来 mysqldump在目录/usr/bin下面

php作为apache的一个模块没有权限访问这个目录,解决方法就是用root管理员账号登陆系统  把mysqldump复制到一个普通用户可访问的目录,

我这里复制到了/var/www目录  还要把权限设置为0755

回到程序中执行 代码开始执行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值