初识MySQL

2.MySQL的安装

选择对应的版本下载
点我->MySQL
win环境下的安装

注意:要下载压缩版本!zip

tasklist |findstr mysql
taskkill /F(强制终止) /PID 11111(根据PID)
mysqld --install 制作系统服务(管理员方式打开终端)
win R server 找到Mysq 启动服务
mysqld --remove 解除系统服务


补充
下载地址:http://dev.mysql.com/downloads/mysql/

1.进入官网下载,显示的应该是最新版本,选择第二个(mysql5.7.20-winx64.zip)

2.下载完成后,直接解压到自定义目录,解压目录就是安装目录

配置环境变量

1.新增环境变量,例:

变量名:MYSQL_HOME

变量值:D:\mysql\mysql5.7.20-winx64

2.修改环境变量PATH

在PATH后面加入%MYSQL_HOME%\bin,注:加入新的变量值需要用;隔开

添加my.ini配置文件

1.下载的压缩文件中没有my.ini配置文件和data文件夹,需要手动在bin目录下新建文本my.ini,如果放在根目录下,data不能自动生成(坑了我很久),my.ini,内容如下:

[client]
default-character-set=utf8
[mysqld]
#解压目录 
basedir = %MYSQL_HOME% 
#解压目录 
datadir = %MYSQL_HOME%\data
port = 3306

初始化mysql,启动mysql服务

1.以管理员身份运行命令行cmd,进入bin目录(一定要进入bin目录)

例:cd D:\mysql\mysql5.7.20-winx64\bin

2.输入命令:mysqld
--initialize-insecure (生成无密码的root用户)

会在根目录下生成一个data文件夹,里面有文件(如果出现mysql服务名无效,则输入mysqld --install)

3.启动服务:net start mysql,停止服务:net stop mysql

出现mysql服务已启动说明成功

4.设置mysql密码

mysqladmin -u root password 密码


centos7环境下安装

yum -y install mariadb-server[服务端,mariadb客户端]
systemctl start mariadb [启动服务]
systemctl status mariadb [查看服务运行状态]

# centos6 有所不同!
yum -y install mysql-server[服务端,mysql客户端]

mac环境下安装

双击安装,假如默认目录 /usr/local/mysql
vim /etc/profile
添加到PATH=/usr/local/mysql/bin:xxxxxx:$PATH
export PATH (全局生效)
保存退出
source /etc/profile 启动服务


3.密码破解

win环境下密码的设置以及破解方法

>mysql  #不加参数,默认登录ODBC账号
>mysql>select user(); #显示当前账户信息
#设置密码:
>mysqladmin -uroot[] -p password "abc123" # -u指定用户 -p指定原始密码,初始##为空 password,修改之后的密码
#再次修改例如:
>mysqladmin -uroot -pabc123 password abc123
#登录:
>mysql -uroot -p
>Enter password: abc123
    
#如果忘记了root密码;可以找回,跳过授权表mysql5_6------data----mysql 
#管理员登录终端
>net stop MySQL
>mysqld --skip-grant-tables
#登录另个终端:
>mysql -uroot -p  #不用密码登录
>update mysql.user set password=password("abc123") where user="root" and host="localhost";
>flush privileges; #刷新一下授权表
>exit
>tasklist |findstr mysql
>taskkill /F /PID 101001
>net start MySQL #重启服务
>mysql -uroot -pabc123 -h 127.0.0.1 -P 3306 #指定套接字地址和端口

linux环境下的密码设置与更改

#默认登录root,设置方式和win一样
#破解:跳过授权表
    #终端一:
    #systemctl stop mariadb 终止服务
    #mysql_safe --skip-grant-tables
    #终端二:
    >mysql -uroot -p
    >update mysql.user set password=password("abc123") where user = "root" and host="localhost";
    >flush privileges:
    >exit
    >pkill -9 mysql
    >systemctl start mariadb 启动服务


mac环境下的密码设置与破解

#默认root
#设置密码(原始密码为空)
    >mysqladmin -uroot -p password "123"
    >password:
    >exit
    >mysql -uroot -p123
    >exit
    
    >mysqladmin -uroot -p123 password "abc123"
    
#破解密码:跳过授权表
    #手动终止服务
    #终端一:
    #mysqld_safe --skip-grant-tables
    #终端二:
    #mysql -uroot -p
    >update mysql.user set password=passwore("abc123") where user="root" and host="localhost";
    >flish privileges;
    >exit
    #ps aux |grep mysql  找到与mysql都相关的进程PID(有个终端程序别杀了,不然操作的终端就关闭了)
    #kill -9 6666
    #kill -9 7777
    ...
    #手动启动服务


4.统一字符编码

统一字符编码,不然会出现一大堆乱码,最好都改成utf8

win平台

#win平台:
    >mysql -uroot -p abc123
    > \s #查看字符编码,发现大有不同,latinl gbk什么的!这些都要改成utf8!
    #找mysql的安装目录---my-default.ini(参考配置文件)
    #自己在当前目录新建一个配置文件my.ini。 强调:配置文件中的注释可以有中文,但是配置项中不能出现中文
    #针对5.5以前的配置,将下面的内容写在里面:
        [mysqld]
        default-character-set=utf8 
        [client]
        default-character-set=utf8 
        [mysql]
        default-character-set=utf8
        
    #针对5.5以后的配置:配置好后重启服务
        [mysqld]   /服务端
        character-set-server=utf8
        collation-server=utf8_general_ci
        [client]  /统一的配置,全局的,不同的客户端,python,java,PHP
        default-character-set=utf8
        [mysql] /为单独的客户端定义一个配置,可以自己写,添加
        default-character-set=utf8
        user=“myconnfigname” /win默认 mysql 启动是ODBC,这样配置了就是root
        password=""
    #打开终端重启服务
        net stop MySQL
        net start MySQL

centos7

#终端一
   >mysql
   >\s #发现有latinl
   >exit
   # vim /etc/my.cnf #[在对应的头下面加上这些内容]
    [mysqld]   /服务端
    character-set-server=utf8
    collation-server=utf8_general_ci
    [client]  /统一的配置,全局的,不同的客户端,python,java,PHP
    default-character-set=utf8
    [mysql] /为单独的客户端定义一个配置,可以自己写,添加
    default-character-set=utf8
    [mysql] /为单独的客户端定义一个配置,可以自己写,添加
    default-character-set=utf8
   #Esc :wq! 保存并退出
   #systemctl restart mariadb #重启服务

mac

#终端:
#vim /etc/my.cnf [a进入编辑模式]
   [mysqld]   /服务端
   character-set-server=utf8
   collation-server=utf8_general_ci
   [client]  /统一的配置,全局的,不同的客户端,python,java,PHP
   default-character-set=utf8
   [mysql] /为单独的客户端定义一个配置,可以自己写,添加
   default-character-set=utf8
    Esc :wq 
    #重启服务[先关后开]


5.初识sql语句

操作文件夹(库)

create database db1 charset utf8; -- 创建数据库,指定字符编码

show create database db1; -- 查看刚建立的数据库
show databases; -- 查看所有的数据库

改[无法改名字]

alter database db1 charset gbk; -- 改数据库的字符编码

drop database db1;

操作文件(表)

use db1; -- 切换文件夹(库)
select database(); -- 查看当前所在的那个库下面

create table t1(id int,name char);

show create table t1;
show tables; -- 查当前下面所有的表
desc t1; --另外一种查看方式,优化!

alter table t1 modify name char(6); -- modify修改
alter table t1 change name NAME char(7); -- 将字段名修改,比如将name 改为NAME,保存的数据长度为7

drop table t1;

操作文件内容(记录)

insert t1(id,name) values(1,'egon1'),(2,'egon2'),(3,'egon3');

select id,name from db1.t1;
select * from db1.t1;

update db1.t1 set name='SB';
update db1.t1 set name='ALEX' where id=2;

delete from t1;
delete from t1 where id=2;
help creat -- [查看帮助信息]

6.库操作

系统数据库
information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、 权限信息、字符信息等.
performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象。
mysql: 授权库,主要存储系统用户的权限信息。
test: MySQL数据库系统自动创建的测试数据库。

创建数据库

1 语法(help create database)

mysql的注释方式一般为 -- 注释 ;当然这样写也可以 #注释

mysql> create database database_name charset utf8;

2 数据库命名规则

  • 可以由字母、数字、下划线、@、#、$
  • 区分大小写
  • 唯一性
  • 不能使用关键字如 create select
  • 不能单独使用数字
  • 最长128位

数据库相关操作
1.查看数据库

mysql> show databases;
mysql> show create database db1;
mysql> select database();

2.选择数据库

mysql> USE 数据库名;

3.删除数据库

mysql> DROP DATABASE 数据库名;

4.修改数据库

mysql> alter database db1 charset utf8;

7.储蓄引擎介绍

1、什么是存储引擎?
数据库中的表也有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。存储引擎就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型。
在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据
自己的需要编写自己的存储引擎。

SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。

常用存储引擎部分介绍

储存引擎 特点
innoDB 支持事务,面向OLTP(面向联机事务处理)的应用,行锁设计、支持外键,
并支持类似 Oracle 的非锁定读,默认的存储引擎,存储的文件[.frm表结构,.MYI索引文件]
MyISAM 不支持事务、表锁设计、支持全文索引,主要面向一些OLAP数据库应用
缓冲池只缓存(cache)索引文件
NDB 集群存储引擎,高可用、 高性能、高可扩展性的数据库集群系统,
其面向的也是 OLTP 的数据库应用类型。
Memory 默认使用哈希索引,数据都存放在内存,适合于存储 OLTP数据库应用中临时数据的临时表,
也可以作为 OLAP 数据库应用中数据仓库的维度表。
Infobright 第三方的存储引擎,存储是按照列而非行的,非常适合OLAP的数据库应用
NTSE 网易公司开发的面向其内部使用的存储引擎
BLACKHOLE 黑洞存储引擎,可以应用于主备复制中的分发主库

详解
InnoDB 存储引擎
[.frm表结构,.MYI索引文件]
支持事务,其设计目标主要面向联机事务处理(OLTP)的应用。其特点是行锁设计、支持外键,并支持类似 Oracle 的非锁定读,即默认读取操作不会产生锁。 从 MySQL 5.5.8 版本开始是默认的存储引擎。InnoDB 存储引擎将数据放在一个逻辑的表空间中,这个表空间就像黑盒一样由 InnoDB 存储引擎自身来管理。从 MySQL 4.1(包括 4.1)版本开始,可以将每个 InnoDB 存储引擎的 表单独存放到一个独立的 ibd 文件中。此外,InnoDB 存储引擎支持将裸设备(row disk)用 于建立其表空间。InnoDB 通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了 SQL 标准 的 4 种隔离级别,默认为 REPEATABLE 级别,同时使用一种称为 netx-key locking 的策略来 避免幻读(phantom)现象的产生。除此之外,InnoDB 存储引擎还提供了插入缓冲(insert buffer)、二次写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead) 等高性能和高可用的功能。对于表中数据的存储,InnoDB 存储引擎采用了聚集(clustered)的方式,每张表都是按 主键的顺序进行存储的,如果没有显式地在表定义时指定主键,InnoDB 存储引擎会为每一 行生成一个 6 字节的 ROWID,并以此作为主键。InnoDB 存储引擎是 MySQL 数据库最为常用的一种引擎,Facebook、Google、Yahoo 等 公司的成功应用已经证明了 InnoDB 存储引擎具备高可用性、高性能以及高可扩展性。对其 底层实现的掌握和理解也需要时间和技术的积累。如果想深入了解 InnoDB 存储引擎的工作 原理、实现和应用,可以参考《MySQL 技术内幕:InnoDB 存储引擎》一书。

MyISAM 存储引擎

不支持事务、表锁设计、支持全文索引,主要面向一些 OLAP 数 据库应用,在 MySQL 5.5.8 版本之前是默认的存储引擎(除 Windows 版本外)。数据库系统 与文件系统一个很大的不同在于对事务的支持,MyISAM 存储引擎是不支持事务的。究其根 本,这也并不难理解。用户在所有的应用中是否都需要事务呢?在数据仓库中,如果没有 ETL 这些操作,只是简单地通过报表查询还需要事务的支持吗?此外,MyISAM 存储引擎的 另一个与众不同的地方是,它的缓冲池只缓存(cache)索引文件,而不缓存数据文件,这与 大多数的数据库都不相同。

NDB 存储引擎

年,MySQL AB 公司从 Sony Ericsson 公司收购了 NDB 存储引擎。 NDB 存储引擎是一个集群存储引擎,类似于 Oracle 的 RAC 集群,不过与 Oracle RAC 的 share everything 结构不同的是,其结构是 share nothing 的集群架构,因此能提供更高级别的 高可用性。NDB 存储引擎的特点是数据全部放在内存中(从 5.1 版本开始,可以将非索引数 据放在磁盘上),因此主键查找(primary key lookups)的速度极快,并且能够在线添加 NDB 数据存储节点(data node)以便线性地提高数据库性能。由此可见,NDB 存储引擎是高可用、 高性能、高可扩展性的数据库集群系统,其面向的也是 OLTP 的数据库应用类型。

Memory 存储引擎

正如其名,Memory 存储引擎中的数据都存放在内存中,数据库重 启或发生崩溃,表中的数据都将消失。它非常适合于存储 OLTP 数据库应用中临时数据的临时表,也可以作为 OLAP 数据库应用中数据仓库的维度表。Memory 存储引擎默认使用哈希 索引,而不是通常熟悉的 B+ 树索引。

Infobright 存储引擎

第三方的存储引擎。其特点是存储是按照列而非行的,因此非常 适合 OLAP 的数据库应用。其官方网站是 http://www.infobright.org/,上面有不少成功的数据 仓库案例可供分析。

NTSE 存储引擎

网易公司开发的面向其内部使用的存储引擎。目前的版本不支持事务, 但提供压缩、行级缓存等特性,不久的将来会实现面向内存的事务支持。

BLACKHOLE

黑洞存储引擎,可以应用于主备复制中的分发主库。MySQL 数据库还有很多其他存储引擎,上述只是列举了最为常用的一些引擎。如果 你喜欢,完全可以编写专属于自己的引擎,这就是开源赋予我们的能力,也是开源的魅 力所在。

2、查看MySQL支持的存储引擎

mysql> show engines;
show variables like 'storage_engine%'; #查看正在使用的存储引擎

3、指定表类型/存储引擎

mysql> create table t1(id int)engine=innodb;
mysql> create table t2(id int)engine=memory;
mysql> create table t3(id int)engine=blackhole;
mysql> create table t4(id int)engine=myisam;

mysql> insert into t1 values(1);   -- 插入数据,into可有可无
mysql> insert into t2 values(1);
mysql> insert into t3 values(1);
mysql> insert into t4 values(1);
posted @ 2018-04-22 22:30  哈哈大圣  阅读(250)  评论(1编辑  收藏  举报