MySQL数据库之数据库相关概念、MySQL下载安装、MySQL软件基本管理、SQL语句

数据库相关概念

数据库管理软件的由来

数据库管理软件:本质就是个C/S架构的套接字程序。 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题,总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写。

  • 数据库在狭义层面上来说
    • 指的是处理数据的底层程序
  • 数据库在广义层面上来说
    • 指的是操作这些底层程序的便捷应用软件
      其实学习数据库很多时候学习的是配套的数据库软件

什么是数据(Data)

描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字、图片,图像、声音、语言等,数据由多种表现形式,它们都可以经过数字化后存入计算机,在计算机中描述一个事物,就需要抽取这一事物的典型特征,组成一条记录,就相当于文件里的一行内容,单纯的一条记录并没有任何意义,如果我们按逗号作为分隔,依次定义各个字段的意思,相当于定义表的标题

什么是数据库(DataBase,简称DB)

数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的。过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用

数据库是长期存放在计算机内、有组织、可共享的数据。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享

在了解了Data与DB的概念后,如何科学地组织和存储数据,如何高效获取和维护数据成了关键

数据库管理软件分两大类:

市面上有很多数据库软件,但是大致就分为两类

关系型:常见的如MySQL,sqllite,db2,Oracle,PostgreSQL、MariaDB,access,sql server

  • MySQL:开源免费,使用非常广泛
  • Oracle:收费,维护成本高,大型公司可能会使用
  • PostgreSQL:支持二次开发
  • MariaDB:MySQL的替代产品(并且有自己的特性)
  • sqlite:小型数据库(Django框架自带该数据库)

非关系型:Redis,mongoDB,memcache

  • Redis:目前最火的缓存数据库,具有很多数据结构,功能强大
  • mongoDB:文档型数据库,可以用在大数据和爬虫领域
  • memcache:已经被redis淘汰

可以简单的理解为:

关系型数据库拥有固定的表结构,并且表与表之间可以建立代码层面的关系(存数据之前需要将表建立好(表就是文件),例如这个表是用户相关的表,里面专门存用户相关的数据。还需要建立权限表,里面存用户权限相关的数据。用户跟权限是有对应关系的,表跟表之间是有关系的,还有约束)

非关系型数据库没有固定的表结构,数据存储采用的是key-value键值对的形式

这么多数据库如何学习:

两大类数据库操作逻辑基本一致,每一类学习一个基本就可以掌握所有

mysql介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

mysql就是一个基于socket编写的C/S架构的软件

  • 客户端软件
    • mysql自带:如mysql命令,mysqldump命令等
    • python模块:如pymysql

MySQL主要版本

  • 5.6:使用频率较高的版本
  • 5.7:目前正在过渡的版本
  • 8.0:目前最新的版本
    不同的版本主要区别在于底层的逻辑 SQL语句几乎是一模一样的

MySQL下载安装

mac版本

Windows版本

1、下载:MySQL Community Server 5.6.51
    访问官网:https://www.mysql.com/
    具体步骤:
        DOWNLOADS
           MySQL Community (GPL) Downloads
               MySQL Community Server
                  Archives
                      选择版本下载压缩包(客服端 服务端)
2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:D:\mysql-5.6.51-winx64


3、目录介绍
     bin文件夹
     mysqld.exe  # 服务端
     mysql.exe  # 客服端
     data文件夹  # 存储使用过程中需要保存的数据 	
     my-default.ini  #配置文件
     readme  #说明文件

4、添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到
 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,D:\mysql-5.6.51-winx64\bin\】
 
5、初始化
C:\Users\Administrator> mysqld --initialize-insecure

6、启动MySQL服务
C:\Users\Administrator> mysqld    # 启动MySQL服务

7、启动MySQL客户端并连接MySQL服务(另开一个新的cmd)
C:\Users\Administrator> mysql -u root -p  # 连接MySQL服务器(账号登录(本地使用))
# mysql  # 游客登录模式
# mysql -hIP地址 -P端口号 -u用户名 -p密码  # 完整命令

将MySQL服务制作成Windows系统服务

'''
上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,
当前终端会被hang住,那么做一下设置即可解决此问题:
'''  
# 注意:--install前,必须用mysql启动命令的绝对路径或以管理员身份运行cmd
# 制作系统服务,在终端执行此命令:
C:\Users\Administrator> mysqld --install
 # "D:\mysql-5.6.51-winx64\bin\mysqld" --install
# 移除系统服务,在终端执行此命令:
C:\Users\Administrator> mysqld --remove
# "D:\mysql-5.6.51-winx64\bin\mysqld" --remove

# 注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
# 启动MySQL服务
C:\Users\Administrator> net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。

# 关闭MySQL服务
C:\Users\Administrator> net stop mysql
MySQL 服务正在停止.
MySQL 服务已成功停止。

MySQL软件基本管理

密码相关

初始状态下,管理员root,密码为空,默认只允许从本机登录localhost

# 针对管理员用户需要设置密码
方式1:直接在cmd窗口内使用mysqladmin命令
  C:\Users\Administrator>mysqladmin -uroot password "123"  # 设置初始密码,由于原密码为空,因此-p可以不用
  C:\Users\Administrator>mysqladmin -uroot -p"123" password "456"  # 修改mysql密码,因为已经有密码,必须输入原密码才能设置新密码
 
方式2:直接在登录状态下修改当前登录用户的密码
  set password=PASSWORD('密码')

破解密码方式:

跳过授权表启动服务端:
# 1.先关闭当前mysql服务端
命令行的方式启动(让mysql跳过用户名密码验证功能)
C:\Users\Administrator> mysqld --skip-grant-tables --user=mysql

# 2.直接以无密码方式连接,以管理员身份运行另外一个cmd
C:\Users\Administrator> mysql -uroot -p  # 直接回车
mysql> select user();  # 可以看到直接就是管理员用户

# 3.修改当前用户的密码
mysql> update mysql.user set password=password("111") where user="root" and host="localhost";

"""
执行一个update命令,mysql文件夹下面有一个文件user(点代表路径分隔符),把password这个字段
的值改掉(密码一定要存成密文的,所以调了password("111")这个函数,把函数的值赋值给字段)where
user把一个本地管理员账号的密码改成111
"""

# 4.立刻将修改数据刷到硬盘
mysql> flush privilegse;   # 执行命令,刷新权限信息
mysql> exit # 执行退出命令

# 5.然后关掉服务端,再以正常方式启动
改完密码重新启动服务端后再在客户端执行连接登录
C:\Users\Administrator>mysql -uroot -p"111"

可用此类方式关掉启动mysql服务

MySQL配置文件修改

mysql默认的配置文件

# 配置文件所在目录D:\mysql-5.6.51-winx64
my-default.ini  # ini结尾的一般都是配置文件文件

程序启动会先加载配置文件中的配置之后才真正的启动

[client] # 其它客户端(mysql既支持自己写的客户端,也支持其它语言客户端)

[mysql]  # 一旦客户端启动立刻加载下面的配置

[mysqld]  # 一旦服务端启动立刻加载下面的配置

"""
 这个文件不能改,需要自己建一个my.ini的配置文件
 修改配置文件后一定要重启服务才能生效
"""
# 统一编码的配置,无需掌握直接拷贝即可(偷懒将管理员用户名和密码也添加到配置文件,不是必备项)
[client]
default-character-set = utf8mb4
 
[mysql]
user = "root"  # 用户名
password=111  # 密码
default-character-set = utf8mb4
 
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

统一编码配置添加到my.ini

重启服务后查看配置文件是否修改成功

数据库核心概念

数据-----------------》事物的状态
记录-----------------》文件中的一条信息
表-------------------》一个文件
库-------------------》文件夹
数据库管理软件---------》套接字程序:mysqld、mysql
数据库服务器-----------》运行mysqld的计算机

SQL与NoSQL的由来

  • 数据库的服务端为了能够兼容不同类型的客户端实现数据交互,套接字管理软件的作者为使用者规定了统一的交互方式
    • 关系型数据库>>>:SQL语句
    • 非关系型数据库>>>:NoSQL语句

SQL语句

mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的客户端,或者其他模块来连接到mysqld,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。该语法即sql(Structured Query Language 即结构化查询语言)

SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。SQL语言分为3种类型:
1、DDL语句    数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句    数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句    数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE

库详细操作

  • 系统数据库

information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema:5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象 
mysql:授权库,主要存储系统用户的权限信息
test:MySQL数据库系统自动创建的测试数据库
  • 创建数据库

    • 1 语法(help create database)
      CREATE DATABASE 数据库名 charset utf8;
    
    • 2 数据库命名规则
    可以由字母、数字、下划线、@、#、$
    区分大小写
    唯一性
    不能使用关键字如 create select
    不能单独使用数字
    最长128位
    
  • 库---》文件夹:操作文件夹

增:create database day02 charset utf8mb4;  # 创建day02数据库,指定字符编码“utf8mb4”

改:alter database day02 charset gbk;  # 将字符编码改为“gbk”

查:show databases;   # 查看所有的库
    select database();  # 查看当前所在的库
    show create database day02;  # 查看刚刚创建的库

删:drop database day02;  # 删库

针对表的操作

  • 表----》文件:操作文件

"""
要想操作表必须得先有库
语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);

注意:
1. 在同一张表中,字段名是不能相同
2. 宽度和约束条件可选
3. 字段名和类型是必须的
"""  
# 表操作:
 create database day02;  # 先创建库
 use day02;  # 切换到库下
 select database();  # 查看当前所在的库

增:create table t1(id int,name varchar(16)); 
 # 创建表t1当前库下无需加前缀day02,指定id字段、对应类型,名字,名varchar类型的宽度(16个字符)
 
改:alter table t1 rename t2;  # 改表名
   alter table t2 modify name varchar(10); # 改字段varchar类型的宽度改为10
   
查:show tables;  # 查看当前库下的表信息
   desc t2;    # 指定查看一张表的信息
   show create table t2\G;  # 查看表详细结构,可加\G
   
删:drop table day02.t2;  # 指定绝对路径删除表,不在当前库下也能删除

针对记录的操作

  • 记录----》操作文件中的内容

# 想要操作记录必须得先确定库和表
create database day02;  # 先创建库
use day02;  # 最好是切到库下进行操作(路径不用加前缀)
select database();  # 查看当前所在的库
create table t1(id int,name varchar(16));  # 创建表

增:insert into t1 values  # 往t1插入值
      (1,"jason"),  # 添加第一条记录
      (2,"tom"),  # 添加第二条记录
      (3,"jack");  # 添加第三条记录 
      
改:update day02.t1 set name = "lili" where id = 2;
# 更新day02下的t1表,设置名字改为“lili,”把id等于2的名字改为“lili”

查:select * from day02.t1;  # 查看t1表里面的所有内容
   select name from day02.t1;  # 只查看t1表里面的名字
   select name from day02.t1 where id >= 2;  # 查看id大于或等于2的信息
      
      
删:delete from day02.t1 where id = 2;  # 指的删除id等于2的内容

清空表:
    delete from t1;  # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始。
    truncate table t1;  # 数据量大,删除速度比上一条快,且直接从零开始,
    auto_increment  # 表示:自增
    primary key  # 表示:约束(不能重复且不能为空);加速查找

posted @ 2021-01-30 23:46  山风有耳  阅读(280)  评论(1)    收藏  举报