第一部分: 環境
1、啓動服務
如果是完整安裝版,則系統會添加 mysql 對應的服務,隨系統啓動而啓動。
如果是綠色版,則找到 解壓目錄,其中有 bin 目錄,該目錄包含操作 MySQL 數據庫的所有命令。
bin 目錄下的 mysqld 命令可以啓動數據庫服務,通常在 cmd 環境下,使用類似以下方式啓動:
D:\GreenApplications\MySQL-Green\bin> mysqld --character-set-server=utf8
這裏,mysqld 是啓動命令,而 character-set-server 則是啓動參數,用於指定數據庫的字符編碼。
爲了使用方便,我們已經完成一個 腳本文件: 啓動服務.bat ,在 windows 下,雙擊即可啓動服務。
服務啓動後,這個 cmd 窗口即可關閉,它並不影響 mysql 服務的運行
(任務管理器可以看到多了個 mysqld.exe 的進程,這就是 mysql 服務的進程)
2、在 cmd 環境下登入並開始操作
D:\GreenApplications\MySQL-Green\bin> mysql -u 用戶名 -p
Enter Password:
在 mysql 數據庫中,最高權限的用戶名是 root ,綠色版的密碼是 mysql
即可以通過 mysql -u root -p mysql 登入數據庫
-u 用於指定用戶名
-p 用於指定密碼
還可以指定當前登陸的環境對應的字符編碼,使用 --default-character-set=gbk 形式指定
注意這個編碼(--default-character-set)指當前的 登陸環境中所使用的字符編碼,
可以理解成是指定當前 cmd 環境下的字符編碼。
Linux Mint 16 環境下:
開啓終端
輸入 mysql -u 用戶名 -p , 比如 mysql -u root -p
所有密碼默認: algom.cn
進入到 mysql> 提示符狀態
第二部分: 權限操作
0、創建數據庫: create database 數據庫名 character set utf8;
1、創建用戶 : create user 用戶名 identified by '密碼' ;
( 這裏注意,密碼必須使用引號包起來 )
2、刪除用戶 : drop user user_name ;
3、修改用戶名: rename user old_user_name to new_user_name ;
4、授予權限:
grant 權限名 (columns) on 權限對象 to 用戶名@域 [ identified by '密碼' ] ;
(權限名稱 和 權限對象 比較多,參見 MySQL 技術內幕 第四版 12.4 )
授權舉例: 假設存在數據庫 taobao ,存在用戶 mala ,把 taobao 數據庫的所有權限授予 mala 用戶
mysql> grant all on taobao.* to mala@localhost identified by 'java' ;
mysql> grant all on dbname.* to username@localhost identified by 'password';
給 localhost域的用戶 username 管理 dbname 數據庫的所有權利,密碼爲 password 。
5、查看當前用戶: select user() ;
6、查看用戶的權限: show grants for 'username'@'localhost'
查看當前用戶的權限: show grants ;
7、修改 root 用戶的密碼
set password for 'root'@'localhost' = password('新密碼');
或者:
update user set password = password('newpass') where user = 'root';
flush privileges ;
PRIVILEGES;
第三部分: 數據庫操作
1、創建數據庫 create database <數據庫名>
例如:建立一個名爲 malajava 的數據庫
mysql> create database malajava ;
創建數據庫時可以指定數據庫的編碼集:
create database malajava character set utf8;
2、顯示所有的數據庫 show databases (注意:最後有個 s)
mysql> show databases ;
3、刪除數據庫 drop database <數據庫名>
例如:刪除名爲 malajava 的數據庫
mysql> drop database malajava ;
4、連接數據庫(選擇數據庫) use <數據庫名>
例如:如果 malajava 數據庫存在,嘗試存取它:
mysql> use malajava ;
屏幕提示:Database changed
5、當前選擇(連接)的數據庫
mysql> select database();
6、當前數據庫包含的表信息 show tables
mysql> show tables ; (注意:最後有個 s)
注意,必須先選中一個數據庫,即先使用 use 打開一個數據庫,比如: use malajava ;
7、查看創建數據庫時的相關信息
mysql> show create database databaseName ;
第四部分: 表操作
操作表事前,必須先選中相應的數據庫(使用 user databaseName 命令)
1、建表
create table tableName ( columnName type ... )
比如創建 student 表:
mysql > create table student ( id int(10) primary key , name varchar(20) ) ;
2、查看錶結構 describe
mysql > desc student ;
3、增加列: alter table 表名 add ( 字段 類型 其他 ) ;
alter table users add ( address varchar(50) );
4、修改列: alter table
修改列的寬度、類型等:
alter table users modify ( address varchar(100) ); // Oracle
alter table users modify address varchar(100) ; // MySQL
修改列名:
alter table <表名> rename column old_column_name to new_column_name ; //Oracle
alert table <表名> change old_column_name new_column_name columnType ; //MySQL
5、刪除列:
alter table users drop address ; //MySQL (不使用 括號 )
alter table users drop ( address ); //Oracle (使用 括號)
6、刪除表: d
rop table tableName ;
7、截斷表: truncate table tableName ;
8、重命名錶: rename table 原表名 to 新表名
9、查看建表時的相關信息: show create table tableName
第五部分: 數據操作 (DML)
1、查詢操作
<補充1>、查詢前 n 行記錄:
select * from 表明 order by id limit 0 , n ;
2、插入操作: insert into
批量插入: insert into table_name values (....) , (......) ;
MySQL 中的批量插入:
insert into student values
( 1 , 'hua an ' , 'M' ) ,
( 2 , 'qiuxiang' , 'F') ,
( 3 , 'wuzhuangyuan','M') ,
( 4 , 'huawen' , 'M' ) ,
( 5 , 'huawu', 'M' ) ;
Oracle 的批量插入語句:
SQL> insert all
into customer_bak ( id , uname ) values ( 26 , 'tom26' )
into customer_bak ( id , uname ) values ( 27 , 'tom27' )
into customer_bak ( id , uname ) values ( 28 , 'tom28' )
select 1 from dual;
3、更新數據: update
update student set name='華安' , sex = 'F' where id = 1 ;
4、刪除數據: delete from
delete from student where id = 3 ;
第六部分: 數據類型
int : 整數
bigint :
float / double : 浮點數
varchar 變長字符串 --> 對應 Java 中的 String
char 定長字符串 --> 對應 Java 中的 String
date / datatime / time / timestamp
update student set birthday = '1990-09-09' ; // MySQL 隱式數據類型轉換
update student set birthday = to_date( '1990-09-09' , 'yyyy-MM-dd' ) ; // Oracle 中需要顯式數據類型轉換
第七部分: 引擎、事務
1、常用引擎: MyISAM 和 InnoDB
InnoDB 是支持事務操作的 引擎,因此建表時建議使用該引擎。
create table tableName ( ...... ) engine=InnoDB ;
如果建表時沒有指定引擎,則默認爲是 MyISAM 引擎,該引擎默認不支持事務操作。
建完表後修改引擎:
alter table tableName type = InnoDB;
或者
alter table tableName engine = InnoDB;
查看修改結果:
show table status from 數據庫名 ;
或者
show create table tableName ;
2、事務設置:
設置innodb的事務級別方法是:
set 作用域 transaction isolation level 事務隔離級別
例如:
mysql> set global transaction isolation level read committed; //全局的
mysql> set session transaction isolation level read uncommitted ;
mysq
l> set session transaction isolation level read committed; //當前會話
mysql> set session transaction isolation level repeatable read ;
mysql> set session transaction isolation level serializable ;
或者可以使用:
mysql> set global tx_isolation='repeatable-read';
mysql> set session tx_isolation='serializable';
3、事務操作語句(TCL)
a>、顯式開啓一個事務: begin 或 start transaction
b>、提交事務: commit
c>、回滾事務: rollback
d>、創建保存點: savepoint pointname
f>、刪除某個事務保存點: release savepoint pointname
g>、閃回(回滾)到某個保存點: rollback to pointname
h>、設置事務隔離級別: set transaction
可設置隔離級別包括:
read uncommited : 未提交讀
read commited : 已提交讀
repeatable read : 可重複讀
serializable : 序列化
i>、禁用 mysql 的自動提交 (MySQL 默認是自動提交)
mysql> set autocommit = false ; //不要再自動提交
mysql> set autocommit = true ; //自動提交(MySQL默認)
Oracle 中,默認是不自動提交:
查看 show autocommit
改爲自動提交 set autocommit on
改爲關閉狀態 set autocommit off (默認)
4、隱式提交事務的SQL : DDL 語句 、 DCL(數據控制語言,比如 drop user 、grant 等)
5、查看當前事務的隔離級別: select @@tx_isolation ;
第八部分: 備份與恢復
在 命令 行模式下,使用 mysqldump 命令完成
1.導出整個數據庫
mysqldump -u 用戶名 -p --default-character-set=latin1 數據庫名 > 導出的文件名
(數據庫默認編碼是 latin1)
比如: 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
mysql>use 數據庫
然後使用 source 命令,後面參數爲腳本文件(如這裏用到的.sql)
mysql>source d:/malajava.sql
補充1、日期格式化 ---------------------------------------------------
-----------------
DATE_FORMAT(date, format) 根據格式串format 格式化日期或日期和時間值date,返回結果串。
可用DATE_FORMAT( ) 來格式化DATE 或DATETIME 值,以便得到所希望的格式。根據format字符串格式化date值:
%S, %s 兩位數字形式的秒( 00,01, . . ., 59)
%i 兩位數字形式的分( 00,01, . . ., 59)
%H 兩位數字形式的小時,24 小時(00,01, . . ., 23)
%h, %I 兩位數字形式的小時,12 小時(01,02, . . ., 12)
%k 數字形式的小時,24 小時(0,1, . . ., 23)
%l 數字形式的小時,12 小時(1, 2, . . ., 12)
%T 24 小時的時間形式(h h : m m : s s)
%r 12 小時的時間形式(hh:mm:ss AM 或hh:mm:ss PM)
%p AM 或P M
%W 一週中每一天的名稱( S u n d a y, Monday, . . ., Saturday)
%a 一週中每一天名稱的縮寫( Sun, Mon, . . ., Sat)
%d 兩位數字表示月中的天數( 00, 01, . . ., 31)
%e 數字形式表示月中的天數( 1, 2, . . ., 31)
%D 英文後綴表示月中的天數( 1st, 2nd, 3rd, . . .)
%w 以數字形式表示週中的天數( 0 = S u n d a y, 1=Monday, . . ., 6=Saturday)
%j 以三位數字表示年中的天數( 001, 002, . . ., 366)
% U 周(0, 1, 52),其中Sunday 爲週中的第一天
%u 周(0, 1, 52),其中Monday 爲週中的第一天
%M 月名(J a n u a r y, February, . . ., December)
%b 縮寫的月名( J a n u a r y, February, . . ., December)
%m 兩位數字表示的月份( 01, 02, . . ., 12)
%c 數字表示的月份( 1, 2, . . ., 12)
%Y 四位數字表示的年份
%y 兩位數字表示的年份
%% 直接值“%”
select date_format(日期字段,’%Y-%m-%d’) as ‘日期’ from test
--------------------------------------------------------------------