mysql基础
mysql基础
数据库模型概述
第一类概念模型(conceptual model),也称信息模型,她是按用户的观点来对数据和信息建模, 主要用于数据库设计。
第二类中的逻辑模型主要包括层次模型(hierarchical model)、网状模型(network model)、关系模型(relational model)、面向对象数据模型(object oriented data model)和对象关系数据模型(object relational data model)、半结构化数据模型(semistructured data model)等。它是按计算机系统的观点对数据建模,主要用数据库管理系统的实现。
第二类中的物理模型是对数据最底层的抽象,它描述数据在系统内部的表示方式和存取方法,或在磁盘或磁带上的存储方式和存取方法,是面向计算机系统的。物理模型的具体实现是数据库管理系统的任务,数据库设计人员要了解和选择物理模型,最终用户则不必考虑物理级的细节。
数据模型是数据库系统的核心和基础。各种机器上实现的数据库管理系统软件都是基于某种数据模型或者说是支持某种数据模型的。
常用的数据模型
层次模型(hierarchical model)
网状模型(network model)
关系模型(relational model )
面向对象数据模型(object oriented data model)
对象关系数据模型(object relational data model)
半结构化数据模型(semistructure data model)
其中层次模型和网状模型统称为格式化模型。
关系模型是最重要的一种数据模型。关系数据库系统采用关系模型作为数据的组织方式。
1.关系模型的数据结构
关系模型与以往的模型不同,它是建立在严格的数学概念的基础上的。从用户观点看,关系模型由一组关系组成。每个关系的数据结构是一张规范化的二维表。
关系(relation):一个关系对应通常说的一张表。
元组(tuple):表中的一行即为一个元组。
属性(attribute):表中的一列即为一个属性,给每一个属性起一个名称即属性名。
码( key):也称为码键。表中的某个属性组,它可以唯一确定一个元组, 如学号可以唯一确定一个学生,也就成为本关系的码。
域(domain):域是一组具有相同数据类型的值的集合。属性的取值范围来自某个域 。如人的年龄一般在1~120岁之间,大学生年龄属性的域是(15~45岁),性别的域是(男, 女),系名的域是一个学校所有系名的集合。
分量:元组中的一个属性值。
关系模式:对关系的描述,一般表示为
关系名(属性1,属性2,……,属性n)
关系术语 | 一般表格术语 |
---|---|
关系名 | 表名 |
关系模式 | 表头(表格的描述) |
关系 | (一张)二维表 |
元组 | 记录或行 |
属性 | 列 |
属性名 | 列名 |
属性值 | 列值 |
分量 | 一条记录中的一个列值 |
非规范关系 | 表中有表(大表中嵌有小表) |
关系数据库
关系模型的数据结构非常简单,只包含单一的数据结构 —- 关系。在用户看来,关系模型中数据的逻辑结构是一张扁平的二维表。
关系模型的数据结构虽然简单却能够表达丰富的语义,描述出现实世界的实体以及实体间的各种联系。也就是说,在关系模型中,现实世界的实体以及实体间的各种联系均用单一的结构类型,即关系来表示。
关系数据库
在关系模型中,实体以及实体间的联系都是用关系来表示的。例如导师实体、研究生实体、导师与研究生之间的一对多联系都可以分别用一个关系来表示。在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述。 关系数据库模式包括若干域的定义,以及在这些域上定义的若干关系模式。
关系数据库的值是这些关系模式在某一时刻对应的关系的集合, 通常就称为关系数据库。
在关系数据模型中实体及实体间的联系都用表来表示,但表是关系数据的逻辑模型。在关系数据库的物理组织中,有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理。
关系操作
关系模型给出了关系操作的能力的说明,但不对关系数据库管理系统语言给出具体的语法要求,也就是说不同的关系数据库管理系统可以定义和开发不同的语言来实现这些操作。
基本的关系操作
关系模型中常用的关系操作包括查询(quey)操作和插入(insert)、 删除(delete)、修改(update)操作两大部分。
关系的查询表达能力很强,是关系操作中最主要的部分。查询操作又可以分为选择(select)、投影(project)、连接(join)、除( divide)、并(union)、差(except)、交(intersection)、笛卡儿积等。其中选择、投影、并、差、笛卡儿积是5种基本操作,其他操作可以用基本操作来定义和导出,就像乘法可以用加法来定义和导出一样。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。 这种操作方式也称为一次一集合(set-at-a-time)的方式。相应地,非关系数据模型的数据操作方式则为一次一记录(record-at-a-time)的方式。
关系数据库标准语言SQL
结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言,也是一个通用的、功能极强的关系数据库语言。其功能不仅仅是查询,而且包括数据库模式创建、数据库数据的插入与修改、数据库安全性完整性定义与控制等一系列功能。
自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础。SQL已成为数据库领域中的主流语言,其意义十分重大。有人把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。
语言简洁、易学易用
SQL功能极强,但由于设计巧妙,语言十分简洁,完成核心功能只用了9个动词,如下表所示:
SQL功能 | 动词 |
---|---|
数据查询 | SELECT |
数据定义 | CREATE,DROP,ALTER |
数据操纵 | INSERT,UPDATE,DELETE |
数据控制 | GRANT,REVOKE |
数据定义
关系数据库系统支持三级模式结构,其模式、外模式和内模式中的基本对象有模式、表、视图和索引等。因此SQL的数据定义功能包括模式定义、表定义、视图和索引的定义, 如下表所示。
操作对象 | 操作方式 | ||
---|---|---|---|
创建 | 删除 | 修改 | |
模式 | CREATE SCHEMA | DROP SCHEMA | |
表 | CREATE TABLE | DROP TABLE | ALTER TABLE |
视图 | CREATE VIEW | DROP VIEW | |
索引 | CREATE INDEX | DROP INDEX | ALTER INDEX |
SQL标准不提供修改模式定义和修改视图定义的操作。 用户如果想修改这些对象,只能先将它们删除然后再重建。SQL标准也没有提供索引相关的语句,但为了提高查询效率, 商用关系数据库管理系统通常都提供了索引机制和相关的语旬。
在早期的数据库系统中,所有数据库对象都属于一个数据库,也就是说只有一个命名空间。现代的关系数据库管理系统提供了一个层次化的数据库对象命名机制,一个关系数据库管理系统的实例(instance)中可以建立多个数据库,一个数据库中可以建立多个模式,一个模式下通常包括多个表、视图和索引等数据库对象。
MySQL
MySQL是最流行的开 SQL数据库管理系统,由Oracle Corporation开发,分发和支持。MySQL网站(http://www.mysql.com/)提供了有关MySQL软件的最新信息。
MySQL是一个数据库管理系统。数据库是结构化的数据集合。从简单的购物清单到图片库,或者企业网络中的大量信息,它都可以是任何东西。要添加,访问和处理存储在计算机数据库中的数据,您需要一个数据库管理系统,例如MySQL Server。由于计算机非常擅长处理大量数据,因此数据库管理系统作为独立的实用程序或其他应用程序的一部分,在计算中起着核心作用。
MySQL数据库是关系数据库。关系数据库将数据存储在单独的表中,而不是将所有数据放在一个大的仓库中。数据库结构被组织成针对速度进行了优化的物理文件。具有对象(例如数据库,表,视图,行和列)的逻辑模型提供了灵活的编程环境。您可以设置规则来控制不同数据字段之间的关系,例如一对一,一对多,唯一,必需或可选以及不同表之间的“指针”。数据库强制执行这些规则,因此,在设计良好的数据库中,您的应用程序永远不会看到不一致,重复,孤立,孤立,过期或丢失的数据。“ MySQL”的SQL部分代表“ 结构化查询语言 ”。SQL是用于访问数据库的最常见的标准化语言。根据您的编程环境,MySQL的主要功能您可以直接输入SQL(例如,生成报告),将SQL语句嵌入用另一种语言编写的代码中,或者使用特定于语言的API来隐藏SQL语法。SQL由ANSI / ISO SQLStandard定义。SQL标准自1986年以来一直在发展,并且存在多个版本。在本手册中,“ SQL-92”是指1992年发布的标准,“ SQL:1999”是指1999年发布的标准,“ SQL:2003”是指标准的当前版本。我们使用“ SQL标准”这一短语来随时表示SQL标准的当前版本
MySQL软件是开源的。
开源意味着任何人都可以使用和修改该软件。任何人都可以从互联网上下载MySQL软件并使用它而无需支付任何费用。如果愿意,您可以学习源代码并进行更改以适合您的需求。MySQL软件使用http://www.fsf.org/licenses/的GPL(GNU通用公共许可证) 来定义您在不同情况下可以使用或不可以使用的软件。如果您对GPL不满意,或者需要将MySQL代码嵌入到商业应用程序中,可以从我们这里购买商业许可的版本。有关更多信息,请参见“ MySQL许可概述”(http://www.mysql.com/company/legal/licensing/)
MySQL数据库服务器非常快速,可靠,可扩展且易于使用。
如果这是您想要的,请尝试一下。MySQL Server可以与其他应用程序,Web服务器等一起轻松地在台式机或笔记本电脑上运行,几乎不需要或根本不需要注意。如果将整台计算机专用于MySQL,则可以调整设置以利用所有可用的内存,CPU能力和I / O容量。MySQL还可以扩展到一起联网的机器集群。
MySQL Server最初是为处理大型数据库而开发,其处理速度比现有解决方案要快得多,并且已经在苛刻的生产环境中成功使用了数年。尽管经过不断的发展,MySQL Server如今提供了丰富而有用的功能。它的连接性,速度和安全性使MySQLServer非常适合访问Internet上的数据库。
• MySQL Server在客户端/服务器或嵌入式系统中运行。
MySQL数据库软件是一个客户端/服务器系统,由支持不同后端的多线程SQL Server,几个不同的客户端程序和库,管理工具以及广泛的应用程序编程接口(API)组成。
我们还提供MySQL Server作为嵌入式多线程库,您可以将其链接到应用程序中,以获取更小,更快,更易于管理的独立产品。
提供了大量的MySQL贡献软件。
MySQL Server具有与我们的用户密切合作开发的一组实用功能。您最喜欢的应用程序或语言很可能支持MySQL数据库服务器。
发音“ MySQL”的官方方法是“ My Ess Que Ell”(不是“ my sequel”),但是我们不介意将其发音为“ my sequel”还是其他本地化方式。
MySQL的前世今生
2001年MySQL数据库中加入了另一个存储引擎InnoDB。InnoDB支持事务,支持行级锁定,对于高并发的用户来说,可谓及时雨。至此,MySQL中的MyISAM和InnoDB两大主力引擎均已就位,而互联网大潮也早就鼓舞起来,MySQL也开始有了自己的市场。所以在2001年发布的3.23 版本的时候,该版本已经支持大多数的基本的SQL 操作,而且还集成了MyISAM和InnoDB 存储引擎。MySQL与InnoDB的正式结合版本是4.0。
2005年,MySQL5.0版本发布,这是个非常重要的版本,提供了众多特性,比如说:存储过程、触发器、视图、游标、分布式事务等,它也越来越像是一个企业级的数据库,具备了较为全面的技术指标。
正当一切看起来很顺利的时候,InnoDB存储引擎的版权商Innobase被Oracle收购。同年Oracle又收购了Sleepcat公司,该公司为MySQL提供了支持事务的BDB存储引擎。很明显MySQL被Oracle盯上了。
2007年MySQL的年总收入已经达到了7500万美元,照此下去2008年非常有希望达到1个亿的目标。然而,事实难料,SUN公司出价10亿美元,收购MySQL公司,及其拥有的MySQL产品、商标及版本。
后来由于种种原因MySQL创始人:Michael Widenius、Allan Larssion先后向SUN公司提交了辞呈,离开了他们一手创立的企业。
2009年Oracle公司出价74亿美元收购SUN公司,通过收购SUN公司,Oracle终于将MySQL收入囊中
MySQL版本
要安装哪个MySQL版本和发行版首先,确定是安装开发版本还是通用版本(GA)。开发版本具有最新功能,但不建议用于生产环境。GA 版本,也称为生产版本或稳定版本,旨在用于生产用途。我们建议使用最新的GA版本。MySQL 8.0中的命名方案使用的发行版名称由三个数字和一个可选的后缀组成(例如,mysql-8.0.1-dmr)。发行名称中的数字解释如下:• 第一个数字(8)是主版本号。•
第二个数字(0)是次要版本号。总而言之,主要和次要数字构成发行版本号。序列号描述了稳定的功能集。• 第三个数字(1)是发行系列中的版本号。对于每个新的错误修正版本,此值均递增。在大多数情况下,系列中的最新版本是最佳选择。版本名称也可以包含一个后缀,以指示版本的稳定性。一系列发行中的发布会通过一组后缀来指示稳定性水平如何提高。可能的后缀为:• dmr指示开发里程碑版本(DMR)。MySQL开发使用里程碑模型,其中每个里程碑都引入了一小部分经过全面测试的功能。从一个里程碑到下一个里程碑,基于尝试这些正常发布的社区成员提供的反馈,功能界面可能会更改,甚至功能可能会被删除。里程碑版本中的功能可能被视为具有预生产质量。• rc表示发布候选(RC)。通过MySQL的所有内部测试后,发布候选版本被认为是稳定的。RC版本中可能仍会引入新功能,但是重点将转移到修复错误上,以稳定本系列中较早引入的功能。
缺少后缀表示一般可用性(GA)或生产版本。GA版本稳定,已成功通过了较早的发布阶段,并且被认为是可靠的,没有严重的错误并且适合在生产系统中使用。系列开发工作从DMR版本开始,随后是RC版本,最后达到GA状态版本。
mysql版本及操作系统支持表
1 | https://www.mysql.com/support/supportedplatforms/database.html |
可以发现,mysql5.6和5.7和8.0 都支持linux centos7或centos6的x86_64架构的
但是ARM 64架构的只有mysql8.0才支持。
windows 10 只支持 mysql5.7和mysql8.0
windows server 2012 和server 2016 mysql5.6、5.7 和 8.0都支持
macOS 10.14版本只支持5.7和8.0版本。
在Windows 10 上安装 MySQL 8.0.19
重要提示:MySQL 8.0 Server 在Windows 平台上安装需要安装“Microsoft Visual C++ 2015 Redistributable Package” 如果是Debug版本,还需要安装“Visual Studio 2015”, 另外MySQL 8.0 只能运行在 64 位的平台上。
安装方法一:使用安装文件直接安装
1.首先下载安装文件 MySQL Installer 8.0.19
这里分两种文件:
一种是在线安装包:mysql-installer-web-community-8.0.19.0.msi(没有绑定任何应用程序)
一种是离线安装包:mysql-installer-community-8.0.19.0.msi(绑定了相关的应用程序)
安装后文件目录结构:
安装目录:C:\Program Files\MySQL
Server目录:C:\Program Files\MySQL\MySQL Server 8.0
bin:该目录包含 mysqld server,客户端工具及可执行文件
docs:版本发行信息
etc:示例 include: (C/C++)头文件
lib:库文件
share:存放一些字符集,语言文件等信息 数据目录:C:\ProgramData\MySQL\MySQL Server 8.0
Data:存放日志和数据库文件
my.ini:配置文件
安装方法二:使用压缩包文件安装
安装包下载:
1.通用版下载 mysql-8.0.19-winx64.zip
2.Debug版本 mysql-8.0.19-winx64-debug-test.zip
步骤:
1.解压缩
2.新建my.ini文件,放在 basedir 目录下(即与 bin 目录同级)
1 | [mysqld] |
3.配置环境变量:
1)新建MySQL_HOME变量,并配置 D:/MySQLDir
2)编辑path系统变量 Path:%MySQL_HOME%\bin
4.初始化:d:\MySQLDir\bin>mysqld –initialize –console
注意默认的初始化密码
如果不指定 –console 初始化的相关信息会保存在这个路径下的err文件中:D:\MySQLDir\data\JeeStudy-PC.err 这里不建议使用:–initialize-insecure ,尤其是在生成环境中,绝对不要使用,因为他不产生随机密码!!!
通过初始化会产生默认用户root,即 ‘root’@’localhost’
5.启动:mysqld –console
6.登录:mysql -u root -p
7.修改密码:
1 | mysql> alter user 'root'@'localhost' identified by '123'; |
8.安装服务:
mysqld –install mysql819 (删除服务:sc delete mysql819 或者:mysqld –remove mysql819)
9.启动服务:
net start mysql819 (停止服务:net stop mysql819)
10.测试:
查看数据库:mysqlshow.exe -u root -p
查看mysql数据库中的表:mysqlshow.exe mysql -u root -p
执行一个sql语句:mysql -e “select user,host,plugin from mysql.user” mysql -u root -p
11.登录后,查看数据库 show databases;
12.再次初始化:
1 | mysqld --initialize --console |
13.创建用户:
1 | create user 'yichen'@localhost identified by '321'; |
14.数据库测试:
1 | mysql test -u root -p 123 |
15.查看字符集:
1 | mysql> show variables like '%character%'; |
16.注意:
1)用这种方法安装,要注意防火墙,需要把MySQL相关的端口添加到防火墙允许策略,否则不让连接。
2)修改mysql.user 中的Host,因为默认是localhost,只能本机连接(这也是一种安全策略) Host is not allowed to connect to this MySQL server。
解决方案:UPDATE mysql.user SET Host='%' WHERE User='root';
(这里我们以root为例)
如果不重启服务器,还需要执行: flush privileges;
3)Authentication plugin ‘caching_sha2_password’ cannot be loaded: 找不到指定的模块。这是因为MySQL 8中使用的加密策略是 caching_sha2_password ,如果使用不支持这个加密方式的客户端时会报出这个错误。MySQL 8 之前的版本中加密规则是 mysql_native_password,所以想要连接最新版本的MySQL数据库,需要最新版支持 caching_sha2_password 加密方式的客户端(像:MySQL的CE、Navicat150都是支持的)
1 | [mysqld] |
在Linux下 MySQL 8.0 下载安装详解
安装环境
1 | yum install -y redhat-lsb |
如果遇到这个问题,解决方案如下:
问题:centos8 市场 Cannot update read-only repo
解决方法:
1、dnf install -y centos-release-stream
2、dnf update
3、重启CentOS 8
安装方法一:在线傻瓜式安装
1 | dnf install @mysql |
选择Y会继续执行。再次输入Y后安装完成。
2.启动服务,并设置开机启动
1 | systemctl enable --now mysqld |
3.验证 mysqld 是否正在运行
1 | systemctl status mysqld |
结果:Active: active (running) since Mon 2020-03-30 19:11:12 CST; 39s ago
到此 安装MySQL 8.0成功!!!
安装方法二:在线傻瓜式安装
1.获取yum地址或rpm包
官方地址:
1 | https://dev.mysql.com/downloads/repo/yum/ |
根据OS版本,选择Download,在新的页面 “**No thanks, just start my download.**”右键选择“复制链接地址”这样就可以把地址复制下来了,当然也可以直接点击,把rpm包下载下来后进行安装(直接进入第3步)。
2.根据第一步获取下载链接后可以在命令行中直接下载:
1 | wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm |
3.安装MySQL的yum源:
1 | rpm -ivh mysql80-community-release-el7-3.noarch.rpm |
4.安装mysql服务:
1 | yum install mysql-server |
5.启动mysql
1 | systemctl enable mysqld.service |
查看零时密码
1 | grep password /var/log/mysqld.log |
安全性
1 | mysql_secure_installation |
运行mysql_secure_installation脚本,该脚本执行一些与安全性相关的操作并设置MySQL root 密码(移除匿名用户、禁用root远程登录、删除test数据库、重新加载权限表)
1 | Enter password for user root: |
密码加密方式:
由于CentOS 8中的某些客户端工具和库与caching_sha2_password方法不兼容,因此CentOS 8存储库中包含的MySQL 8.0服务器设置为使用旧的mysql_native_password身份验证插件,该方法在上游MySQL 8.0发行版中设置为默认。对于大多数设置,mysql_native_password方法应该没问题,但是,如果你想将默认身份验证插件更改为caching_sha2_password,这样可以更快并提供更好的安全性,请打开以下配置文件:
1 | vim /etc/my.cnf.d/mysql-default-authentication-plugin.cnf |
将default_authentication_plugin的值更改为caching_sha2_password:
1 | [mysqld] |
关闭并保存文件,然后重新启动MySQL服务器以使更改生效:
1 | systemctl restart mysqld |
方法三:tar包安装(推荐)
如果以前使用操作系统本机软件包管理系统(例如Yum或APT)安装了MySQL,则在使用本机二进制文件安装时可能会遇到问题。确保以前的MySQL安装已完全删除(使用程序包管理系统),并且所有其他文件(例如数据文件的旧版本)也已删除。您还应该检查配置文件(例如/etc/my.cnf
或/etc/mysql
目录)并删除它们
MySQL对libaio
库有依赖性。如果未在本地安装此库,则数据目录初始化和随后的服务器启动步骤将失败。如有必要,请使用适当的程序包管理器进行安装
1 |
|
1.下载tar文件
1 |
|
2.通过rz命令上传到指定的文件夹/usr/local(rz如果没有可以安装一下:yum install -y lrzsz)
为什么选择 /usr/local 这个路径安装呢?是因为MySQL默认安装路径是这个,选用这个路径是,使用它的默认属性安装,
3.解压
1 | tar -xf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ |
4.重命名解压后的文件夹:
1 | mv /usr/local/mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql |
5.增加用户及用户组
1 | groupadd mysql |
注意:可以用命令查看一下是否存在mysql用户:cat /etc/passwd |grep mysql另外,强烈建议使用:-s /bin/false ,这个可以用来防止该用户登录。
6.建立存放数据库数据的目录 data(名字随便命名)
1 | mkdir /usr/local/mysql/data |
7.把新建立的data目录指定给mysql组及mysql用户。
1 | chown mysql:mysql /usr/local/mysql/data/ -R |
8.改变data权限
1 | chmod 750 /usr/local/mysql/data/ -R |
增加配置文件
1 | vim /etc/my.cnf |
创建myqld.log日志文件
1 | touch /var/log/mysqld.log |
9.初始化数据库
1 | /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data |
1 | grep password /var/log/mysqld.log |
注意:初始化后会生成密码
10.启用SSL协议(默认也是启用的)
1 | /usr/local/mysql/bin/mysql_ssl_rsa_setup |
SSL介绍
SSL(Secure Socket Layer:安全套接字层)利用数据加密、身份验证和消息完整性验证机制,为基于TCP等可靠连接的应用层协议提供安全性保证。
SSL协议提供的功能主要有:
1、数据传输的机密性:利用对称密钥算法对传输的数据进行加密。
2.、身份验证机制:基于证书利用数字签名方法对服务器和客户端进行身份验证,其中客户端的身份验证是可选的。
3、消息完整性验证:消息传输过程中使用MAC算法来检验消息的完整性。
如果用户的传输不是通过SSL的方式,那么其在网络中数据都是以明文进行传输的,而这给别有用心的人带来了可乘之机。所以,现在很多大型网站都开启了SSL功能。同样地,在我们数据库方面,如果客户端连接服务器获取数据不是使用SSL连接,那么在传输过程中,数据就有可能被窃取。
提示:
可以用命令查看当前数据库是否启用了SSL协议
1 | show variables like 'have_ssl'; |
11.守护进程 启动 mysql 服务
1 | /usr/local/mysql/bin/mysqld_safe --user=mysql & |
12.推荐启动(停止)命令
1 | cd /usr/local/mysql/ |
启动
1 |
|
停止
1 | /etc/init.d/mysqld stop |
重启
1 | /etc/init.d/mysqld restart |
查看状态
1 | /etc/init.d/mysqld status |
重新加载(强制动态启动)
1 | /etc/init.d/mysqld reload |
或者
1 | systemctl restart mysqld |
13.设置环境变量
1 | vim /etc/profile |
非常规安装:
1.改变数据目录:改变之前先停掉MySQL服务相关进程
需要在下面路径中建立my.cnf 文件
/etc/my.cnf
添加下面内容:
1 | [mysqld] |
2.改变MySQL程序目录:
需要在上面的文件中添加如下配置:
1 | basedir=/soft/mysql |
还需要修改/etc/init.d/mysqld 文件的数据目录路径
配置用户和密码
官方文档
1 | https://dev.mysql.com/doc/refman/8.0/en/set-password.html |
1 | mysql> alter user user() identified by "123.Shui!!#@"; |
注意
帐户更改(包括分配密码)的首选语句 不是使用SET PASSWORD
分配密码,而是使用ALTER USER
该语句。例如:
1 | ALTER USER user() IDENTIFIED BY '123.Shui!!'; |
创建可以远程登录的用户:
1 | create user 'root'@'%' identified with mysql_native_password by '123.Shui!!#@'; |
删除权限
1 | REVOKE all privileges ON *.* FROM 'test1'@'%'; |
后期修改密码
1 | ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123.Shui!!#@'; |
忘记密码修改。
1 | vim /etc/my.cnf (在[mysqld]参数组下添加) |
登录 把user变里的authentication_string字段的内容清空。
1 | mysql -u root |
然后退出
退出,把Skip-grant-table语句删除,重新启动数据库
1 | alter user'root'@'%' IDENTIFIED BY '123.Shui!!#@'; |
再使用新的密码登录
mysql基础语句操作
一,mysql基础命令
1 | 1、启动服务 |
二、数据库操作
1 | 1、创建数据库 |
三、表操作(DDL) 对表操作的命令
1 | 1、查看当前数据库中所有表 |
四、数据操作(DML) 对表内容操作
1、增
1 | 1、全列插入 |
2、 删
1 | 格式: delete from 表名 where 条件; |
3、改
1 | 格式:update 表名 set 列1=值1,列2=值2,...... where 条件 ; |
数据查询(DQL)
1 | 查询表中的全部数据 |
1、基本语法
1 | 格式:select * from 表名: |
2、消除重复行
1 | 在select 后面列前面使用distinct可以消除重复的行 |
3、条件查询
1 | 1、语法 |
4、聚合
1 | 为了快速的统计数据,提供了5个聚合函数 |
5、分组
1 | 按照字段分组,表示此字段相同的数据会被放到一个集合中。 |
6、排序
1 | 语法:select * from 表名 order by 列1 asc|desc, 列2 asc|desc, .....; |
7、分页
1 | 语法: select * from 表名 limit start ,count; |
五,数据控制语言(DCL) grant 授权
官方文档
1 | https://dev.mysql.com/doc/refman/8.0/en/grant.html |
创建用户
文档
1 | https://dev.mysql.com/doc/refman/8.0/en/create-user.html |
帐户名的主机名部分(如果省略)默认为'%'
。
1 | create user 'test1' identified by '123.yichen'; #这种没有指定为旧的密码身份验证,有些客户端连不上。不支持, |
1 | 创建用户,使用mysql_native_password的身份验证插件。 |
授权(grant)
1 | 所有权限: |
要将GRANT OPTION
特权授予帐户而不更改其特权,请执行以下操作:
1 | GRANT USAGE ON *.* TO 'someuser'@'somehost' WITH GRANT OPTION; |
请谨慎对待授予谁GRANT OPTION
特权,因为具有不同特权的两个用户可能可以组合特权!
您不能授予其他用户您自己没有的特权;该GRANT OPTION
特权使您只能分配自己拥有的那些特权。
请注意,当您向用户授予 GRANT OPTION
特定特权级别的特权时,该用户在该级别拥有(或将来可能会授予)的任何特权也可以由该用户授予其他用户。假设您授予用户INSERT
对数据库的特权。然后,如果您授予 SELECT
数据库特权并指定WITH GRANT OPTION
,则该用户不仅可以将SELECT
特权授予其他用户,还可以将特权 授予其他用户 INSERT
。如果你再授予 UPDATE
权限的数据库用户,用户可以授予 INSERT
, SELECT
和 UPDATE
。
对于非管理用户,不应在ALTER
全局或mysql
系统架构上授予 特权。如果这样做,用户可以尝试通过重命名表来破坏特权系统!
权限回收(revoke)
1 |
|
六、关联
1 | 建表语句: |
- 本文标题:mysql基础
- 本文作者:yichen
- 本文链接:https://yc6.cool/2020/08/03/mysql基础/
- 版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!