mysql基础
Posted 北极菜鸟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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版:正式发布版本
MySQL获取:
http://www.mysql.com/从官方网站下载安装包
从官方网站下载源代码包
从官方网站下载二进制包
从发行版本光盘中获取安装包
MySQL在企业中应用
数据库排名:http://db-engines.com/en/ranking
为什么选择MySQL?
MySQL性能卓越,服务稳定,很少出现异常宕机;
MySQL开放源代码且无版权制约,自主性及使用成本低;
MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助;
MySQL软件体积小,安装使用简单,并且易于维护,安装维护成本低;
MySQL品牌口碑效应,使得企业无需考虑就直接用之,LAMP,LEMP流程结构;
MySQL支持多种操作系统,提供多种API接口,支持多种开放语言,特别对流行的PHP语言有很好的支持;
mysql体系结构
连接层
- 思想 为解决资源频繁分配,释放所造成的问题,为数据库建立一个"缓冲池".
- 原理:预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个。使用完毕之后再放回去。
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 ENGINES\\G
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 ·······················
以上是关于mysql基础的主要内容,如果未能解决你的问题,请参考以下文章