1、MySQL简介
前面已经介绍过,MySQL属于传统的关系型数据库产品,其开放式的架构使得用户的选择性很强,而且随着技术的逐渐成熟,MySQL支持的功能也越来越多,性能也在不断地提高,对平台的支持也在增多,此外,社区的开发与维护人数也很多。当下,MySQL因为其功能稳定、性能卓越,且在遵守GPL协议的前提下,可以免费使用与修改,因此深受用户喜爱。
我们知道,关系型数据库的特点是将数据保存在不同的表中,再将这些表放入不同的数据库中,而不是将所有的数据统一放在一个大仓库里,这样的设计加快了MySQL的读取速度,而且它的灵活性和可管理性也得到了很大的提高。访问及管理MySQL数据库的最常用标准化语言为SQL——结构化查询语言。SQL使得对数据库进行存储、更新和存取信息的操作变得更加容易。例如,你能用SQL为一个网站检索产品信息及存储用户信息、博文、帖子等,有关SQL的知识后文会详细讲解。
2、 MariaDB数据库的诞生背景介绍
自甲骨文公司收购MySQL之后,MySQL在商业数据库与开源数据库领域的市场占有份额都跃居第一,这样的格局引起了部分业内人士的担忧,因为商业数据库的老大有可能将MySQL闭源,为了避免Oracle将MySQL闭源,而无开源的类MySQL数据库可用,MySQL社区采用了分支的方式——MariaDB数据库就这样诞生了,MariaDB是一个向后兼容的数据库产品,可能会在以后替代MySQL,其官方地址为https://mariadb.org/。不过,这里还是建议大家选择更稳定且使用更广泛的MySQL数据库,可以先测试MariaDB数据库,等使用的人员多一些,社区更活跃后再正式考虑使用也不迟。
3、yum/rpm方式安装MySQL
MySQL官方网站及相关镜像网站提供了不同版本的RPM安装包,并且针对不同的硬件或操作系统平台,安装包的类型也会有区别。在使用时,可以到官方网站的下载页面进行选择,国内有一些互联网公司提供了镜像文件下载,比如搜狐、阿里云公司提供的镜像资源就非常不错。
下面是搜狐网提供的数据库软件镜像地址:http://mirrors.sohu.com/mysql,如果本书使用的版本不再发布,那么可以选择5.6的其他相关版本注意:yum/rpm安装方式适合所有MySQL软件产品。
1.rpm包方式安装MySQL
rpm包的安装方式非常简单,这里以el6平台下的MySQL 5.6.40版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包。
MySQL-client-5.6.40-1.el6.x86_64.rpm
MySQL-devel-5.6.40-1.el6.x86_64.rpm
MySQL-server-5.6.40-1.el6.x86_64.rpm
MySQL-shared-5.6.40-1.el6.x86_64.rpm
一般来说,其中的MySQL-server-5.6.40-1.el6.x86_64.rpm和MySQL-client-5.6.40-1.el6.x86_64.rpm这两个软件包是必须要安装的,至于另外两个软件包,则可视实际需要进行安装,不过一般建议一起安装。
可以把这四个rpm包上传到服务器的目录中,然后执行如下rpm命令进行安装:
[root@oldboy tools]# rpm -qa|grep mysql #<==查找已经安装的mysql的包。
mysql-libs-5.1.73-7.el6.x86_64
rpm -e mysql-libs-5.1.73-7.el6.x86_64 --nodeps #<==卸载系统已经安装的mysql依赖包。
rpm -ivh MySQL-client-5.6.40-1.el6.x86_64.rpm
rpm -ivh MySQL-devel-5.6.40-1.el6.x86_64.rpm
rpm -ivh MySQL-shared-5.6.40-1.el6.x86_64.rpm
rpm -ivh MySQL-server-5.6.40-1.el6.x86_64.rpm
这里的el6表示适合操作系统的版本,还有el5、el7等。i686表示适合32位的系统,x86_64表示适合64位的系统。
执行上述命令即可完成MySQL软件的安装。
在采用rpm包安装方式时,必须要官方或第三方提供了现成的rpm软件包,否则是无法使用该方式安装的。另外,和直接采用yum的安装方式相比,rpm包的安装方式往往可以选择更新的版本,但是rpm包安装也有自身的问题,例如,无法满足定制化安装,比如,不能进行编译参数、路径等的更改。
4、yum方式安装MySQL
yum方式安装MySQL数据库时,只需要执行一个命令“yum install mysql-server-y”即可,yum方式的安装原理是在执行yum安装命令之后,其会自动从yum源地址下载相应名称的MySQL数据库rpm包,然后到系统上安装,并自动解决各种软件包之间的依赖问题。这是一个非常不错的安装软件的方式,不仅仅是针对MySQL,安装其他软件也是如此。
yum安装方式的最大优点就是超级简单,但是它也有自身的问题:例如它继承了rpm包的无法定制化安装的问题;另外一个缺点是采用默认的yum安装时,一般随yum源附带的软件版本都比较低,使用CentOS 6.9 Linux默认yum安装的MySQL版本仅为5.1.73。
yum install mysql-server mysql-devel mysql-libs -y
5、如何正确选择MySQL的安装方式
若是对数据库要求不太高的场景,则可以采用yum/rpm方式安装MySQL,例如,并发不大,只是在公司内部(wiki系统)、企业内部(Zabbix监控系统,OpenStack后台管理)等需要数据库的一些应用场景,当然,生产场景下也是可以选择yum或rpm方式进行安装的。
但是,有很多大型网站或门户网站,在安装MySQL时,往往会有各种定制化、初始化的需求,这时,要根据企业的需求先把源码包制作成rpm包,然后搭建自己的yum仓库,最终采用“yum install mysql-server-y”的方式进行安装,这样做的优点是既兼顾了yum/rpm安装方式简单的优点,又用到了源码包安装方式的可定制性,但是,使用这个方法需要一定的技术能力,此部分的内容建议参考如下博文。
http://blog.oldboyedu.com/autodeploy-rpm/。
6、启动与关闭MySQL
1、查看mysql服务的两种方式
[root@localhost bin]ps -ef|grep mysql
[root@localhost bin]netstat -nlp
2、启动服务的两种方式
命令行方式
[root@localhost bin]cd /usr/bin
[root@localhost bin]./mysqld_safe &
服务方式
[root@localhost ~]service mysql start 如果服务在启动状态,直接重启服务用以下命令:
[root@localhost ~]service mysql restart
3、关闭服务的两种方式
命令行方式:
[root@localhost ~]mysqladmin -u root shutdown
服务方式:
[root@localhost ~]service mysql stop
6、数据库练习
[root@localhost /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.61-log MySQL Community Server (GPL)
Copyright © 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| stumysql |
| stumysql1 |
| test |
±-------------------+
6 rows in set (0.00 sec)
mysql>
mysql> create database stumysql2;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
±-------------------+
| Database |
±-------------------+
| information_schema |
| mysql |
| performance_schema |
| stumysql |
| stumysql1 |
| stumysql2 |
| test |
±-------------------+
7 rows in set (0.00 sec)
mysql>
mysql> use stumysql2;
Database changed
mysql> create table student(
-> sid int primary key auto_increment,
-> snam varchar(30),
-> age int ,
-> rxrq date
-> );
Query OK, 0 rows affected (0.19 sec)
mysql> insert into student(snam,age,rxrq) values(‘lzy’,18,‘2017-09-01’);
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
±----±-----±-----±-----------+
| sid | snam | age | rxrq |
±----±-----±-----±-----------+
| 1 | lzy | 18 | 2017-09-01 |
±----±-----±-----±-----------+
1 row in set (0.00 sec)
mysql> insert into student(snam,age,rxrq) values(‘myq’,21,‘2017-09-01’),(‘lcb’,20,‘2017-09-01),(‘syc’,19,2017-09-01’);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘syc’,19,2017-09-01’)’ at line 1
mysql> insert into student(snam,age,rxrq) values(‘myq’,21,‘2017-09-01’),(‘lcb’,20,‘2017-09-01’),(‘syc’,19,2017-09-01’);
'> ;
'> insert into student(snam,age,rxrq) values(‘myq’,21,‘2017-09-01’),(‘lcb’,20,‘2017-09-01’),(‘syc’,19,‘2017-09-01’);
'>
'> ;
'> Ctrl-C – exit!
Aborted
[root@localhost /]# mysql
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)
[root@localhost /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.61-log MySQL Community Server (GPL)
Copyright © 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
mysql> use stumysql2;
Database changed
mysql> select * from student;
±----±-----±-----±-----------+
| sid | snam | age | rxrq |
±----±-----±-----±-----------+
| 1 | lzy | 18 | 2017-09-01 |
±----±-----±-----±-----------+
1 row in set (0.00 sec)
mysql> insert into student(snam,age,rxrq) values(‘myq’,21,‘2017-09-01’),(‘lcb’,20,‘2017-09-01’),(‘syc’,19,‘2017-09-01’);
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from student;
±----±-----±-----±-----------+
| sid | snam | age | rxrq |
±----±-----±-----±-----------+
| 1 | lzy | 18 | 2017-09-01 |
| 2 | myq | 21 | 2017-09-01 |
| 3 | lcb | 20 | 2017-09-01 |
| 4 | syc | 19 | 2017-09-01 |
±----±-----±-----±-----------+
4 rows in set (0.00 sec)
mysql> update student set age=20 where snam=‘myq’
-> ;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from student;
±----±-----±-----±-----------+
| sid | snam | age | rxrq |
±----±-----±-----±-----------+
| 1 | lzy | 18 | 2017-09-01 |
| 2 | myq | 20 | 2017-09-01 |
| 3 | lcb | 20 | 2017-09-01 |
| 4 | syc | 19 | 2017-09-01 |
±----±-----±-----±-----------+
4 rows in set (0.00 sec)
mysql> delete from student where sid=4;
Query OK, 1 row affected (0.00 sec)
mysql> select * from student;
±----±-----±-----±-----------+
| sid | snam | age | rxrq |
±----±-----±-----±-----------+
| 1 | lzy | 18 | 2017-09-01 |
| 2 | myq | 20 | 2017-09-01 |
| 3 | lcb | 20 | 2017-09-01 |
±----±-----±-----±-----------+
3 rows in set (0.00 sec)
mysql>
mysql> create table dept(
-> did int primary key auto_increment,
-> dnam varchar(30),
-> dleader varchar(30)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql> create table emp(
-> eid int primary key auto_increment,
-> enam varchar(20),
-> did int,
-> eage int,
-> gzsj date,
-> job varchar(30),
-> sar decimal(14,4)
-> );
Query OK, 0 rows affected (0.00 sec)
mysql> insert into dept(dnam, dleader) (‘xsb’,‘zy’),(‘cwb’,‘wxx’),(‘rsb’,‘gpw’);
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘‘xsb’,‘zy’),(‘cwb’,‘wxx’),(‘rsb’,‘gpw’)’ at line 1
mysql> insert into dept(dnam, dleader) values(‘xsb’,‘zy’),(‘cwb’,‘wxx’),(‘rsb’,‘gpw’);
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql>
mysql> insert into emp(enam,did,eage,gzsj,job,sar) values(‘qxt’,1,18,‘2018-07-01’,‘wu’,6500);
Query OK, 1 row affected (0.00 sec)
mysql> insert into emp(enam,did,eage,gzsj,job,sar) values(‘lsh’,2,19,‘2017-07-01’,‘wu’,6600);
Query OK, 1 row affected (0.00 sec)
mysql> insert into emp(enam,did,eage,gzsj,job,sar) values(‘cjw’,3,19,‘2017-07-01’,‘wu’,6800);
Query OK, 1 row affected (0.00 sec)
mysql> insert into emp(enam,did,eage,gzsj,job,sar) values(‘zsz’,1,19,‘2018-09-01’,‘wu’,6080);
Query OK, 1 row affected (0.00 sec)
mysql>
mysql> select * from dept;
±----±-----±--------+
| did | dnam | dleader |
±----±-----±--------+
| 1 | xsb | zy |
| 2 | cwb | wxx |
| 3 | rsb | gpw |
±----±-----±--------+
3 rows in set (0.00 sec)
mysql> select * from emp;
±----±-----±-----±-----±-----------±-----±----------+
| eid | enam | did | eage | gzsj | job | sar |
±----±-----±-----±-----±-----------±-----±----------+
| 1 | qxt | 1 | 18 | 2018-07-01 | wu | 6500.0000 |
| 2 | lsh | 2 | 19 | 2017-07-01 | wu | 6600.0000 |
| 3 | cjw | 3 | 19 | 2017-07-01 | wu | 6800.0000 |
| 4 | zsz | 1 | 19 | 2018-09-01 | wu | 6080.0000 |
±----±-----±-----±-----±-----------±-----±----------+
4 rows in set (0.00 sec)
mysql> Ctrl-C – exit!
Aborted
[root@localhost /]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.61-log MySQL Community Server (GPL)
Copyright © 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
mysql> select * from dept;
ERROR 1046 (3D000): No database selected
mysql> use stumysql2;
Database changed
mysql>
mysql> #需要给表Department增加一列字段notes,长度为10的字符串,默认值为‘0’ , 请写出相关SQL语句
mysql> alter table dept add notes varchar(10) default ‘0’;
Query OK, 3 rows affected (0.01 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from dept;
±----±-----±--------±------+
| did | dnam | dleader | notes |
±----±-----±--------±------+
| 1 | xsb | zy | 0 |
| 2 | cwb | wxx | 0 |
| 3 | rsb | gpw | 0 |
±----±-----±--------±------+
3 rows in set (0.00 sec)
mysql> #查找工资大于2000元的员工记录,并按员工号id升序排列
mysql> 答:
->
-> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘答:’ at line 1
mysql> select * from emp where sar>6100 order by eage asc;
±----±-----±-----±-----±-----------±-----±----------+
| eid | enam | did | eage | gzsj | job | sar |
±----±-----±-----±-----±-----------±-----±----------+
| 1 | qxt | 1 | 18 | 2018-07-01 | wu | 6500.0000 |
| 2 | lsh | 2 | 19 | 2017-07-01 | wu | 6600.0000 |
| 3 | cjw | 3 | 19 | 2017-07-01 | wu | 6800.0000 |
±----±-----±-----±-----±-----------±-----±----------+
3 rows in set (0.00 sec)
mysql> select * from emp where sar>6100 order by eage desc;
±----±-----±-----±-----±-----------±-----±----------+
| eid | enam | did | eage | gzsj | job | sar |
±----±-----±-----±-----±-----------±-----±----------+
| 2 | lsh | 2 | 19 | 2017-07-01 | wu | 6600.0000 |
| 3 | cjw | 3 | 19 | 2017-07-01 | wu | 6800.0000 |
| 1 | qxt | 1 | 18 | 2018-07-01 | wu | 6500.0000 |
±----±-----±-----±-----±-----------±-----±----------+
3 rows in set (0.00 sec)
mysql> select * from emp where sar>6100 order by eage desc,enam asc;
±----±-----±-----±-----±-----------±-----±----------+
| eid | enam | did | eage | gzsj | job | sar |
±----±-----±-----±-----±-----------±-----±----------+
| 3 | cjw | 3 | 19 | 2017-07-01 | wu | 6800.0000 |
| 2 | lsh | 2 | 19 | 2017-07-01 | wu | 6600.0000 |
| 1 | qxt | 1 | 18 | 2018-07-01 | wu | 6500.0000 |
±----±-----±-----±-----±-----------±-----±----------+
3 rows in set (0.00 sec)
mysql>
mysql> #查找工资大于2000元的员工所在部门、部门编号、部门经理、员工名称
mysql> select * from dept d,emp e where d.did=e.did;
±----±-----±--------±------±----±-----±-----±-----±-----------±-----±----------+
| did | dnam | dleader | notes | eid | enam | did | eage | gzsj | job | sar |
±----±-----±--------±------±----±-----±-----±-----±-----------±-----±----------+
| 1 | xsb | zy | 0 | 1 | qxt | 1 | 18 | 2018-07-01 | wu | 6500.0000 |
| 2 | cwb | wxx | 0 | 2 | lsh | 2 | 19 | 2017-07-01 | wu | 6600.0000 |
| 3 | rsb | gpw | 0 | 3 | cjw | 3 | 19 | 2017-07-01 | wu | 6800.0000 |
| 1 | xsb | zy | 0 | 4 | zsz | 1 | 19 | 2018-09-01 | wu | 6080.0000 |
±----±-----±--------±------±----±-----±-----±-----±-----------±-----±----------+
4 rows in set (0.00 sec)
mysql> select dnam,e.did,dleader,enam from dept d,emp e where d.did=e.did and sar>2000
-> ;
±-----±-----±--------±-----+
| dnam | did | dleader | enam |
±-----±-----±--------±-----+
| xsb | 1 | zy | qxt |
| cwb | 2 | wxx | lsh |
| rsb | 3 | gpw | cjw |
| xsb | 1 | zy | zsz |
±-----±-----±--------±-----+
4 rows in set (0.00 sec)
mysql>
mysql>