一、MySQL介绍篇
1、数据库概述
什么是数据库
存储数据的仓库,其本质是一个文件系统
什么是关系型数据库
有行有列的数据库就是关系型数据库,与之相反的就是NOSQL数据库
数据库与表关系
数据库管理系统DBMS,是一个大型软件,用于建立,使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的完整性和安全性。
常见的数据库管理系统
Mysql:开源免费的,小型数据库,已经被oracle数据库收购,5.5版本之后都是由oracle发布的版本
Oracle:收费的大型数据库,oracle公司的产品,oracle收购了sun公司之后,收购mysql
DB2:IBM公司的数据库产品,收费的
SqlServer:.net,C#等语言常使用
2、Mysql介绍
MySQL是什么
MySQL 是最流行的【关系型数据库管理系统】,在WEB应用方面 MySQL是最好的RDBMS应用软件之一。
3、SQL介绍
什么是SQL
SQL是Structured Query Language的缩写, 关系型数据库的标准语言
SQL语言分类
- 数据定义语言:简称【DDL】(Data Definition Language),用来定义数据库对象:数据库,表,列、等。关键字:create,alter,drop等
- 数据操作语言:简称【DML】(Data Manipulation Language),用来对数据库中表的记录进行更新。关键字:insert,delete,update等
- 数据控制语言:简称【DCL】(Data Control Language),用来定义数据库的访问权限和安全级别,及创建用户;关键字:grant等
- 数据查询语言:简称【DQL】(Data Query Language),用来查询数据库中表的记录。关键字:select,from,where等
二、MySQL基础篇
MySQL单机安装
操作系统centos7
Mysql:5.6
MySQL的卸载
查看MySQL软件
rpm -qa|grep mysqlyum repolist all | grep mysqlyum remove -y mysql mysql-libs mysql-common #卸载mysqlrm -rf /var/lib/mysql #删除mysql下的数据文件rm /etc/my.cnf #删除mysql配置文件yum remove -y mysql-community-release-el6-5.noarch #删除组件
查看是否还有 MySQL 软件,有的话继续删除。
安装MySQL
#下载rpm文件wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm#执行rpm源文件rpm -ivh mysql-community-release-el6-5.noarch.rpm#执行安装文件yum install mysql-community-server
#启动MySQL
systemctl start mysqld
设置root用户密码
#为root账号设置密码为 root :/usr/bin/mysqladmin -u root password 'root'#没有密码 有原来的密码则加/usr/bin/mysqladmin -u root -p '123' password 'root'mysql -uroot -proot
登录MySQL
登录命令
mysql -uroot -proot
命令说明:
-u:指定数据库用户名
-p:指定数据库密码,记住-u和登录密码之间没有空格
配置MySQL
vim /etc/my.cnf
修改内容如下:
[mysqld]# MySQL设置大小写不敏感:默认:区分表名的大小写,不区分列名的大小写# 0:大小写敏感 1:大小写不敏感lower_case_table_names=1# 默认字符集character-set-server=utf8
MySQL远程连接授权
授权命令
grant 权限 on 数据库对象 to 用户
示例:
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANTOPTION;
FLUSH PRIVILEGES;--刷新权限
命令说明:
ALL PRIVILEGES :表示授予所有的权限,此处可以指定具体的授权权限。
*.* :表示所有库中的所有表
'root'@'%' :myuser是数据库的用户名,%表示是任意ip地址,可以指定具体ip地址。
IDENTIFIED BY 'mypassword' :mypassword是数据库的密码
关闭linux的防火墙
systemctl stop firewalld(默认)
systemctl disable firewalld.service(设置开启不启动)
客户端远程访问
利用navicat可以远程访问MySQL
注:如果连接不上,可以按照以下步骤排错
1、MySQL是否正常启动
[root@localhost ~]# ps -ef | grep mysql
2、查看防火墙是否关闭
[root@localhost ~]# systemctl status firewalldfirewalld.service - firewalld - dynamic firewall daemonLoaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled)Active: inactive (dead)
3、查看root权限为所有ip都可以访问
mysql> show grants for root;+--------------------------------------------------------------------------------------------------------------------------------+| Grants for root@%| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD'*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION |+-----------------------------------------------------------------
4、服务器与客户端是否可以ping通
DDL语句
数据库操作:database
创建数据库
create database 数据库名;
create database 数据库名 character set 字符集;
查看数据库
show databases;
查看某个数据库的定义的信息:
show create database 数据库名;
删除数据库
drop database 数据库名称;
切换数据库:
use 数据库名;
查看正在使用的数据库:
select database();
表操作:table
常见类型有
数字型:int
浮点型:double
字符型:varchar(可变长字符串)
日期类型:date(只有年月日,没有时分秒)
datetime(年月日,时分秒)
创建表
create table 表名(
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
单表约束:
- 主键约束:primary key
- 唯一约束:unique
- 非空约束:not null
主键约束 = 唯一约束 + 非空约束
查看表
查看数据库中的所有表:
show tables;
查看表结构:
desc 表名;
删除表
drop table 表名;
修改表
alter table 表名 add 列名 类型(长度) 约束; --修改表添加列.
alter table 表名 modify 列名 类型(长度) 约束; --修改表修改列的类型长度及约束.
alter table 表名 change 旧列名 新列名 类型(长度) 约束; --修改表修改列名.
alter table 表名 drop 列名; --修改表删除列.
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字符集; --修改表的字符集
删除表中所有记录使用【delete from 表名】,还是用【truncate table 表名】?
- delete :一条一条删除,不清空auto_increment记录数。
- truncate :直接将表删除,重新建表,auto_increment将置为零,从新开始。
分页分为逻辑分页和物理分页:
逻辑分页:将数据库中的数据查询到内存之后再进行分页。
物理分页:通过LIMIT关键字,直接在数据库中进行分页,最终返回的数据,只是分页后的数据。( SELECT * FROM table LIMIT [offset,] rows)
union 集合的并集(不包含重复记录)
unionall 集合的并集(包含重复记录)
WHERE条件解析顺序
1. MySQL :从左往右去执行 WHERE 条件的。
2. Oracle :从右往左去执行 WHERE 条件的。
外连接总结:
通过业务需求,分析主从表
如果使用 LEFT JOIN ,则主表在它左边
如果使用 RIGHT JOIN ,则主表在它右边
查询结果以主表为主,从表记录匹配不到,则补 null