MySQL数据库--基础含义、安装、SQL语句

1. 数据库介绍

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

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/

---------------------------------------------------------------------------------------------------------------------------------

2. 安装MySQL

服务器包:MariaDB-server(注意大小写)

客户端工具包:mariadb

方法一: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 root.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

-----------------------------------------------------------------

方法三:源码编译安装

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

------------------------------------------------------------------------------------------------------------------------------------------------

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

vim /etc/profile.d/mysql.sh

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

. /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

---------------------------------------------------------------------------------------

3.SQL语言(关系数据库使用的国际标准语言)

(Structure  Query  Language)

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

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

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

SQL语句的分类如下:

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

   CREATE  用来创建数据库

   DROP    删除数据库

   ALTER   修改数据库

   create|drop|alter   database|scheme   “数据库名”

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

   INSERT  增加数据库里的内容

   DELETE  删除数据库里的内容

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

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

   GRANT :授权、REVOKE :取消授权

   COMMIT:提交、ROLLBACK:取消提交

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

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

4. 数据库中的一些查看命令

(注意结尾都需要“;”,以下省略)

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

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

   use  “数据库名”     可切换数据库

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

   desc  “表名”     查看表的结构内容

5. 数据库表的建立

create  table  “表名”(字段1,字段2,字段3)

表中的字段:字段名、字段数据类型、修饰符(类似于awk中修饰)

数据类型的三大原则:

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

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

    尽量避免NULL

字符串:

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

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

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

   修饰符:

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

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

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

数据表中内容的填写:

   insert  into “表”(字段名)value(对应字段的内容),(对应字段的内容);

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

   truncate  table  “表”   清空表

   update “表”set “字段”where “条件” 表示在指定条件下修改

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

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

   ---------------------------------------------------------------------------------------------------------------

   可另行编辑SQL语句文件,并在命令行将其导入到数据库中:

   mysql  <  “编写的SQl语句文件”

   也可执行如下命令,直接查看数据库列表和某个数据库中的表单:

   mysql  -e ‘show  databases’

   mysql  -e ‘show  tables’“数据库名”

--------------------------------------------------------------------------------------------------------------------

6. 运用较多的DQL语句

可显示别名:

   select “字段名”as “别名” from  “表”

可增加过滤条件:

   select  *  from  “表” where  “条件”

   where 条件包括:

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

      between  ***  and  ***

      like ‘***%’(这里%相当于正则里的*)表示模糊查询

         ‘_’表示任意单一字符

      rlike    可以运用正则表达式

     is   null  (这个语法特殊)

      in (对象1、对象2)

去除重复:

    select  distinc “字段1”from  “表”

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

   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  条件

7. 数据库中多表的使用

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.字段 符合的条件”

8. 视图

   建立虚表,此时虚表无数据,数据是从实表查询到,格式如下:

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

   如果对虚表进行增加数据内容,会直接写入实表中, mysql数据库中设置变量的方法:select  set@a=10

9. 自定义函数

除了mysql自带的函数外,还可以进行自定义函数,为了避免设定函数时,因为“;”结尾导致退出,所以可以先修改结尾符,格式如下:

delimiter //

create  function  fun_name(定义不同字段)returns 字符类型

begin

需要执行的语句命令;

return (需要执行的语句);

end //

delimiter ; (此步骤是还原结尾符“;”)

函数的调用:select  fun_name(参数值)

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()    可查看当前用户授权

11. 体系架构

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

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

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

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

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

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

在存储方式上:

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

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

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

猜你喜欢

转载自blog.csdn.net/Ruixycowboy/article/details/81271719