前言

为了MySQL8.0.28装置教程我居然在MySQL官网文档逛了一天,至此献给想入门MySQL8.0的初学者。以目前最新版本的MySQL8.0.28为示例进行装置与初步应用的具体解说,面向初学者的具体教程。无论是Windows还是Linux上装置,咱都会。这兴许是迄今为止全网最最最具体的MySQL8.0.28的装置与应用教程

温故而知新,能够为师矣。咱缺的是学习的路径吗?答案并不是,而是不足学习的办法。官网文档是很具体的,而且是权威的,其它的那些书籍、博文啊都是基于官网文档以及本人的应用经验总结的。写这篇文章的用意,心愿大家能够总结本人的学习办法,长于利用官网文档来晋升本人。

倡议初学者多在命令行窗口下进行练习,游刃有余。达到肯定的熟练程度,再借助客户端工具进步咱们的工作效率。最终目标是啥?活下去呗,进步捞金能力。当然开个玩笑,回到正题,接着往下看。

从下载到装置,再到遗记明码解决方案。一步步应用命令行窗口学会基本操作,而后应用客户端近程连贯工具。最初配合时下比拟炽热的Java语言进行演示如何应用JDBC连贯最新的MySQL8.0数据库,以及执行查问返回后果。

注释

咱也不多哔哔,间接上干货,要的就是实用性和性价比!

一、MySQL8.0.28下载

能够下载msi文件一键装置或者解压版zip文件进行命令行初始化装置。

MySQL官网下载地址

https://dev.mysql.com/downloads/mysql/

1、Windows版本下载

在Windows下能够抉择下载msi文件或者解压版zip文件。个别应用,抉择我应用紫色框线选中的即可。对于上面的Debug Test Suite,是带有许多的测试套件在外面,对于有测试需要的人员能够进行下载。

2、Linux版本下载

依据本人须要的Linux发行版版本适配的MySQL进行抉择。比方,我集体抉择的是本人比拟相熟的Redhat7系列进行下载。同样有bundle版本,蕴含了一些插件和依赖在外面,便于应用rpm包装置。装置单个的server服务,须要装置其它的依赖包比拟繁琐。对于初学者,倡议间接下载RPM bundle版本。我偏不,就要折腾。那也行,请接着往下看,一样提供了具体装置步骤。

3、注意事项

个别人能够能没认真看,官网会提醒登录,加了button按钮字体十分显眼,而上面的的我须要立刻下载则字体很小。所以留神了,抉择上面的No thanks,我须要立刻下载。抉择的是社区版本,收费提供下载。

二、MySQL8.0装置

初学者尝鲜,倡议在Windows下装置

个别状况,默认装置一个MySQL版本服务实例。也不排除估算无限,在同台服务器上安装多个实例进行测试。默认端口3306,如果在公布(生产)环境倡议批改默认端口,达到不让他人一下就猜到的目标。接下来装置测试多个MySQL服务版本共存一个操作系统下,只针对于Windows下装置多个服务(没有应用虚拟机工具,真机环境下测试)。Linux下有便捷的yum源以及apt形式装置,一键装置所需依赖,但也有比拟繁琐的rpm包装置。

1、Windows下装置

配置环境变量,编辑零碎环境变量,控制面板>所有控制面板项>零碎>高级系统配置>零碎环境变量

#变量名MySQL_HOME#变量值D:\work\mysql-8.0.28-winx64\bin

msi文件装置就不介绍了,傻瓜式的一键装置,留神抉择门路

次要介绍解压版本zip的装置与实例化

mysql-8.0.28-winx64.zip

1.1、解压下面筹备的安装包mysql-8.0.28-winx64.zip

在解压后的D:\work\mysql-8.0.28-winx64目下新增my.ini文件,默认解压版是没有的。而后退出如下配置:

[client]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 设置3307端口,有多个服务,为了不抵触批改默认的3306端口为3307port=3307# 设置mysql的装置目录basedir=D:\\work\\mysql-8.0.28-winx64# 设置 mysql数据库寄存目录datadir=D:\\work\\mysql-8.0.28-winx64\\data# 容许最大连接数max_connections=20# 服务端应用的字符集默认为8比特编码的latin1字符集character-set-server=utf8# 创立新表时将应用的默认存储引擎default-storage-engine=INNODB

1.2、实例化

以管理员身份运行CMD命令窗口,切换到mysql解压后的目录下:

-- 第一步执行d:,切换到D盘d:-- 第二步执行cd命令,切换到集体装置mysql的bin目录下cd D:\work\mysql-8.0.28-winx64\

设置为空明码,去掉不必要的麻烦。

mysqld --initialize-insecure

1.3、装置服务

进入到解压后MySQL的bin目录下,执行装置服务命令:

cd D:\work\mysql-8.0.28-winx64\binmysqld installmysqld install --service -mysql8

如果没有装置多个服务,应用mysqld install即可。能够不必指定服务名,默认的服务名为MySQL。

1.4、服务命令应用,须要管理员身份运行CMD命令,留神看我的门路是在bin目录下执行的

我没有配置MySQL8的零碎环境变量,所以都在MySQL的bin目录中执行命令。

启动服务net start mysql

# 启动服务net start mysqlD:\work\mysql-8.0.28-winx64\bin>net start mysql8MySQL8 服务正在启动 .MySQL8 服务曾经启动胜利。

进行服务net stop mysql

# 进行服务net stop mysql D:\work\mysql-8.0.28-winx64\bin>net stop mysql8MySQL8 服务正在进行..MySQL8 服务已胜利进行。

删除服务sc delete mysql

# 删除服务sc delete mysql# 或者mysqld remove删除服务,须要在mysql的bin目录下执行mysqld命令mysqld remove mysql

1.5、注意事项

# 装置服务指定了服务名为MySQL8计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8# 或者是MySQL计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

装置服务指定了服务名为MySQL8。在上面的多实例服务共存也提到过,须要将原始残留的注册表删掉,重启电脑,再进行装置即可。

呈现了失落MSVCR120.dll,短少组件,装置以下组件解决

vcredist_x64.exe

vcredist_x86.exe

Download Visual C++ Redistributable Packages for Visual Studio 2013 from Official Microsoft Download Center

留神:应用了mysqld -initialize,明码是随机生成的,在mysql的谬误日志中能够找到

例如我的日志(mysql的data中以.err结尾的文件)

A temporary password is generated for root@localhost: 6hk20yueza=M

批改明码的命令

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'

之所以在Windows下介绍的如此具体,是因为咱们平时的工作环境更多的是在Windows下进行的。就算应用Linux环境个别也是应用虚拟机配合Linux发行版,再就是云服务器了。MySQL的一些命令都相熟了,Linux下装置还能难倒你吗?间接翻一翻官网文档即可。

2、Linux下装置

倡议初学者不要像我这样去装置rpm包,你能够间接下载rpm bundle,或者应用mysql官网的yum源。集体有多年Linux应用教训,以及有肯定的理论工作教训;晓得如何判断哪些包是必须的,以及哪些须要被替换掉。

肯定要留神Linux操作系统的权限问题权限在最小范畴内满足即可

2.1、筹备好安装包

间接在官网下载,或者应用wget命令下载都能够,同样能够应用官网的yum源进行装置。亦或是应用apt命令获取装置。至于为什么一些Linux发行版将MySQL从默认中移除了,因为MySQL被Oracle收买后存在闭源的危险。取而代之的是她的妹妹MariaDB,这也是为什么我在装置的时候提到了MariaDB。

2.2、装置rpm包

零碎会提醒哪些是须要的依赖包,所以我当时筹备须要的依赖包

[mysql@localhost ~]$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm 正告:mysql-community-server-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY谬误:依赖检测失败:    mysql-community-client(x86-64) >= 8.0.11 被 mysql-community-server-8.0.28-1.el7.x86_64 须要    mysql-community-common(x86-64) = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 须要    mysql-community-icu-data-files = 8.0.28-1.el7 被 mysql-community-server-8.0.28-1.el7.x86_64 须要[root@localhost mysql]# rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm 正告:mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY筹备中...                          ################################# [100%]正在降级/装置...   1:mysql-community-icu-data-files-8.################################# [100%][root@localhost mysql]# rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm 正告:mysql-community-common-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY筹备中...                          ################################# [100%]正在降级/装置...   1:mysql-community-common-8.0.28-1.e################################# [100%][root@localhost mysql]# rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm 正告:mysql-community-client-8.0.28-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY谬误:依赖检测失败:    mysql-community-client-plugins = 8.0.28-1.el7 被 mysql-community-client-8.0.28-1.el7.x86_64 须要    mysql-community-libs(x86-64) >= 8.0.11 被 mysql-community-client-8.0.28-1.el7.x86_64 须要

2.2.1、装置依赖包,而后应用rpm -qa | grep mysql查问哪些被装置了。怎么传到服务器上,简略一点scp命令即可。

rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64rpm -ivh mysql-community-icu-data-files-8.0.28-1.el7.x86_64rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64rpm -ivh mysql-community-client-plugins-8.0.28-1.el7.x86_64[root@localhost mysql]# rpm -qa | grep mysql

2.2.2、Redhat7系列须要卸载原有的mariadb-libs,替换为mysql-community-libs依赖

$ yum remove mariadb-libs

2.2.3、正式装置server

$ rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm

查看装置的版本Ver 8.0.28 for Linux on x86_64

[mysql@localhost ~]$ mysqladmin --versionmysqladmin  Ver 8.0.28 for Linux on x86_64 (MySQL Community Server - GPL)

2.2.4、赋予mysql装置目录所有者为mysql用户,rpm包默认装置后的门路在/var/lib/mysql。在授予mysql用户所有者和所属组权限之后,你能够应用mysql用户进行登录或者启动服务与敞开服务。

#增加mysql组$ groupadd mysql#新增mysql用户到mysql组中$ useradd -g mysql mysql#批改mysql用户明码$ mysql passwd#批改所有者$ chown -R mysql:mysql /var/lib/mysql

tips:你也能够将mysql用户退出到/etc/sudoers配置文件中,限度mysql用户应用的权限。

2.3、初始化

设置明码为空,后续登录可批改明码

$ mysqld --initialize-insecure

2.4、启动服务与查看服务状态

Redhat7系列应用命令启动MySQL服务

$ systemctl start mysqld

设置开机自启

$ systemctl enable mysqld

敞开服务

$ systemctl stop mysqld

重启服务

$ systemctl restart mysqld

登录mysql

$ mysql -uroot -p

2.5、设置防火墙

退出mysql服务以及须要的端口3306

$ firewall-cmd --zone=public --add-port=3306/tcp --permanent$ firewall-cmd --zone=public --add-service=mysql --permanent$ firewall-cmd --reload

或者长期敞开防火墙测试

$ systemctl stop firewalld.service

2.6、测试近程登录

开启防火墙,退出了3306/tcp协定规定,退出了mysql服务规定。设置了以前旧的明码缓存验证规定 mysql_native_password,,解决caching_sha2_password验证插件无奈被加载的问题。

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创立用户mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步受权mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步批改明码验证形式mysql> flush privileges; -- 第四步刷新权限

3、对于遗记明码解决方案

很多小伙伴预计都遇到过设置明码后,后果遗记明码了。本文的解决方案,齐全实用目前最新版本MySQL8.0.28,亲自测试验证过

参考MySQL8.0官网文档以及[stackoverflow解决办法](https://stackoverflow.com/que...
)。后果兜兜转转回到了跳过登录明码权限验证,8.0版本之前的办法生效了,咱没跟上MySQL更新的步调。

1、敞开MySQL服务:

$ systemctl stop mysqld

2、设置MySQL环境选项参数,跳过权限表验证

$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

或者在/etc/my.cnf文件中增加,是一样的成果。最初记得去掉跳过验证。Windows下在my.ini文件中退出skip-grant-tables。

[mysqld]skip-grant-tables

3、应用了刚刚的设置启动mysql

$ systemctl start mysqld

4、登录到root

$ mysql -u root

5、应用命令更新root用户明码

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword') -> WHERE User = 'root' AND Host = 'localhost';mysql> FLUSH PRIVILEGES;mysql> quit

a、这种形式可能行不通

UPDATE user SET authentication_string = PASSWORD('123456') WHERE User = 'root' AND Host = 'localhost';

b、采取将明码先置空

update user set authentication_string = '' where user = 'root';

6、批改明码,解决方案,设置更强的明码规定即可

As mentioned my shokulei in the comments, for 5.7.6 and later, you should use    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';Or you'll get a warning

MySQL8.0呈现这种状况请设置更平安的明码规定比方设置明码为:Mysql@123456,即可胜利。

ERROR 1819 (HY000): Your password does not satisfy the current policy requirementsmysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Mysql@123456';

7、敞开mysql服务

$ systemctl stop mysqld

8、重置后面设置的mysql环境变量参数

$ systemctl unset-environment MYSQLD_OPTS

9、再次启动mysql

$ systemctl start mysqld

最终胜利登录到mysql

$ mysql -u root -p

三、MySQL8.0应用

次要基于Windows10进行阐明的,一些命令同样实用于Linux。

1、Windows多个MySQL服务实例共存

留神批改注册表门路,解决启动MySQL服务意外进行的状况,提醒1067还是1068来着。

net start mysql8net start mysql

为了测试演示最新版本,我将服务名改成了MySQL8。

# 装置服务指定了服务名为MySQL8计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL8# 或者是MySQL计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\MySQL

我之前装置的MariaDB10.5.6。我想持续应用MariaDB,又想体验最新版的MySQL8.0.28,抉择这样解决。

1.1、登录并指定端口3307,默认为3306,我的MariaDB曾经占用了3306端口。集体测试演示多个实例共存改了端口为3307

留神:在Windows下应用cmd命令窗口以管理员身份运行登录,没有配置环境变量也没关系,切换到MySQL装置的bin目录下执行命令。

-- 第一步执行d:,切换到D盘d:-- 第二步执行cd命令,切换到集体装置mysql的bin目录下cd D:\work\mysql-8.0.28-winx64\bin-- 执行登录命令,并指定端口mysql -uroot -p -P 3307-- 查询数据库版本```sqlmysql> select version();+-----------+| version() |+-----------+| 8.0.28    |+-----------+1 row in set (0.00 sec)```

总结一下:

  • 第一步执行d:,切换到D盘;
  • 第二步执行cd命令,切换到集体装置mysql的bin目录下;
  • 第三步执行登录命令,并指定端口登录到mysql;
  • 最初进行简略的交互,并查询数据库版本。

1.2、初步应用命令行模式进行交互

2、权限设置

2.1、参考官网文档

设置近程登录权限,以及明码校验规定,与装置数据库版本默认应用的默认认证插件无关

参考MySQL官网文档:https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password

01、Authentication plugin 'caching_sha2_password' is not supported02、Authentication plugin 'caching_sha2_password' cannot be loaded:dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2):image not found03、Warning: mysqli_connect(): The server requested authenticationmethod unknown to the client [caching_sha2_password]

应用下面这种明码缓存验证算法。形容到验证插件不反对caching_sha2_password,不能被加载,服务连贯申请提出正告认证办法无奈辨认客户端。艰深一点解释:在应用SQLyog、MySQL workbench等客户端连贯时,明码验证规定是不被容许的。须要更换验证形式,或者其它形式解决验证。上面将会给出解决方案。

2.2、批改root用户明码

应用alter user语句批改用户明码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

2.3、创立普通用户并受权(开发人员或者DBA应用的比拟频繁)

初学者能够先疏忽受权这一步,应用root用户将基本功练扎实。还没入门,就没这头皮发麻的受权模式给弄解体了,哈哈。

受权命令GRANT,撤销权限命令REVOKE。创立用户并受权参考官网文档:https://dev.mysql.com/doc/refman/8.0/en/roles.html

创立角色:CREATE ROLE命令

CREATE ROLE 'app_developer', 'app_read', 'app_write';

授予角色权限:GRANT命令

GRANT ALL ON app_db.* TO 'app_developer';GRANT SELECT ON app_db.* TO 'app_read';GRANT INSERT, UPDATE, DELETE ON app_db.* TO 'app_write';

创立用户:CREATE USER命令

CREATE USER 'dev1'@'localhost' IDENTIFIED BY 'dev1pass';CREATE USER 'read_user1'@'localhost' IDENTIFIED BY 'read_user1pass';CREATE USER 'read_user2'@'localhost' IDENTIFIED BY 'read_user2pass';CREATE USER 'rw_user1'@'localhost' IDENTIFIED BY 'rw_user1pass';

受权给创立的用户:GRANT命令

GRANT 'app_developer' TO 'dev1'@'localhost';GRANT 'app_read' TO 'read_user1'@'localhost', 'read_user2'@'localhost';GRANT 'app_read', 'app_write' TO 'rw_user1'@'localhost';

你还能够在my.ini或者my.cnf配置文件中指定设置:

[mysqld]mandatory_roles='role1,role2@localhost,r3@%.example.com'

同样能够在命令模式下应用SET命令设置:

SET PERSIST mandatory_roles = 'role1,role2@localhost,r3@%.example.com';

查看角色dev1的权限,查看权限比拟多,我就不一一列举。详情能够参考官网文档。

mysql> SHOW GRANTS FOR 'dev1'@'localhost';+-------------------------------------------------+| Grants for dev1@localhost                       |+-------------------------------------------------+| GRANT USAGE ON *.* TO `dev1`@`localhost`        || GRANT `app_developer`@`%` TO `dev1`@`localhost` |+-------------------------------------------------+

创立用户并受权,受权全副权限:

CREATE USER 'old_app_dev'@'localhost' IDENTIFIED BY 'old_app_devpass';GRANT ALL ON old_app.* TO 'old_app_dev'@'localhost';

锁定用户:锁定:LOCK,盲猜解锁就是UNLOCK

ALTER USER 'old_app_dev'@'localhost' ACCOUNT LOCK;

受权给新的开发账号权限,受权局部权限:

CREATE USER 'new_app_dev1'@'localhost' IDENTIFIED BY 'new_password';GRANT 'old_app_dev'@'localhost' TO 'new_app_dev1'@'localhost';

以上提供官网文档进行参考,与其东找找西找找,不如翻阅官网文档更间接更精确。咱缺的不是学习的路径,而是不足学习的办法。

3、测试创立用户

3.1、创立普通用户并受权近程登录

创立一个普通用户test

mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY '123456';Query OK, 0 rows affected (0.00 sec)

授予用户test在本地(localhost)的权限,只给查问权限(SELECT),受权所有(ALL)

mysql> GRANT SELECT ON *.* TO test@'localhost';Query OK, 0 rows affected (0.01 sec)

3.2、给root用户受权

创立root用户受权给所有IP都能登录,以及批改明码缓存认证形式

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456';mysql> GRANT ALL ON *.* TO root@'%';mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456';mysql> flush privileges;

在第三方工具中验证登录后果,在localhost下能够登录胜利

目前只给了查问(select)权限,验证插入(insert)权限

mysql> insert into study values(7,'美柑');ERROR 1142 (42000): INSERT command denied to user 'test'@'localhost' for table 'study'

这是在SQLyog工具下进行验证的,倡议初学者多在命令行窗口下进行练习,游刃有余。

3.2、受权root用户近程登录,MySQL8.0受权形式

用户受权,在MySQL8.0版本中变得更加严格,以前MySQL5.6或者5.7版本中能够执行受权的形式有了变动。通过集体亲测,操作如下。

MySQL8.0受权形式,记得应用flush privileges刷新权限

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'Mysql@123456'; -- 第一步创立用户mysql> GRANT ALL ON *.* TO root@'%'; -- 第二步受权mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Mysql@123456'; -- 第三步批改明码验证形式mysql> flush privileges; -- 第四步刷新权限

批改明码认证形式(8.0默认应用的是sha2算法缓存认证),第一种解决方案如下,这只是其中一种解决方案,亲测无效

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

第二种解决方案:在my.ini或者my.cnf配置文件退出如下配置,重启服务并加载配置文件。通过测试没有失效,仿佛没有读取到配置文件,但奇怪的是我设置的3307端口和默认存储引擎以及编码格局是失效的。(在官网看到的解决方案

[mysqld]default_authentication_plugin=mysql_native_password

MySQL8.0官网文档默认设置的认证缓存算法是caching_sha2_password

ALTER USER user(用户) IDENTIFIED WITH caching_sha2_password BY 'password';

MySQL8.0之前的受权形式(5.6或者5.7都反对这种形式受权

GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'你的IP地址' IDENTIFIED BY '设置的明码' WITH GRANT OPTION;

示例:受权root户,所有IP都可连贯

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

刷新权限

flush privileges;

4、如何高效的应用自带官网文档

登录到MySQL8,指定3307端口,或者应用默认端口登录。

mysql -uroot -p -P 3307mysql -uroot -p

应用帮忙命令,以? create contents模式查找零碎帮忙命令。

? create contents;? create user;? create database;? create table;? select;? insert;? update;? delete;URL: https://dev.mysql.com/doc/refman/8.0/en/select|insert|update|delete.html

在应用本地的帮忙文档时,你会发现零碎主动提醒了官网文档的地址 https://dev.mysql.com/doc。

示例:查问创立表的帮忙命令? create table只展现了一部分内容。

mysql> ? create tableName: 'CREATE TABLE'Description:Syntax:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name    (create_definition,...)    [table_options]    [partition_options]data_type:    (see https://dev.mysql.com/doc/refman/8.0/en/data-types.html)index_type:    USING {BTREE | HASH}index_option: {    KEY_BLOCK_SIZE [=] value  | index_type ...}URL: https://dev.mysql.com/doc/refman/8.0/en/create-table.html
  • Name:查看的帮忙命令名称
  • Description:形容
  • Syntax:示例
  • data_type:反对的数据类型
  • index_type:能够应用的索引类型

我只列举了局部进行阐明,更具体的能够本人测试。

在创立用户、数据库以及建表和字段全副采取的大写,因为在Linux和Unix下对大写敏感的,并不是MySQL自身对大小写敏感。

1、创立数据库

CREATE DATABASE TEST;USE TEST;

2、创立表,能够通过ENGINE指定表的存储引擎,mysql5.6以及之后的版本默认为InnoDB存储引擎。

CREATE TABLE STUDY(    ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,    NAMES VARCHAR(64) NOT NULL)ENGINE=MyISAM;

3、插入数据

INSERT INTO STUDY VALUES(1,'mysql目前最新版本msyql8.0.28');

4、查问数据

SELECT * FROM STUDY;

5、批改数据

UPDATE STUDY S SET S.NAMES='mysql默认的存储引擎是InnoDB' WHERE S.ID=1;

6、删除全副数据

DELETE FROM STUDY;

至此根本的创立用户、创立数据库、增删改查都会应用了。

四、MySQL连贯工具

做了超链接,不便去官网获取。

  • phpMyAdmin
  • MYSQL workbench
  • SQLyog

举荐几个比拟罕用的工具:phpMyAdmin、SQLyog、MySQL Workbench、Navicat可视化工具进行连贯操作。工具的应用是其次的,更重要的在于对MySQL命令语句的使用。

tips:蕴含了SQLyog,还整顿了局部安装包以及MySQL官网提供的sakilaworld示例哟!

链接: https://pan.baidu.com/s/11gIlZKxoTG5BCCcoXdVJRg 提取码: ntu7

给出一个应用Navicat逆向生成的示例数据库world的模型:

如果真的要应用到建物理模型:举荐你学习Sybase PowerDesigner设计工具的应用,而且须要理解关系数据库设计遵循的三范式。当初数据库设计最多满足3NF,普遍认为范式过高,尽管具备对数据关系更好的约束性,但也导致数据关系表减少而令数据库IO更易忙碌,原来交由数据库解决的关系束缚现更多在数据库应用程序中实现。

五、MySQL之JDBC

1、官网connector-j

MySQL8.0的maven装置JDBC:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-installing-maven.html

JDBC连贯驱动治理:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html

import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;// Notice, do not import com.mysql.cj.jdbc.*// or you will have problems!public class LoadDriver {    public static void main(String[] args) {        try {            // The newInstance() call is a work around for some            // broken Java implementations            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();        } catch (Exception ex) {            // handle the error        }    }}Connection conn = null;...try {    conn = DriverManager.getConnection("jdbc:mysql://localhost/test?" +                                   "user=root&password=123456");    // Do something with the Connection   ...} catch (SQLException ex) {    // handle any errors    System.out.println("SQLException: " + ex.getMessage());    System.out.println("SQLState: " + ex.getSQLState());    System.out.println("VendorError: " + ex.getErrorCode());}

2、JDBC测试连贯MySQL8.0数据库

2.1、maven配置

设置pom.xml配置文件,应用MySQL最新的版本8.0.28进行连贯测试。maven的镜像仓库,能够应用阿里的镜像源地址。

<dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.28</version></dependency><dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.28</version>    <exclusions>        <exclusion>            <groupId>com.google.protobuf</groupId>            <artifactId>protobuf-java</artifactId>        </exclusion>    </exclusions> </dependency>

2.2、编写Java代码

应用编辑器sts(Spring Tool Suite4或者IDEA)

创立一般的maven我的项目或者springboot我的项目,而后配置pom.xml。

目标:应用纯JDBC测试,或者ORM框架mybatis、JPA、或者hibernate都行,最终达到对数据库进行最根本的增删改查。

package com.example.demo.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TestConnMySQL8 {        public static void main(String[] args) throws ClassNotFoundException, SQLException {            TestSQLConnMySQL();    }    private static final Logger log = LoggerFactory.getLogger(TestConnMySQL8.class);    //初始化参数    static Connection conn = null;    static PreparedStatement ps = null;    static ResultSet rs = null;    /**     * @throws SQLException     * @throws ClassNotFoundException     */    private static void TestSQLConnMySQL() throws SQLException, ClassNotFoundException {        try {            Class.forName("com.mysql.cj.jdbc.Driver");            /**             * 1.获取连贯参数url,username,password,默认端口是3306             * MySQL:url ="jdbc:mysql://127.0.0.1:3306/test";             */            /** MySQL拼接url **/            String url = "jdbc:mysql://192.168.245.147:3306/TEST?useUnicode=true&characterEncoding=utf-8";            String username = "root";            String password = "Mysql@123456";            //获取连贯            conn = DriverManager.getConnection(url, username, password);            if(null != conn) {                log.info("connect database success...");            }else {                log.error("connect database failed...");            }            //查询数据库            String sql = "SELECT * FROM STUDY";            // 3.通过preparedStatement执行SQL            ps = conn.prepareStatement(sql);                // 4.执行查问,获取后果集            rs = ps.executeQuery();            // 5.遍历后果集,前提是你的数据库创立了表以及有数据            while (rs.next()) {                //对应数据库表中字段类型Int应用getInt,varchar应用getString                System.out.println("ID:" + rs.getInt("ID"));                System.out.println("姓名:" + rs.getString("NAMES"));            }        } finally {            // 6.敞开连贯 开释资源            rs.close();            ps.close();            conn.close();        }    }}

在sts编辑工具连贯并返回测试后果

总结

以上就是本次MySQL8.0.28装置与应用的全部内容,心愿能对你的工作与学习有所帮忙。感觉写的好,就拿出你的一键三连。在公众号上更新的可能要快一点,目前还在欠缺中。能看到这里的,都是帅哥靓妹。如果感觉总结的不到位,也心愿能留下您贵重的意见,我会在文章中进行调整优化。

原创不易,转载也请表明出处和作者,尊重原创。不定期上传到github或者gitee。认准龙腾万里sky,如果看见其它平台不是这个ID收回我的文章,就是转载的。MySQL系列文章:《MySQL开发篇,存储引擎的抉择真的很重要吗?》曾经上传至github和gitee仓库SQL-study。集体github仓库地址,个别会先更新PDF文件,而后再上传markdown文件。如果拜访github太慢,能够应用gitee进行克隆。

tips:应用hexo搭建的动态博客也会定期更新保护。

<H5 align=center>作者:龙腾万里sky</H5>