Benjamin

静以修身,俭以养德,非澹薄无以明志,非宁静无以致远。
随笔 - 397, 文章 - 0, 评论 - 196, 引用 - 0
数据加载中……

mysql常用操作(不断更新中)

登陆:mysql -uroot -p u表示用户,p表示密码

show variables like 'character\_set\_%';
latin1_bin 
西欧 (多语言), 二进制 
 
binary 
二进制 

1.查看和清除mysql日志

如果想要关闭二进制mysql日志,可以在my.ini里把log-bin这行注释掉

要清二进制日志的话,在mysql开启了二进制日志的状态下,以root身份登录mysql以后执行下面两个命令之一:
PURGE MASTER LOGS before '2020-1-1';        清除指定日期之前的二进制日志
PURGE MASTER LOGS TO 'mysql-bin.010';        清除指定文件编号之前的二进制日志
注意,如果没运行命令而是直接删除mysql-bin.xxx文件的话,mysql-bin.index里仍然记录了日志文件列表,这样以后再清日志时,就会因找不到列表中的日志文件而无法清理mysql日志
可以用bin目录中的mysqlbinlog.exe查看mysql二进制日志。
C:\>mysqlbinlog mysql-bin.000001
如果my.ini中设置了字符集的话,可能会出现这以下这样的报错
mysqlbinlog: unknown variable 'default-character-set=gbk'
带上--no-defaults参数后即可解决
C:\>mysqlbinlog --no-defaults mysql-bin.000001
如果是要清理*.err日志的话,直接停止mysql数据库,将这个文件剪切走或者删除,重启mysql生成一个新的即可。

.err文件中实际是以文本方式保存的错误提示,可以直接用记事本打开查看。

 

2.清空某个mysql表中所有内容
delete from 表名;
truncate table 表名;
不带where参数的delete语句可以删除mysql表中所有内容,使用truncate table也可以清空mysql表中所有内容。效率上truncate比delete快,但truncate删除后不记录mysql日志,不可以恢复数据。
delete的效果有点像将mysql表中所有记录一条一条删除到删完,而truncate相当于保留mysql表的结构,重新创建了这个表,所有的状态都相当于新表。

3.查看编码
查看数据库的字符集    show variables like 'character\_set\_%';
latin1_bin 
西欧 (多语言), 二进制 
 
binary 
二进制 
mysql>create database mydb character set utf-8;#直接指定其编码
直接通过命令进行修改
set character_set_client=utf8;
set character_set_connection=utf8;
set character_set_database=utf8;
set character_set_results=utf8;
set character_set_server=utf8;
修改完了之后再查询
show variables like 'character\_set\_%';
+--------------------------+--------+
| 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     | utf8   |
| character_set_system     | utf8   |
+--------------------------+--------+

 

/*查询当前数据库默认字符设置*/
show variables like 'char%';
/*查询当前数据库默认的校验字符集*/
show variables like 'collation%'

 


结果全部都调整修改成UTF-8了!
MySQL字符集编码的类型种类
gb2312_chinese_ci和gbk_chinese_ci以及gb2312_bin,gbk_bin的区别
gb2312_chinese_CI : 只支持简体中文
gb2312_BIN   :而gb2312_bin可以说是gb2312_chinese_ci的一个子集,
而且gb2312_BIN是二进制存储.区分大小写数据库编码格式就意义不一样了
gbk_chinese_CI   支持简体中文和繁体
gbk_bin   解释同gb2312_BIN     对应gbk_chinese_CI
PS:GBK包括了简体与繁体两种类型

查看数据库表中字段的字符集设置-----------show create table TableName 或 show full columns from tableName
查看数据库的编码格式---------------------show create database test;
修改数据库的字符集
   mysql>use mydb
   mysql>alter database mydb character set utf-8;

4、mysqldump导出mysql备份:注意的是mysqldump在mysql的bin目录执行才可以(windows)语法:
mysqldump -uroot -p database_name table_name > c:\table.sql;
导入命令用source,source命令在mysql的提示符下才可以执行。
在mysqldump时可以指定其字符集,用--default-character-set=gbk
-d(--no-data),表示只导出表结构,
-t,说明只导出表数据,不到表结构;如果不加-d或者-t,默认导出表结构和表数据


如果表的主键是自动增长型(AUTO_INCREMENT),在插入数据时,如果出现异常,表中
AUTO_INCREMENT的值就会变一个很大的值,和你设置的这个类型的位数一样宽,这些在插入时不报错,
只有在读出时用才会发现;由于这些数据实际上是无效的,所以必须删掉这些数据,然后
修改表结构(用alter)将AUTO_INCREMENT设置成1,然后就可以正常插入数据


root密码管理设置root用户的密码mysqladmin -uroot password 'password'。
修改root用户的密码mysqladmin -uroot -p password 'password'。
数据库,表管理进入mysqlmysql -h hostname -uroot -p。

查看数据库:mysql> show databases;
进入某个库:mysql> use location;
查看表信息:mysql> show tables;
查看表结构:mysql> desc Contact;
改表名:mysql> rename table Contact to Contact_new。
删除库:           mysql> drop database location。
删除表:         mysql> drop table Contact。
授权部分建立用户并授权:  mysql> grant all on location.* to gk1020@'10.1.11.71' identified by 'gk1020'。
取消授权:        mysql> revoke all on location.* from gk1020@'10.1.11.71'
刷新权限:        mysql> flush privileges。
操作语句查询:  mysql> select * from Contact。
                     mysql> select count(*) from Contact。
修改:              mysql> update Contact set RegTime=‘2008-01-01 00:00:00' where id=1。
                     mysql> update Contact set RegTime=‘2008-01-01 00:00:00',CID=1 where id=1。
插入:              mysql> insert into Contact values('',''…)
                     mysql> insert into Contact(ID,CID,Contact) values('',''…)
删除:              mysql> delete from Contact where id=1。
导出数据库:locationmysqldump -uroot -p location >./location.sql。
导出某个表:     mysqldump -uroot -p --database location --table Contact >./contact.sql。
导出数据库:     location的数据结构mysqldump -d -uroot -p location >./location.sql。
复制表复制表:  Contact为Contact_bakmysql> create table Contact_bak as select * from Contact。
复制表Contact的结构:mysql> create table Contact_bak as select * from Contact where 1=2。
查看正在执行的任务:mysql> show processlist。 

mysql db_name < data_file.sql

执行完命令之后如果没有任何提示,则说明我们的数据已经导入成功了(注意文件格式是date_file.sql, sql.gz在中文下会出错) 。

———————–2008.12.9 update———————-

有些时候你可能会遇到错误信息,说你的权限不够,那我们就需要加一些参数了。

mysql -hlocalhost -uusername -p db_name < data_file.sql

这样回车之后,就会有输入密码的提示,然后输入你的数据库密码就可以导入了。

参数-h是指定导入的服务器,-u是数据库的用户名,-p是登录数据库的密码,这三个参数后面不用加空格。


查看表结构:
desc 表名;/*显示表结构的基本信息,不包括注释等*/
show columns from 表名;
describe 表名;
show create table 表名;

 

show full columns from tbName;   /*显示列的所有详细信息包括注释等*/
show create database(table) dbname;   /*显示创建数据库(表)语句*/

mysql命令行下查看某个命令用?,例如
? data type    /*查看数据支持类型*/
? data definition  /*查看mysql自定义操作语句*/
? show      /*查看show命令相关说明*/

 

一个table有id,name,content字段
只导出content字段的所有记录,怎么导?
注意下面提高的导入和导出语句是在mysql的提示符下进行
导入:select content from table_name into outfile "d:/test.sql";(如果是多个字段可以用逗号将其分开)
导出:LOAD DATA INFILE 'd:/test.sql' INTO TABLE table_name (content);

 

select count(*) as total from 表名

 

SQLyog 连不上MySQL , ERROR NO.1045 简单的解决方法 .
1。停止MySQL服务:运行net stop mysql
linux是/etc/init.d/mysql stop
 

2。修改MySQL源文件夹中的my.ini,运用查找功能找到【mysqld】,在其下加上一行 skip-grant-tables,保存。
linux下的配置文件是my.cnf,也要加上这一行skip-grand-tables。
 

3。启动MySQL服务:运行net start mysql
linux下的启动命令是/etc/init.d/mysql start

 

SELECT   *   FROM   table   LIMIT   5;  显示前五条
select     *     from     issu_info     limit     7,6;      
Limit     7,6       从第8条开始取,取6条

在mysql中利用select语句的一个特性就可以很方便地实现查询结果的分页,select语句的语法:
SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY]
[DISTINCT | DISTINCTROW | ALL]
select_expression,...
[INTO OUTFILE 'file_name' export_options]
[FROM table_references
[WHERE where_definition]
[GROUP BY col_name,...]
[HAVING where_definition]
[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...]
[LIMIT [offset,] rows]
[PROCEDURE procedure_name] ]

查看版本:进入mysql命令行:\s 或status

安装mysql错误:
 MySQL 5.5.14
– Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readline.cmake:82 (MESSAGE):
Curses library not found. Please install appropriate package,

remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:126 (FIND_CURSES)
cmake/readline.cmake:216 (MYSQL_USE_BUNDLED_LIBEDIT)
CMakeLists.txt:256 (MYSQL_CHECK_READLINE)

– Configuring incomplete, errors occurred!

如果你的系统是Ubuntu或Debian:

apt-cache search ncurses

apt-get install libncurses5-dev

需要安装ncurses-devel包--- apt-get install libncurses5-dev 或者sudo apt-get install libncurses5-dev

libncurses5-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 250 not upgraded.

提示已经是最新的了,不用更新

linux下的mysql的配置文件:/etc/mysql/my.cnf

linux下mysql的重启:service mysql restart
是否启用了日志
mysql>show variables like 'log_bin';

怎样知道当前的日志文件---具体的路径在mysql的配置文件中
mysql> show master status;

查看从某一段时间到某一段时间的日志
 
mysqlbinlog --start-datetime='2008-01-19 00:00:00' --stop-datetime='2008-01-30 00:00:00'  /var/log/mysql/mysql-bin.000006 > mysqllog1.log


apt-get install mysql-devel命令提示如下”
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package mysql-dev
解决方法:搜索aptitude search mysql | grep devel
p   liblua5.1-sql-mysql-dev         - luasql development files for the Lua langu
p   libmysql++-dev                  - MySQL C++ library bindings (development)
i   libmysqlclient-dev              - MySQL database development files
p   libmysqlcppconn-dev             - MySQL Connector for C++ (development files
p   libmysqld-dev                   - MySQL embedded database development files
p   libmysqld-pic                   - MySQL database development files
然后apt-get install libmysqlclient-dev即可
在g++时将-lmysqlclient写入到Makefile文件中就可以了。

 

mysql---1130错误解决办法:原因是不允许远程连接到这个数据库
在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”,重启mysql服务-----windows下

mysql -u root -p

mysql>use mysql;

mysql>update user set host = ‘%’ where user =’root’;

mysql>flush privileges;

mysql>select ‘host’,'user’ from user where user=’root’;

上面这种方法虽然解决远程访问的问题,却使得mysql主机的用户无法登录,所以下面的方法比较靠谱:

授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。

GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'%’ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码

GRANT ALL PRIVILEGES ON *.* TO ‘myuser’@'192.168.1.3′ IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;


使用mysql 的use db_name的时候提示

Reading table information for completion of table and column names. 
You can turn off this feature to get a quicker startup with -A
原因是由于数据库太大,即数据库中表非常多,所以如果预读数据库信息,将非常慢,所以就卡住了,如果数据库中表非常少,将不会出现问题。
改进方法:mysql -u name -p -A(表示不用预读数据库信息)

 mysql命令,加上\G:表示要换行显示

设置分页显示到屏幕:mysql> pager more或者pager less;

pager后面能跟上grep(过滤),awkwc等常见的Unix bash shell
pager实际上等于将它设置以后的所有mysql操作命令的输出通过pager设置命令执行,类似于管道符的作用
例如:当处理大量数据时,不想显示查询的结果,而只需知道查询花费的时间。
mysql> pager cat /dev/null;        //实际上等于后面执行的命令|cat /dev/null,这样显示结果就只是执行时间了
PAGER set to 'cat /dev/null'
例如:有大量连接,用show processlist看不方便,想看有多少Sleep状态,则可以用pager。
mysql> pager grep Sleep |wc -l;    
PAGER set to 'grep Sleep |wc -l'
mysql> show processlist; //类似于show processlist结果再通过grep Sleep |wc -l显示;下面表示一共有2个连接,其中0个Sleep状态的连接。
0

mysql> pager cat>/home/pw/osq.txt;将输出发送到文件中
less说明:
退出:“:q”
下一页:“F”
上一页:“B”
tee说明
mysql>tee filename
可以将之后在mysql的所有输入输出操作记录到filename中。


nopager命令:取消pager设置,恢复之前的输出状态。(如果不设置nopager,那么只能通过重启mysql服务才能恢复了)

mysql下实行系统命令:mysql>system clear;(执行系统下的清屏命令)
MySQL不能启动 mysql-bin.index' not found (Errcode: 13)
原来是因为文件夹权限的问题。刚才新建的目录binlogs是在root下面的。
[root@XXXX mysql]# pwd
/var/lib/mysql
[root@XXXX mysql]# chown -R mysql:mysql binlogs
[root@XXXX mysql]#
[root@XXXX mysql]# /etc/init.d/mysql restart
MySQL manager or server PID file could not be found!       [FAILED]
Starting MySQL.                                            [  OK  ]
SQL Server 多表更新方法(语法)
//----------------------------------
SQL Server语法:UPDATE { table_name WITH ( < table_hint_limited > [ ...n ] ) |
view_name | rowset_function_limited } SET { column_name = { expression | DEFAULT
| NULL } | @variable = expression | @variable = column = expression } [ ,...n ]
{ { [ FROM { < table_source > } [ ,...n ] ] [ WHERE < search_condition > ] } | [
WHERE CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] } [
OPTION ( < query_hint > [ ,...n ] ) ]
MySql跨表更新 多表update sql语句  将select出来的部分数据update到另一个表里面
update behavior_redman_count a
inner join(
 select memberId,count(*) as followingCount from behavior_follow where type = 10
 and isDelete=0 group by memberId
)b set a.followingCount =b.followingCount where a.redmanId = b.memberId;
其他:
//有条件的更新
UPDATE t_player_baseinfo SET SID=(SELECT id from sg_gamedb.t_gameserver where id>0 LIMIT 1);
//两个表互联更新(同时更新两个表 如果两个表的nick_name自动相同,则分别更新nick_name)
UPDATE sg_gamedb1.t_player_baseinfo a INNER JOIN sg_gamedb2.t_player_baseinfo b on a.nick_name = b.nick_name set
a.nick_name = CONCAT('[s',a.SID,']',a.nick_name),b.nick_name = CONCAT('[s',b.SID,']',b.nick_name);

posted on 2011-10-16 09:52 Benjamin 阅读(1108) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理