1、条件语句:
select if(c.cname IS NULL,b.cname,c.cname) as cname from pw_colonys a left join pw_cnstyles b on a.styleid=b.id left join pw_cnstyles c on b.upid = c.id where a.id = 13
select IF ( (select name from table1) IS NOT NULL, (select name from table2) , (select name from table3) ) as name
2、导出数据结构:
mysqldump -d -uroot -p database>databaseStr.sql
1.备份全部数据库的数据和结构
mysqldump -uroot -p123456 -A >F:\all.sql
2.备份全部数据库的结构(加 -d 参数)
mysqldump -uroot -p123456 -A -d>F:\all_struct.sql
3.备份全部数据库的数据(加 -t 参数)
mysqldump -uroot -p123456 -A -t>F:\all_data.sql
4.备份单个数据库的数据和结构(,数据库名mydb)
mysqldump -uroot -p123456 mydb>F:\mydb.sql
5.备份单个数据库的结构
mysqldump -uroot -p123456 mydb -d>F:\mydb.sql
6.备份单个数据库的数据
mysqldump -uroot -p123456 mydb -t>F:\mydb.sql
7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
mysqldump -uroot -p123456 mydb t1 t2 >f:\multables.sql
8.一次备份多个数据库
mysqldump -uroot -p123456 --databases db1 db2 >f:\muldbs.sql
还原:
1.还原全部数据库:
(1) mysql命令行:mysql>source f:\all.sql
(2) 系统命令行: mysql -uroot -p123456 <f:\all.sql
2.还原单个数据库(需指定数据库)
(1) mysql>use mydb
mysql>source f:\mydb.sql
(2) mysql -uroot -p123456 mydb <f:\mydb.sql
3.还原单个数据库的多个表(需指定数据库)
(1) mysql>use mydb
mysql>source f:\multables.sql
(2) mysql -uroot -p123456 mydb <f:\multables.sql
4.还原多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库)
(1) mysql命令行:mysql>source f:\muldbs.sql
(2) 系统命令行: mysql -uroot -p123456 <f:\muldbs.sql
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
用户:
1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限
mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
2、修改密码
mysql> UPDATE user SET password=PASSWORD("new password") WHERE user='name'; mysql> FLUSH PRIVILEGES;
shell
1、设置连接字符接
mysql -u root -p --default-character-set=utf8
3、相关问题
错误:MySQL server has gone away
1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。 [1]
解决方案:
在my.cnf(windows下my.ini)文件中添加或者修改以下两个变量:
wait_timeout=2880000
interactive_timeout = 2880000
关于两个变量的具体说明可以google或者看官方手册。如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)
2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理
解决方案:
在my.cnf文件中添加或者修改以下变量:
max_allowed_packet = 10M(也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
方案二[2]
#进入mysql server set global max_allowed_packet = 2*1024*1024*10 #查看下max_allowed_packet是否编辑成功: show VARIABLES like '%max_allowed_packet%';
[1] mdxy-dxy.MySQL server has gone away 问题的解决方法[EB/OL].[2014-03-07].http://www.jb51.net/article/23781.htm
[2] 瓜田守望者.mysql max_allowed_packet 查询和修改[EB/OL].[2014-03-07].http://smilemonkey.iteye.com/blog/660889