MySQL 简介及SQL 语句
一、数据库概述
1.数据库的分类
1)区别
2.MySQL 概述
3.MySQL 存储原理
二、部署 MySQL 数据库
1.安装 MySQL 数据库
2.优化调整 MySQL 程序
3.初始化 MySQL 数据库服务
4.登录验证
三、SQL 语句操作——增删改查
1.SQL 语句分类
2.数据记录类型
3.表相关 SQL
4.简单操作
一、数据库概述
数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户可以对数据库中的数据进行增加,修改,删除及查询操作。
1.数据库的分类
- 关系型数据库:Oracle、DB2、SQL Server、MySQL 等。
- 非关系型数据库:Memcached、MongoDB 和 Redis 等。
1)区别
关系型数据库:
- 安全,因为是将数据保存到磁盘之中,所以基本不可能出现丢失数据的情况。
- 但是比较浪费时间,因为是使用二维表的形式存储数据的。
非关系型数据库:
- 存储数据的效率比较高,因为所有的非关系型数据库都是尽可能的将数据存放到内存当中。
- 但不是特别安全,如突然断电时会导致数据丢失。
2.MySQL 概述
- MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下公司。
- 是一个真正的多用户、多线程 SQL 数据库。SQL(结构化查询语言)是世界上最流行的和标准化的数据库语言。
- MySQL 是以一个 C/S 结构实现的,它由一个服务器守护程序 mysqld 和很多不同的客户程序和库组成。
- SQL 是一种标准化的语言,它使得存储、更新和存取信息更容易。
3.MySQL 存储原理
MySQL 整体架构:
- 连接池:负责和客户端进行连接,连接池可以同时处理多个数据库请求。同时还有 SSL 的安全概念,可以确保连接是安全的。
- SQL 接口:当 SQL 语句进入 MySQL 后,会先到 SQL 接口中,将传过来的 SQL 语句拆散,将底层的结果封装成 SQL 的数据格式。
- 解析器:负责将 SQL 语句进行拆分,如果语句有问题那么就返回错误,如果没问题就继续向下执行。
- 优化器:对 SQL 查询的结果优化处理,产生多种执行计划,最终数据库会选择最优化的方案去执行,尽快返回结果。
- 缓存:对要查询的 SQL 语句进行 hash 缓存,如果下一次是相同的查询语句,则在 SQL 接口之后直接返回结果。
- 存储引擎:MySQL 有很多种存储引擎,每一种存储引擎有不同的特性,它们负责组织文件的存放形式,位置,访问文件的方法等等。
- 文件系统:真正存放物理文件的单位。
二、部署 MySQL 数据库
准备工作:
- 注意:boost 软件包需要在 Windows 系统中下载:下载地址
1.安装 MySQL 数据库
[root@MySQL ~]# tar zxf boost_1_59_0.tar.gz [root@MySQL ~]# mv boot_1_59_0 /usr/local/boost [root@MySQL ~]# wget http://dev.mysql.com/Downloads/MySQL-5.7/mysql-5.7.12.tar.gz [root@MySQL ~]# yum -y install gcc gcc-c++ ncurses bison libgcrypt perl cmake ncurses-devel [root@MySQL ~]# groupadd mysql [root@MySQL ~]# useradd -r -g mysql mysql [root@MySQL ~]# tar zxf mysql-5.7.12.tar.gz -C /usr/src/ [root@MySQL ~]# cd /usr/src/mysql-5.7.12/ #当编译多次时. 需要删除CMAKE的缓存. rm -rf /usr/src/mysql-5.7.12/CMakeCache.txt [root@MySQL mysql-5.7.12]# cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DMYSQL_TCP_PORT=3306 \ -DMYSQL_USER=mysql \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MEMORY_STORAGE_ENGINE=1 \ -DENABLE_DOWNLOADS=1 \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/boost \ -DSYSCONFDIR=/etc [root@MySQL mysql-5.7.12]# make -j `cat /proc/cpuinfo | grep processor | wc -l` [root@MySQL mysql-5.7.12]# make install
注解:
- -DCMAKE_INSTALL_PREFIX=/usr/local/mysql:MySQL 安装的根目录。
- -DMYSQL_DATADIR=/usr/local/mysql/data:MySQL 数据库文件存放目录。
- -DDEFAULT_CHARSET=utf8:设置默认字符集为 utf8。
- -DDEFAULT_COLLATION=utf8_general_ci:设置默认字符校对。
- -DMYSQL_TCP_PORT=3306:MySQL 的监听端口。
- -DMYSQL_USER=mysql:MySQL 用户名。
- -DWITH_MYISAM_STORAGE_ENGINE=1:安装 MySQL 的 myisam 数据库引擎。
- -DWITH_INNOBASE_STORAGE_ENGINE=1:安装 MySQL 的 innodb 数据库引擎。
- -DWITH_ARCHIVE_STORAGE_ENGINE=1:安装 MySQL 的 archive 数据库引擎。
- -DWITH_BLACKHOLE_STORAGE_ENGINE=1:安装 MySQL 的 blackhole 数据库引擎。
- -DWITH_MEMORY_STORAGE_ENGINE=1:安装 MySQL 的 memory 数据库引擎。
- -DENABLE_DOWNLOADS=1:编译时允许自主下载相关文件。
- -DDOWNLOAD_BOOST=1:允许下载 boost 。
- -DWITH_BOOST=/usr/local/boost:指定系统中存储的 boost 目录。
- -DSYSCONFDIR=/etc:MySQL 配置文件所在目录。
以下模块自行配置即可:
- -DWITH_READLINE=1:MySQL的 readline library。
- -DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock:MySQL 的通讯目录。
- -DENABLED_LOCAL_INFILE=1:启动加载本地数据。
- -DWITH_PARTITION_STOPAGE_ENGINE=1:启动 MySQL 的分区存储结构。
- -DEXTRA_CHARSETS=all:使用 MySQL 支持所有的扩展字符。
- -DWITH_DEBUG=0:禁止调试模式。
- -DMYSQL_MAINTAINER_MODE=0:禁止 MySQL 维护器特定的开发环境。
- -DWITH_SSL:STRING=bundled:通讯时支持 SSL 协议。
- -DWITH_ZLIB:STRING=bundled:允许使用 zlib library。
2.优化调整 MySQL 程序
[root@MySQL ~]# chown -R mysql:mysql /usr/local/mysql [root@MySQL ~]# cp /usr/src/mysql-5.7.12/support-files/my-default.cnf /etc/my.cnf [root@MySQL ~]# cp /usr/src/mysql-5.7.12/support-files/mysql.server /etc/init.d/ [root@MySQL ~]# chmod +x /etc/init.d/mysql.server [root@MySQL ~]# cat <<END > /usr/lib/systemd/system/mysqld.service [Unit] Description=mysqldapi After=network.target [Service] Type=forking PIDFile=/usr/local/mysql/logs/mysqld.pid ExecStart=/etc/init.d/mysql.server start ExecReload=/etc/init.d/mysql.server restart ExecStop=/etc/init.d/mysql.server stop PrivateTmp=Flase [Install] WantedBy=multi-user.target END [root@MySQL ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile #设置环境变量 [root@MySQL ~]# source /etc/profile #使其生效
注解:
- PrivateTmp=Flase:此选项必须关闭,不然 MySQL 连接文件 mysql.sock 会默认生成在 /tmp/.../... 目录中。
- 将该配置项关闭后,文件会正常生成在 /tmp/mysql.sock 文件中。
3.初始化 MySQL 数据库服务
[root@MySQL ~]# mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data
注解:
- --initialize-insecure:禁用 MySQL 的密码策略(密码复杂性等)。
- --initializeaize:开启后会在 mysqld.log 文件中自动生成 MySQL 密码。
- --user=mysql:运行的账户。
- --basedir=/usr/local/mysql:MySQL 的安装位置。
- --datadir=/usr/local/mysql/data:MySQL 数据库中数据的物理存放路径。
[root@MySQL ~]# cat <<END > /etc/my.cnf [mysqld] # 声明区域 basedir = /usr/local/mysql # MySQL 的安装位置 datadir = /usr/local/mysql/data # MySQL 的物理文件存放位置 port = 3306 # MySQL 服务监听的端口 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES # MySQL 的模式 character_set_server=utf8 # 服务器使用的字符集 init_connect='SET NAMES utf8' # 初始化连接都设置为 utf8 字符集 log-error=/usr/local/mysql/logs/mysqld.log # 指定日志文件位置 pid-file=/usr/local/mysql/logs/mysqld.pid # 指定运行服务所产生的 PID 文件位置 skip-name-resolve # 跳过 MySQL 的域名反向解析 END
[root@MySQL ~]# mkdir /usr/local/mysql/logs # 创建日志存放位置 [root@MySQL ~]# chown mysql:mysql /usr/local/mysql/logs/ # 赋权 [root@MySQL ~]# systemctl start mysqld # 开启 MySQL 数据库 [root@MySQL ~]# systemctl enable mysqld # 设置 MySQL 开机自启 [root@MySQL ~]# netstat -anpt | grep 3306
4.登录验证
[root@MySQL ~]# mysqladmin -u root password '123123' # 创建 MySQL 数据库密码 [root@MySQL ~]# mysql -u root -p 123123 # 登录 MySQL 数据库 mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) mysql> exit Bye
MySQL 5.7 安装完成之后,默认的 4 个数据库:
- information_schema:是一个信息数据库,这个数据库保存了所有数据库信息。如:数据库名、数据库表、访问权限等。
- mysql:是一个系统库,主要负责存储数据库的用户,权限设置等。
- performance_schema:是 MySQL 5.5 新增的一个性能优化引擎。
- sys:库中数据与 performance_schema 一致,但是把 performance_schema 中内容复杂度降低了。
三、SQL 语句操作——增删改查
1.SQL 语句分类
- DDL:数据定义语言,用来建立数据库,数据对象和定义其列。如 create alter drop。
- DML:数据操纵语言,用来查询、插入、删除、修改数据库中的数据。如 select insert update delete。
- DCL:数据控制语言,用来控制数据库组件的存取许可,存取权限等。如 commit rollback grant revoke。
2.数据记录类型
日期类型:
小数类型:
字符串类型:
3.表相关 SQL
- 表是数据库中的数据组成的单位,类似于 Java 中的类,每个字段都有对应的数据类型。
创建表的原理:
- 在客户端中写完创建表的 SQL 语句后客户端会把 SQL 语句交给 DBMS(MySQL);
- DBMS(MySQL) 解析后会在数据库中创建语句中的表和表中字段。
表的引擎:
- InnoDB:支持数据库的高级处理包括事务外键等。(表默认的引擎就是 InnoDB)
- Myisam:只支持数据的基本存储。
创建表时指定表的字符集和引擎
格式:create table person (id int,name varchar(10)) engine=myisam charset=utf8;
- 修改表的名字:rename table 旧表名 to 新表名
4.简单操作
[root@localhost ~]# mysql -uroot -p123123 #登录 MySQL 数据库 mysql> create database Coco; #创建一个数据库名为 Coco mysql> show create database Coco; #查看 Coco 数据库详情 mysql> use Coco; #切换到 Coco 库中 mysql> create table 成绩表 (姓名 varchar(11),年龄 int,出生日期 date,身份证号 char(18) not null,成绩 float,primary key (身份证号)); mysql> describe 成绩表; #查看成绩表数据结构
注解:
- varchar:可变长字符串类型。
- int:整数类型。
- date:时间类型。
- char:固定字符串类型。
- not null:不允许为空。
- float:浮点类型。
- primary key:设置主键,具有唯一性。
mysql> insert into 成绩表 values("张三",18,"2003-01-01",10086,85.5); mysql> insert into 成绩表 values("李四",21,"2000-02-02",20086,85.5); mysql> insert into 成绩表 values("王五",23,"1998-03-03",30086,86.5); mysql> select * from 成绩表;
在成绩表最后添加字段:
mysql> alter table 成绩表 add 性别 char(8);
在成绩表最前面添加:
mysql> alter table 成绩表 add ID int first;
在某个字段后面添加:
mysql> alter table 成绩表 add 籍贯 varchar(20) after 出生日期;
删除表中指定字段:
mysql> alter table 成绩表 drop 籍贯;
修改成绩表字段名和类型:
mysql> alter table 成绩表 change 姓名 name char(14);
修改成绩表类型和顺序:
mysql> alter table 成绩表 modify name varchar(11) first;
- 如想修改到某个位置,使用 alter table 成绩表 modify 字段名 新字段类型 after 年龄(就是将字段修改到年龄后面)。
修改成绩表引擎和字符集:
mysql> alter table 成绩表 engine=myisam charset=utf8;