MySql数据库基本操作

下面是一些MySql数据库在windows上的基本操作,包括数据库的启动、关闭、连接、汉字乱码的解决、以InnoDB存储方式启动数据库、主从复制等内容,以mysql-noinstall-5.0.51b-win32.zip这个版本为例。

==================
命令行下的数据库启动

最简单的启动方式(所有参数均是默认值):mysqld --console
在一台计算机上启动多个数据库,就需要指定用不同的端口: mysqld --port=3307 --console

假如启动参数比较多,可使用配置文件的方式。mysqld以以下顺序寻找默认配置文件:
C:/my.ini (系统盘根路径下)
C:/my.cnf (系统盘根路径下)
C:/Windows/my.ini (系统安装目录下)
C:/Windows/my.cnf (系统安装目录下)
D:/mysql-5.0.51b-win32/my.ini (MySql安装目录下)
D:/mysql-5.0.51b-win32/my.cnf (MySql安装目录下)

可以用以下方法指定配置文件:
mysqld --defaults-file=D:/mysql-5.0.51b-win32/my-innodb.ini --console
配置文件的格式如下:
[mysqld]
default-character-set=gbk
default_table_type = INNODB
==================
命令行下的数据库关闭:
默认端口的关闭:mysqladmin -u root shutdown
指定数据库端口的关闭:mysqladmin -u root --port=3306 shutdown
==================
连接服务器:
mysql -h host -u user -p
mysql -h host -u user -p db_name (连接后进入db_name数据库)
mysql -h host -u user -ppassword (注意-p后面没有空格,直接是密码)
mysql -h host -u user -p --port=3306
==================
查看版本号和当前日期:SELECT VERSION(), CURRENT_DATE;
查看当前日期时间:SELECT NOW();
查看当前登录用户:select user();
查看当前数据库:SELECT DATABASE();
显示所有数据库:SHOW DATABASES;
显示所有表:SHOW TABLES;
显示表结构:DESCRIBE table_name;
==================
输入多行命令,想取消时,输入/c
==================
注释
从‘#’字符从行尾。
从‘-- ’序列到行尾。
从/*序列到后面的*/序列。
==================
使用一个数据库:USE db_name
创建数据库:CREATE DATABASE db_name
==================
使用用户变量
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price;
==================
使用AUTO_INCREMENT
CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
 );
要想以AUTO_INCREMENT值开始而不是1,你可以通过CREATE TABLE或ALTER TABLE来设置该值,如下所示:
ALTER TABLE tbl AUTO_INCREMENT = 100;
==================
创建新用户:
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
         ON bankaccount.*
         TO 'custom'@'localhost'
         IDENTIFIED BY 'obscure';
INSERT INTO user
         VALUES('localhost','monty',PASSWORD('some_pass'),
         'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
FLUSH PRIVILEGES;

删除用户:
drop user user_name;

修改密码:
UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';
FLUSH PRIVILEGES;

SET PASSWORD FOR 'abe'@'host_name' = PASSWORD('eagle');
修改自己的密码:SET PASSWORD = PASSWORD('biscuit');
修改密码不影响权限:GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
==================
备份与恢复
一、直接备份数据文件
1、lock tables table1 read,table2 read;
2、FLUSH TABLES table1,table2;
3、把数据文件备份
4、unlock tables;
5、恢复时把数据文件复制回去

此方法与BACKUP TABLE tbl_name [, tbl_name] ... TO '/path/to/backup/directory'类似。

二、导出为一个文本文件
1、select * into OUTFILE 'd:/test_bak.sql' from test;
2、恢复时删除数据,然后
   LOAD DATA LOCAL INFILE 'd:/test_bak.sql' INTO TABLE test;

三、备份整个数据库
1、mysqldump -h localhost -u root -p --single-transaction --databases st > d:/tmp/backup_1.sql
   mysqldump -h localhost -u root -p --single-transaction --all-databases > d:/tmp/backup_1.sql
2、恢复时:mysql -h localhost -u root -p < d:/tmp/backup_1.sql

四、增量备份
1、备份:mysqldump -h localhost -u root -p --single-transaction --all-databases > d:/tmp/backup_1.sql
2、启动生成二进制日志:mysqld --log-bin=D:/mysql-5.0.51b-win32/data/log-bin --console
3、恢复时:
   全量恢复:mysql -h localhost -u root -p < d:/tmp/backup_1.sql
   恢复到指定日志文件:mysqlbinlog D:/mysql-5.0.51b-win32/data/log-bin.000001 | mysql  -h localhost -u root -p
==================
显示数据库所用字符集:SHOW CREATE DATABASE st;
修改数据库默认字符集:alter database st DEFAULT CHARACTER SET utf8 COLLATE  utf8_bin;
修改表字符集:alter table test DEFAULT CHARACTER SET gbk COLLATE  gbk_chinese_ci;
修改字段字符集:alter table test change col2 col2 varchar(10)  CHARACTER SET gbk COLLATE  gbk_chinese_ci;

显示字符集相关的变量:SHOW VARIABLES LIKE 'char%';
显示校对规则相关的变量:SHOW VARIABLES LIKE 'collation%';
==================
MySql汉字乱码问题的解决
1、启动数据库时指定字符集
   mysqld --console --default-character-set=gbk
2、创建数据库时指定字符集
   mysql> create dababase st DEFAULT CHARACTER SET gbk COLLATE  gbk_chinese_ci;
3、解决console乱码问题,只影响console下的显示和数据库操作:
   mysql> set character_set_client=gbk;
   mysql> set character_set_connection=gbk;
   mysql> set character_set_results=gbk;
最后结果是:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | gbk                                    |
| character_set_connection | gbk                                    |
| character_set_database   | gbk                                    |
| character_set_filesystem | binary                                 |
| character_set_results    | gbk                                    |
| character_set_server     | gbk                                    |
| character_set_system     | utf8                                   |
| character_sets_dir       | D:/mysql-5.0.51b-win32/share/charsets/ |
+--------------------------+----------------------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+----------------+
| Variable_name        | Value          |
+----------------------+----------------+
| collation_connection | gbk_chinese_ci |
| collation_database   | gbk_chinese_ci |
| collation_server     | gbk_chinese_ci |
+----------------------+----------------+
3 rows in set (0.00 sec)

4、在jsp指定字符集:
<%@ page language="java" contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<%@page import="java.sql.Connection,java.sql.Statement,java.sql.DriverManager,java.sql.ResultSet"%>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/st", "root", "");
Statement stmt = conn.createStatement();
//stmt.executeUpdate("insert into test values(2,'测试')");
ResultSet rst = stmt.executeQuery("select col1,col2 from test");
while (rst.next()) {
    out.print(rst.getInt("col1") + "," + rst.getString("col2") + "<br/>");
}
if (rst != null) rst.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
%>
==================
以InnoDB存储方式启动数据库
MyISAM村村方式不支持事务,InnoDB、BDB、NDB支持事务,如果要使用事务,就要以InnoDB方式启动数据库。

配置文件D:/mysql-5.0.51b-win32/my-innodb.ini内容:
[mysqld]
default-character-set=gbk
default_table_type = INNODB
innodb_data_home_dir =
innodb_data_file_path=D:/mysql-5.0.51b-win32/data/innodata1:10M:autoextend
innodb_log_group_home_dir = D:/mysql-5.0.51b-win32/data/
innodb_log_files_in_group = 2
log-bin=D:/mysql-5.0.51b-win32/data/log-bin

启动数据库:
mysqld --defaults-file=D:/mysql-5.0.51b-win32/my-innodb.ini --console

事务:
方法一:禁用自动提交:SET AUTOCOMMIT=0;
        以commit; 或 rollback;方式结束事务
方法二:start transaction;
        commit; 或 rollback;
        事务结束后,恢复到AUTOCOMMIT的方式

==================
存储过程

#定义存储过程
delimiter // #用mysql客户端delimiter命令来把语句定界符从 ;变为//

create procedure example_proc(out cnt int)
begin
    select count(*) into cnt from test;
end;
//

delimiter ; #用mysql客户端delimiter命令来把语句定界符从 //变为;

#调用存储过程
CALL example_proc(@a);
SELECT @a;
==================
函数
当log-bin-trust-routine-creators等于0时,如果使用了二进制日志,创建的函数如果不涉及到二进制日志时需要用户具有SUPER权限。禁掉对SUPER权限的要求需要把log-bin-trust-routine-creators设置为1。

#定义函数
delimiter // #用mysql客户端delimiter命令来把语句定界符从 ;变为//

create function example_func(score int) returns varchar(10)
begin
    return concat(score, "分");
end;
//

delimiter ; #用mysql客户端delimiter命令来把语句定界符从 //变为;

#调用函数
SELECT example_func(10);
==================
主从复制
1、在主服务器上为服务器设置一个连接账户。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'slavepass';
如果从从属服务器主机使用LOAD TABLE FROM MASTER或LOAD DATA FROM MASTER语句,你需要授予该账户其它权限:
授予账户SUPER和RELOAD全局权限。
为所有想要装载的表授予SELECT权限。
2、主服务器配置文件需要有:
[mysqld]
server-id=1
log-bin=mysql-bin
3、从服务器配置文件需要有:
[mysqld]
server-id=2
4、通过备份等方式使主从服务器数据一致。
5、在主服务器执行:
mysql> SHOW MASTER STATUS;
+----------------+----------+--------------+------------------+
| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------+----------+--------------+------------------+
| log-bin.000005 |       98 |              |                  |
+----------------+----------+--------------+------------------+
1 row in set (0.00 sec)
6、在从服务器执行:
CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='log-bin.000005',
MASTER_LOG_POS=98;
7、启动从服务器线程:
mysql> START SLAVE;
8、在从服务器查看状态:
mysql> show slave status /G;
9、停止从服务器线程:
mysql> slave stop;
==================
MySql的图形界面客户端
1、Toad for MySQL (在http://www.toadsoft.com/可下载)
2、MySql Administrator(官方MySql图形客户端)
==================
本文参考北京万里开源软件有限公司的《MySQL 5.1参考手册》中文翻译版本。
另外参考了网络上的一些文章。

发布了35 篇原创文章 · 获赞 1 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章