mysql 学习笔记

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 -u 用户名 -p 数据库名 > 导出的文件名    
 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.sql

2.导出一个表
 mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
 mysqldump -u wcnc -p smgp_apps_wcnc users> wcnc_users.sql

3.导出一个数据库结构
  mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc >d:\wcnc_db.sql
 -d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table 
 
4.导入数据库
  常用source 命令
  进入mysql数据库控制台,
  如mysql -u root -p
 

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

知识共享许可协议
作品Tim Zhang创作,采用知识共享署名 3.0 中国大陆许可协议进行许可。 。
原文地址:https://www.cnblogs.com/ccdc/p/2536723.html