MySQL---基础(修改版1.0)

数据库介绍

以一定的组织形式存在于存储介质里;

DBMS(Datebase Mannagement System):这是一款管理数据库的系统软件;

DBA(Datebase Administrator):数据库管理员。


基本功能:

数据定义、数据处理、数据安全、数据备份。


目前市场使用的一般都是关系型数据库(RDBMS),主要有以下几种:

MySQL、MariaDB、Percona Server、Oracle、MSSQL、DB2、PostgreSQL;

其中“关系”就是二维表的表现形式:

row(行):每行为一条记录;

column(列):表示每一种属性;

在每一种属性上可加入主键(primary key):确保被设为主键的属性不重复记录,保证唯一性。

数据库的正规化分析

数据库设计时都需要遵从不同的规范要求,这些不同的规范要求被称为不同范式,并且是呈递次规范,越高则数据库的冗余越小,目前来说,只需要满足  第三范式(3NF)即可。(NF:Normal Form)

(注意3NF是建立在满足1NF和2NF的情况下)

MySQL和MariaDB数据库

两者隶属于同一作者开发,因而无大变化,并且在Linux中两者基本通用

官方网址:https://www.mysql.com/

http://mariadb.org/

官方文档:https://dev.mysql.com/doc/

     https://mariadb.com/kb/en/


安装MySQL

方法一:yum源安装

官方提供:https://downloads.mariadb.org/mariadb/repositories/,点开此网站,可以查询到具体的yum源地址

清华大学提供的具体的yum源地址:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.2/

方法二:安装二进制格式程序包

建议安装在逻辑卷上,这样可以保证后期数据库增大后,可以随时进行增加容量。

步骤如下:

第一步:从相应的网站下载对应的mysql二进制安装包

 https://downloads.mariadb.org/

第二步:在原有硬盘增加逻辑卷,并进行挂载

fdisk /dev/sda 增加分区并指定类型为LVM

pvcreate “LVM分区” 创建物理卷

vgcreate“卷组名”“物理卷”  创建卷组

lvcreate -n“逻辑卷名”-l 100%FREE“卷组名” 全部设逻辑卷

mkfs.xfs /dev/“卷组名”/“逻辑卷名” 创建文件系统

在此可专门建立文件夹为挂载点,假设为 /data 目录

为保证开机即可挂载,可将其写入/etc/fstab文件中

第三步:创建系统用户mysql信息

useradd  -r -d /data/mysql -m mysql -s /sbin/nologin

第四步:二进制程序的准备

tar xvf“二进制文件”-C /usr/local  解压缩致/usr/local/中

进入到/usr/local/中,创建解压缩后二进制文件的软连接:

    ln -sv“解压缩后二进制文件”mysql

并修改软连接mysql的属性:

    chown -R mysql.mysql /usr/local/mysql

第五步:创建数据库文件

进入到/usr/local/mysql/目录中,执行如下命令:

./scripts/mysql_install_db  --datadir=/data/mysql --user=mysql

第六步:在/etc/下,创建配置文件,为了方便管理,可以专门创建指定目录:

mkdir /etc/mysql

cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf(注意配置文件名必须为my.cnf)

另外还需要修改配置文件里的部分内容:

    datadir=/data/mysql

第七步:准备启动脚本

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

systemctl start mysqld

systemctl enable mysqld(可设为开机启动)

第八步:对数据库进行安全加固

mysql_secure_installation

方法三:源码编译安装

第一步,安装编译需要的程序包

yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel

第二步,做准备用户和数据目录

mkdir /data

useradd -r -s /bin/false -m -d /data/mysqldb/ mysql

tar xvf mariadb-10.2.15.tar.gz

第三步,cmake 编译安装

cd mariadb-10.2.15/

cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql -DMYSQL_DATADIR=/data/mysqldb/ -DSYSCONFDIR=/etc -DMYSQL_USER=mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITHOUT_MROONGA_STORAGE_ENGINE=1 -DWITH_DEBUG=0 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DENABLED_LOCAL_INFILE=1 -DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci

make && make install

如果出错,执行rm -f CMakeCache.txt

后续操作和方法二二进制安装一样,进行数据库文件的生成、配置文件准备、启动脚本设置。

补充:因为需要经常使用mysql二进制程序,所以建议将路径加入到PATH变量中,并且为确保每次开机都有效,则可写入配置文件中:

vim /etc/profile.d/mysql.sh

PATH=/usr/local/mysql/bin:$PATH

source /etc/profile.d/mysql.sh


Mysql多实例的创建(这里假设建立3个,并以端口号作为区分)(是已安装mariadb-server已经安装的情况下)

第一步:创建需要多线程对应的文件夹,并修改对应权限

mkdir /mysqldb/{3306,3307,3308}/{etc,bin,data,pid,socket,log} -pv

chown  -R  mysql.mysql  /mysqldb/

第二步:数据库初始化的建立

mysql_install_db  --datadir=/mysqldb/3306/data --user=mysql(其中3307和3308以同样方式修改)

第三步:准备配置文件

cp /etc/my.cnf /mysqldb/3306/etc/ (拷贝原配置文件)

vim /mysqldb/3306/etc/my.cnf (修改如下配置)

[mysqld]

port=3306

datadir= /mysqldb/3306/data

socket=/mysqldb/3306/socket/mysql.sock

[mysqld_safe]

log-error=/mysqldb/3306/log/mariadb.log

pid-file=/mysqldb/3306/pid/mariadb.pid

(其中3307和3308以同样方式修改)

第四步:创建启动脚本

cp mysqld /mysqldb/3306/bin/   (拷贝服务脚本)

vim /mysqldb/3306/bin/mysqld

cmd_path="/usr/bin"

chmod +x /mysqldb/3306/bin/mysqld (加上执行权限)

(其中3307和3308以同样方式修改)

(在这里需要注意的是cmd_path的路径,在yum安装、编译安装或者二进制安装时如果设置不同的话,需要修改成对应的路径)

第五步:为保证安全,可给root修改口令

mysqladmin  -S /mysqldb/3306/socket/mysql.sock password '密码'

此步骤需要在服务启动的情况下修改

   (其中3307和3308以同样方式修改)

注意,若要打开连接指定的mysql时,则需要指定对应的socket文件,命令如下:

   mysql -S /mysqldb/3306/socket/mysql.sock  -p


SQL语言(Structure  Query  Language)(关系数据库使用的国际标准语言)

大小写不敏感,语句可以单行或多行,以“;”结尾

数据库对象的名称有以下几个重要要求:

必须以字母开头、不与数据库资源同名、同一数据库下不重名

SQL语句的分类如下:

第一种:DDL (Data  Defination  Language)数据定义语言

CREATE 用来创建数据库

DROP 删除数据库

ALTER 修改数据库

create|drop|alter database|scheme DB_NAME

第二种:DML (Data  Manipulation  Language)数据库操纵语言

INSERT  增加数据库里的内容

DELETE  删除数据库里的内容

UPDATE  修改数据库里的记录内容

第三种:DCL (Data  Control  Language)数据控制语言

GRANT :授权、REVOKE :取消授权

COMMIT:提交、ROLLBACK:取消提交

第四种:DQL  (Data  Query  Language)数据库的查询语言

SELECT 例:select  *  from  “数据库表名”


mysql数据库中的一些查看命令(注意结尾都需要“;”,以下省略)

show databases 显示已有的数据库列表

show warnings 查看警告信息(只显示上一条信息)

use DB_NAME 可切换数据库

show tables 显示某个数据库中的表信息

desc TB_NAME     查看某个表的结构内容

mysql数据库表的建立

create table TB_NAME(字段1,字段2,字段3)

创建的字段包括:字段名、字段数据类型、修饰符(类似于awk中修饰)

数据类型的三大原则:

尽量使用正确存储数据的最小数据类型

使用简单的数据类型方便CPU处理

尽量避免NULL

字段数据类型:

char(n) 指定字符长度为n,固定不变,不够会用空格补齐

varchar(n) 根据输入字符串长度变化,但不超过

ENUM 枚举    表示只能选其中一个

修饰符:

PRIMARY KEY 主键(每个表只能有一个,且所属字段内容不为空)

UNIQUE KEY 唯一键(每个表中可有多个)

AUTO_INCREMENT 自动递增是配合主键、唯一键一起使用的,并且适用于整数类型

mysql数据表中内容的增删改查:

insert into TB_NAME(字段名)value(对应字段的内容) 在指定表中加入一条记录

select * from TB_NAME 将表中的内容显示一遍

truncate table TB_NAME 清空表

update TB_NAME set“字段”where“条件” 表示在指定条件下修改表中某行记录

delete from TB_NAME where“条件” 删除指定条件的表中的内容

为了防止在进行数据库表中内容修改时避免误操作,可在mysql-clients.cnf这个配置文件中的[mysql]中加入“safe-updates”,或者可在执行mysql命令时,加入选项“-U | --safe-updates”

在bash命令行可通过 mysql -e "SQL语句" 直接执行需要操作的SQL语句,不需要进入mysql命令的交互式状态


一些运用较多的DQL语句

select“字段名”as“别名”from TB_NAME 将某个字段以别名的方式显示

select * from TB_NAME where“条件” 通过指定条件查询表中内容

      其中“条件”包括如下一些类型:

      1.算数运算符(+、-、*、/、%)、比较运算符(<、=、>)

      2.between *** and ***

      3.like‘***%’(这里%相当于正则里的*)表示模糊查询,其中‘_’表示任意单一字符

      4.rlike 可以运用正则表达式

select distinc“字段名”from TB_NAME 去除指定表中某个字段下的重复内容

若是需要按照指定字段排序,则在语句最后加入 :

order by“字段” 正序

order by“字段”desc 倒序

可根据指定条件将查询结果分组用于聚合函数运算:avg()、max()、min()、count()、sum()

例如:select gender,avg(age) from students group by gender 表示以gender字段分类,求各分类段平均年龄

也支持多个分组一起: group by“字段1”,“字段2”

也可对指定组进行过滤条件:group by“字段”having“条件”


mysql数据库中多表的使用

join   横向合并使用

交叉连接(笛卡尔乘积):(总行数=表1行数*表2行数)

select * from “表1”cross join “表2”

内连接,需要有指定条件:

select * from “表1”“表2”where“条件”(老方法)

select * from “表1”inner join “表2” on “条件”

这里需要注意的是“*”中的字段名可根据需要填写,若是表1和表2有冲突,则需要进行划分,可通过设置表的别名的方式来区分

外连接分为以下:

    左、右外连接:

    包括交集:

    select * from“表1”left|right join“表2”on“条件”

    不包括交集:

select * from“表1”left|right join“表2”on“条件”where“条件中表2|1的字段”is null

    完全外连接:(注意此语法mysql不支持)

    包括交集:

    select * from“表1”full join“表2”on“条件”

    此语法可通过左右外连接包括交集,并使用union结合

    不包括交集:

    select * from“表1”full join“表2”on“条件”where“条件中表1的字段”is null or“条件中表2的字段”is null

    可在完全外连接后,并在 where条件下“条件中表1的字段” is null or“条件中表2的字段”is null执行select语句

自连接:

当在一张表中需要取出两个字段作为对应关系,则可以对一张表进行多次别名设置,然后利用连接方法,得出内容

union  纵向合并使用

   在使用union时,则需要保证合并的表的字段数对等,操作如下:

   select * from“表1”union select * from“表2”

   若需要对合并之后的表单在进行条件查询,则需要指定别名来进行辨别,否则不会识别具体对哪个表的字段进行查询,称为子查询,操作如下:

   select * from(合并后的表内容)as A where“A.字段 符合的条件”


为保证安全,可建立虚表,此时虚表无数据,数据是从实表查询到

create view“虚表名”as select“部分字段”from“表”

如果对虚表进行增加数据内容,会直接写入实表中


mysql数据库中设置变量的方法:select set@a=10


用户的管理和权限

创建用户

create user‘用户名’@‘主机地址’identified by‘密码’

此时会因为授权的问题,只能够查阅部分数据库

通过 show processlist 可查看已连接至数据库的用户信息,

删除用户如下:

drop user‘用户名’@‘主机地址’

若是需要修改密码,则可以使用如下命令:

方法一:立即生效

set password for‘用户名’@‘主机地址’= password(‘新密码’)

方法二:

因为用户信息也是属于数据库mysql里的表,所以可以进入到mysql数据库中使用update语句

update user set password=password(‘新密码’)where“条件”

除此之外还需要执行:flush privileges 指令,才会生效

方法三:

mysqladmin -u用户 -p旧密码 password‘新密码’

权限的一些设定:

授权指令如下:

grant“操作指令”on“某数据库或某表”to 用户名@‘主机地址’

也可在后面加入 identified by‘密码’,若是没有此用户,则会自动创建

也可取消授权:

revoke“操作指令”on“某数据库或某表”from 用户名@‘主机地址’

 

show grants for用户名@‘主机地址’   可查看指定用户授权

show grants for current_user()    可查看当前用户授权


体系架构

存储引擎是用来将在数据库中的增、删、改、查操作内容写入到磁盘中

show engines      可查看支持的存储引擎

show variables like‘%storage_engine%’ 查看默认的存储引擎

目前主流的是MyISAM和InnoDB,两者的区别在于:

MyISAM支持表级锁,InnoDB支持行级锁;

只有InnoDB支持事务性,MVCC(高并发)

在存储方式上:

    MyISAM文件分为三种:表格式定义(.frm)、数据文件(.MYD)、索引文件(.MYI)

    InnoDB文件分为两种:表格式定义(.frm)、数据和索引文件放在一起(.ibd)

(在MySQL 5.5版本以后数据库默认使用InnoDB引擎,并且会将每个数据库的数据索引文件都分别存放,不会集中放入一个文件中)


实际生产中建议的my.cnf配置文件中的选项:

下面的“#”表示设定的数值

Innodb_file_per_table=1 数据库中每个表数据单独存放

max_connections=# MySQL服务器允许的最大同时会话连接数

back_log=# 最大同时会话连接数达到时可另外保持的连接数

max_connect_errors=# 某个主机连接错误次数超过指定值,会阻止此主机连接

max_allowed_packet =# 每个连接传输的数据包允许的最大值

open_file_limit=# 所有线程打开表的数量

innodb_buffer_pool_size=# 设置缓冲池,可相对的提高数据库性能

innodb_log_file_size=# 事务日志文件的大小

innodb_log_files_in_group=# 事务日志文件的总数



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值