mysql基础

  数据库
是用户存放数据、访问数据、操作数据的存储仓库,用户的各种数据被有组织的存放在数据库中。可以随时被有权限的用户查询、统计、添加、删除、和修改。
是长期存储在计算机内的,有组织、可共享的数据集合。
数据库系统是由普通的文件系统发展而来的。数据库系统具有较高的数据独立性,即不依赖于特定的数据库应用程序;
数据库系统的数据冗余小,可以节省数据的存储空间;
另外数据库系统还很容易实现多个用户的数据共享。

  数据库的发展史
初始阶段-----人工管理:人力手工整理存储数据
萌芽阶段-----文件系统:使用磁盘文件来存储数据
初级阶段-----第一代数据库:出现了网状模型、层次模型的数据库
中级阶段-----第二代数据库:关系型数据库和结构化查询语言
高级阶段-----新一代数据库:“关系-对象”型数据库

数据模型

 程序员的数据库要求

基本的SQL操作、CRUD操作多表连接查询、分组查询和子查询。
常用数据库的的单行函数。
常用数据库的基本命令。
常用数据库的开发工具。
事务概念。索引、视图、存储过程和触发器。

时下流行的DBMS
Oracle:应用广泛、功能强大,分布式数据库系统关系-对象”型数据库
MySQL:快捷、可靠开源、免费、与php组成经典的LAMP组合
SQL Server:针对不同用户群体的五个特殊版本易用性好
DB2:应用于大型应用系统,具有较好的可伸缩性

MLSQL简介
MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

MySQL的特性
1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
2.支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
3.为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。
4.支持多线程,充分利用CPU资源,支持多用户。
5.优化的SQL查询算法,有效地提高查询速度。
6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中。
7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名。
8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
9.提供用于管理、检查、优化数据库操作的管理工具。
10.可以处理拥有上千万条记录的大型数据库。

版本介绍:
Alpha版:开发版,公司内部使用
Beta版:完成开发后,用户体验版
RC版:生产环境发布之前的一个小版本或称候选版
GA版:正式发布版本
file://C:UsersADMINI~1AppDataLocalTempct_tmp/1.png
MySQL获取:
http://www.mysql.com/从官方网站下载安装包
从官方网站下载源代码包
从官方网站下载二进制包
从发行版本光盘中获取安装包

MySQL在企业中应用
数据库排名:http://db-engines.com/en/ranking
file://C:UsersADMINI~1AppDataLocalTempct_tmp/2.png
为什么选择MySQL?
MySQL性能卓越,服务稳定,很少出现异常宕机;
MySQL开放源代码且无版权制约,自主性及使用成本低;
MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助;
MySQL软件体积小,安装使用简单,并且易于维护,安装维护成本低;
MySQL品牌口碑效应,使得企业无需考虑就直接用之,LAMP,LEMP流程结构;
MySQL支持多种操作系统,提供多种API接口,支持多种开放语言,特别对流行的PHP语言有很好的支持;

mysql体系结构

    

连接层

  1. 思想   为解决资源频繁分配,释放所造成的问题,为数据库建立一个"缓冲池".
  2. 原理:预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个。使用完毕之后再放回去。

        3. 作用:进行身份验证,线程重组,连接限制,检查内存,数据缓存;管理用户的连接,线程 处理等需要缓存的需求。

SQL层

1.管理服务组件:从备份和恢复的安全性、复制、集群、管理、配置、迁移和元数据等方面管理数据库。

2.SQL接口组件:进行DML、DDL、存储过程、师徒、触发器等操作和管理;用户SQL命令接口。

3.解析器组件:验证和解析SQL命令。

4.查询优化器组件:对SQL语句查询进行优化"选取、投影和连接"

4.缓存和缓冲区:有一系列小缓存组成的,比如表缓存,记录缓存,key缓存,权限缓存等。

插件式存储引擎

mysql的存储引擎是插件式的。他根据MySQL AB公司提供的文件访问层的一个抽象接口来定制一种文件访问机制,这种访问机制就就叫存储引擎。

1.MylSAM:他查询速度快,有较好的索引优化和数据压缩技术。但是不支持事物。

2.InnoDB:支持事物,并提供行级锁定,应用广泛。

3.BDB:不在从底层支持BDB.

4.Memory:适合存储临时数据。

5.Archive:适合存储历史数据。

物理文件层

1.支持文件类型:EXT3、EXT4、NTFS、NFS。

2.文件内容:数据文件、日志文件、配置文件、其他文件。

mysql安装

1.下载RPM包安装

1)卸载mariadb    #rpm -e mariadb

2)安装 yum install   mysql mysql-server  (前提是从网上rpmfind.net下载下来)

   启动: [root@localhost ~]# systemctl start mysqld

             [root@localhost ~]# systemctl enable mysqld

  mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:
             [root@localhost ~]# grep "temporary password" /var/log/mysqld.log
            2017-08-04T15:14:25.922138Z 1 [Note] A temporary password is generated for root@localhost: Ng21WK5INA_x
登陆数据库修改密码:
alter user 'root'@'localhost' identified by 'ABC123,com';    

2.yum源方式安装

  [root@localhost ~]# yum install -y https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

  [root@localhost ~]# yum list | grep "mysql-community"

安装:[root@localhost ~]#   yum install mysql-community-client mysql-community-server

通用二进制安装:

  1、下载glibc版本的Mysql
mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
2、新建用户以安全方式运行进程
# groupadd -r -g 306 mysql
# useradd -r -u 306 -g 306 -s /sbin/nolgin -M mysql
3、安装并初始化mysql
# # tar xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
# cd /usr/local/
# ln -sv mysql-5.7.18-linux-glibc2.5-x86_64/ mysql
# chown -R mysql.mysql mysql/*
初始化
# cd mysql
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

 

记住密钥:2017-08-04T15:29:52.665521Z 1 [Note] A temporary password is generated for root@localhost: rlrrF!tk>2d=

4、修改mysql主配置文件
# vim /etc/my.cnf 

  5、为mysql提供sysv服务脚本
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
6、启动mysql
# chkconfig --add mysqld --添加为系统服务
# chkconfig mysqld on --开机自启动
# systemctl start mysqld
7、将mysql的bin目录加入PATH环境变量,编辑/etc/profile文件 使用mysql客户端命令
[root@stutest mysql]# mysql
-bash: mysql: command not found
由于PATH环境变量中没有添加,因此有两种方式:
一种是用绝对路径,如下:
# /usr/local/mysql/bin/mysql
第一种用起来比较麻烦,我们下面用第二种添加到PATH
# cd /etc/profile.d/ # vim mysql.sh
添加如下内容 export PATH=$PATH:/usr/local/mysql/bin
# source mysql.sh  

源码安装

  从5.5开始使用cmake编译。
在mysql5.7后编译安装需要boost的支持

  2、编译安装MySQL
1)解压 # tar xf mysql-boost-5.7.18.tar.gz -C /usr/local/src/
2)使用cmake编译MySQL
cmake指定编译选项的方式不同于make,其实现方式对比如下:
./configure cmake .
./configure --help cmake . -LH or ccmake .
注意:如果想清理此前的编译所生成的文件重新编译,则需要使用如下两条命令:
make clean;rm CMakeCache.txt
[root@localhost mysql-5.7.18]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/usr/local/mysql/data
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_EXTRA_CHARSETS=all
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_INNODB_MEMCACHED=1
-DENABLED_LOCAL_INFILE=1
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DWITH_BOOST=boost

cmake参数:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
3)编译安装 # make && make install

3、为mysql提供主配置文件
mv /etc/my.cnf /etc/my.cnf.backup
vim /etc/my.cnf

    [client]
socket = /tmp/mysql.sock


[mysqld]
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
character_set_server=utf8
4、初始化 创建用户
# groupadd -g 306 mysql
# useradd -r -u 306 -g 306 -s /sbin/nolgin -M mysql
创建数据库存放目录并授权
# mkdir /usr/local/mysql/data -p
# chown -R mysql.mysql /usr/local/mysql/data
初始化mysql
# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
5、为mysql提供sysv服务脚本
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# chmod +x /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig mysqld on
6、修改PATH环境变量,让系统可以直接使用mysql的相关命令l
# vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin
# source mysql.sh
启动MySQL:# systemctl start mysql

  MySQL多实例安装
1、创建mysql用户及组
2、编译安装MySQL 这里为了节省,采用通用二进制格式。
3、创建多实例数据目录
mkdir -p /var/run/mysqld
mkdir -p /usr/local/mysql/data330{6,7} /usr/local/mysql/binlog330{6,7}
chmod 750 /var/run/mysqld /usr/local/mysql/data* /usr/local/mysql/binlog*
chown -R mysql:mysql /usr/local/mysql/ /var/run/mysqld

4、创建MySQL多实例的配置文件

vi /etc/my.cnf

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
#user = root
#password = rootpwd

[mysqld3306]
port = 3306
server_id = 3306
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data3306
log-bin=/usr/local/mysql/binlog3306/mysql-bin
socket =/tmp/mysql3306.sock
log-error =/var/log/mysqld3306.log
pid-file =/var/run/mysqld/mysqld3306.pid

[mysqld3307]
port = 3307
server_id = 3307
basedir =/usr/local/mysql
datadir =/usr/local/mysql/data3307
log-bin=/usr/local/mysql/binlog3307/mysql-bin
socket =/tmp/mysql3307.sock
log-error =/var/log/mysqld3307.log
pid-file =/var/run/mysqld/mysqld3307.pid

5、MySQL命令全局使用路径(添加环境变量)
6、初始化MySQL多实例数据文件
# cd /usr/local/mysql/scripts/
# /usr/local/mysql/bin/mysqld --initialize --datadir=/usr/local/mysql/data3306 --user=mysql
# /usr/local/mysql/bin/mysqld --initialize --datadir=/usr/local/mysql/data3307 --user=mysql
8、启动MySQL多实例
mysqld_multi report
启动:mysqld_multi start 3306,3307
关闭:mysqld_multi stop 3306,3307

登录:mysql -uroot -p -S /tmp/mysql3307.sock -P 3307
mysql -uroot -p -S /tmp/mysql3306.sock

MySQL基础操作
1、启动与关闭
RHEL6: service mysql start|stop 或 /etc/init.d/mysql start|stop
RHEL7: systemctl start|stop mysql
2、登录与退出
mysql -u user_name -ppassword -h host_name
h:连接MySQL不在本机时,填写主机名或IP地址
u:登录MySQL用户
p:登录MySQL的密码
注意:密码写在命令行时一定不能有空格
3、设置及修改MySQL root用户密码
没有密码时设置: mysqladmin -uroot password '123456'
修改root密码:
方法1:mysqladmin -uroot -p'123456' password
5.6版本:方法2:update mysql.user set password=password('111') where user='root';
#新版的mysql数据库下的user表中已经没有Password字段了
5.7 版本:update user set authentication_string=password('123456') where user='root' and Host = 'localhost';
提示:此法适合--skip-grant-tables方式修改密码。
重启mysql服务,修改密码生效。
方法3:set password=password('123');

root密码遗忘:
1.在/etc/my.cnf中添加

skip-grant-table   ==> 重启服务

2.进入mysql中

5.6版本:update mysql.user set password=password('111') where user='root';

5.7 版本:update user set authentication_string=password('123456') where user='root' and Hos

3. flush privileges;

   q   =>退出数据库

4.systemctl restart mysqld

 三、mysql数据库操作

  SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

  3.1系统数据库
information_schema: 虚拟库,主要存储了系统中的一些数据库对象的信息,例如用户表信息、列信息、权限信息、字符信息等
performance_schema: 主要存储数据库服务器的性能参数
mysql: 授权库,主要存储系统用户的权限信息
test: MySQL数据库系统自动创建的测试数据库

创建数据库 查看数据库 删除数据库
create database 库名 show  databases drop database 库名

创建表 查看表 删除表(结构、数据)
create table show tables drop table 表名/ delete table 表名

选择数据库:use 数据库名    

  查看数据库信息
查看当前连接的数据库 SELECT DATABASE();
查看数据库版本 SELECT VERSION();
查看当前用户 SELECT USER();
查看所有用户 SELECT User,Host,Password FROM mysql.user;
执行Linux命令: SYSTEM <命令>

四、mysql常用数据类型

int    整型

char    字符型

varchar     字符型(变长)

float         浮点型    例:float(3,2)数据宽度为3位,小数点后最多2位。

date   日期    /   time    时间 / datetime  时间日期 /  timestamp  时间戳/  year  年(4位)

五、选择存储引擎

1.查看

  SHOW ENGINESG
SHOW VARIABLES LIKE 'storage_engine%';

2.选择存储引擎

方法1.
mysql> create table innodb1(
-> id int
-> )engine=innodb;
mysql> show create table innodb1;

方法2.
/etc/my.cnf
[mysqld]
default-storage-engine=INNODB

mysql表操作

创建表 查看表结构 修改表 删除表(结构、数据)
create table 表名 desc table 表名 alter table 表名 (add/drop  字段 ······) drop table/delete table 表名

修改字段:modify 字段 类型   (notnull、primary key、auto_increment)

例:  mysql> CREATE DATABASE school; //创建数据库school
mysql> use school;
mysql> create table student1(
-> id int,
-> name varchar(50),
-> sex enum('m','f'),
-> age int
-> );
Query OK, 0 rows affected (0.03 sec)

mysql数据操作

插入数据 更新数据 删除数据 查询数据
insert into   表名(字段2,字段3…) VALUES (值2,值3…); update 表名 set   字段1=值1; delete from 表名 select 字段 from 表名

复制表结构:create table t4 like t3;        包括约束条件一起复制

只复制表结构:create table t4 select * from t3  were 1=2     (条件为假)

复制表结构和数据:create table t4 select * from t3;           不包括约束条件

单/多表查询条件限制

as  起别名

distinct   去重

current_date   当前日期

% 匹配多个字符

_   匹配一个字符

order   by     排序{升序 ESC (默认),降序 DESC}

limit     结果限定

count (*)     计数

group  by     分组

show    now() ;      显示当前时间

year  (now())-year   (birthday)=年龄

分组统计后条件不能用were,得用having。

were中不能使用聚合函数(AVG、max、min等),having 可以。

replace(替换) into   类似   insert   into  。         ==> replace 相当于delete+insert

显示mysql的字符集:show variables  like '%char%' ;

多表查询关键字

left/right   join             左/右连接

full    join                  全连接  

between () and ()    在什么和什么之间

is null 或 is not  null

in(集合)或not  in

like   模糊匹配

子查询:

exists   /  not  exists

any 、all、in、not in

=、>、<、!=

多表查询完整语句

select   *  from 表名

where  ·····················

group  by ····················

having ·······················

limit  ·······················

原文地址:https://www.cnblogs.com/sxchengchen/p/7749966.html