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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章