第一部分: 环境
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
--------------------------------------------------------------------