安装MySQL数据库
- MySQL数据库简介
- 安装MySQL数据库
- 下载安装包
- 安装MySQL
- MySQL创建一个新的数据库,并在其中创建新的数据表,填充测试数据并查看
- `mysql>`模式下输入的每句sql语句都要以`;`结尾;若多行语句无`;`,则被默认为一条语句未输入完成;若多条语句无`;`,直到最后一条语句有`;`,则被认为是一条语句。
- 连接MySQL数据库
- Java工程连接数据库
- SpringMVC工程连接数据库
MySQL数据库简介
此处先给出MySQL官网?
安装MySQL数据库
下载安装包
安装MySQL
- 将下载的安装包
mysql-8.0.30-winx64.zip
解压后,将mysql的根目录——比如D:\mysql-8.0.30-winx64\bin
——配置到环境变量path中。 - 使用
PowerShell
进行安装,首先以管理员身份运行PowerShell
。在PowerShell
中先进入到MySQL的根目录的bin目录下,再执行mysqld --install
命令,如下图所示。
mysqld --initialize-insecure --user=mysql
net start mysql
,显示“MySQL服务正在启动 …” “MySQL服务已经启动成功。”,如下图所示。
- 使用指令
mysql -u root -p
登陆,这是因为安装完成、启动mysql后,要先使用root账户登陆数据库,如下图所示。安装完成后的root用户的初始密码是空——即Enter password:
处不需输入任何字符、直接回车即可,如下图所示。数据库登陆成功后,输入指令处的路径显示为mysql>
,如下图红框所示。
若需退出
mysql>
,直接输入exit
即可;若已进入->
,输入\q
即可,如下两图所示。
若需关闭MySQL,需以管理员身份启动命令行(否则输入关闭指令后会提示拒绝访问),在操作系统的任意路径下,命令输入net stop mysql
即可,如下图所示。
此处也给出未以管理员身份启动命令行时,启动数据的情形
MySQL创建一个新的数据库,并在其中创建新的数据表,填充测试数据并查看
- 首先,必须要在一个数据库里面工作,所以你必须创建一个数据库。利用
create database【数据库名称,比如test】;
,来出创建数据库注意,语句结尾必须要有;号,否则如下图第一行所示,提示SQL语法错误,进而创建失败。
- 如上所述,因为必须要在一个数据库里面工作,所以使用
use 【要切换到的数据库名称,比如test】 ;
来使用上一步创建好的数据库test,如下图所示,提示数据库切换成功Database changed
。
- 查看已创建的数据库,在
mysql>
下输入show databases;
,如下图所示。
此时,数据库安装目录下的data文件夹下的目录,如下所示。下图红框内的四个文件夹对应上方显示的五个数据库的四个,上方第一个数据库
information_schema
不知道在何处 = =。
- ①要将原语句
create table 【表名,比如此处的testTable1】 (id int,name varchar(100));
分为四行来依次输入,以;结尾表示一条语句结束,如下所示。注意第一行语句的create table testTable1(
结尾的(
不要遗漏!;当提示Query OK, 0 rows affected (0.10 sec)
表示创建成功。
②还可创建复杂的表,使用如下语句:
CREATE TABLE hogwarts_user (id int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',name varchar(20) DEFAULT NULL,age int(10) DEFAULT NULL COMMENT '年龄',primary key (id) USING BTREE)ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='霍格沃兹学生';
提示“Query OK”,创建成功,如下图所示。请注意,在创建新表之前,需先选好数据库,如下图红框所示。
有博客提到“注意创建表格过程中必须是英文输入法,中文和英文的逗号,括号和引号都必须是英文的。”,待确认。
5. ①向上一步创建的表testTable1
插入数据,insert into testTable1(id,name) values(0,'0');
。第一处testTable1(id,name)
要给出要插入的表名和要插入的单条数据涉及到的列名,第二处values(0,'0')
要针对第一处给出的【要插入数据涉及到的每个列名】的值。若插入成功,会提示Query OK
,如下图所示。
若要一条sql语句插入多条数据,可使用
insert into testTable1(id,name) values(0,'0'),(1,'1'),(2,'2');
②若向上一步创建复杂的表hogwarts_user
插入数据insert into hogwarts_user(name, age) values('霍格沃兹测试学院',1)
,通常不要手动设置id的值。因为在创建hogwarts_user表时,将id设置为了自增AUTO_INCREMENT
,所以一般不在插入新数据时设置id,交由数据库自增,防止自己设定的id与数据库自增的id冲突。若非要设置id,语法上可行。
在创建表
hogwarts_user
时,如果有设置某列名不能为空(NOT NULL)时,则向该表插入数据时该列的属性必须有值,否则会报错。
-
使用
select * from 【表名,比如此处的testTable1】;
查看刚才插入的那一条数据,如下图所示。
查看上一步②中创建的数据,如下图所示。
-
mysql>exit
退出数据库——即退出mysql命令行模式mysql>
,如下图所示。
-
若要关闭MySQL(需先退出数据库——即
mysql>
模式),在操作系统的任意路径下输入net stop mysql
即可,如下图所示。提示服务已成功停止
表示MySQL数据库已关闭。
mysql>
模式下输入的每句sql语句都要以;
结尾;若多行语句无;
,则被默认为一条语句未输入完成;若多条语句无;
,直到最后一条语句有;
,则被认为是一条语句。
如下图所示,因为第一个红框处前几句语句都没有;
分号,所以直到最后一句才被认为是sql语句结束,所以被当作前几行语句是一句sql语句,从而报错。
连接MySQL数据库
Java工程连接数据库
- 首先将jar包
mysql-connector-java-8.0.30.jar
导入Java工程的正确位置,通常在lib目录下。Java工程导入jar包的方法详见这篇博客。 - 注册JDBC驱动:
Class.forName("com.mysql.cj.jdbc.Driver");
。作用待定,删除本句话及catch中本句可能抛出的异常后,可正常获取数据库数据。 - 打开?or获取?到数据库的链接:
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC", "root", "");
“jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC”:其中的
test
是数据库的名称,可通过net start mysql
启动数据库、mysql -u root -p
登录数据库后,在mysql>
下(自认,即数据库内)使用show databases;
查看当前电脑上现有数据库的所有名称。
- 创建查询:statement = connection.createStatement();
- 编写要查询的sql语句:String sqlString = “select * from hogwarts_user;”;
- 执行sql查询,按照上一行的sql语句:ResultSet resultSet = statement.executeQuery(sqlString);
- 输出resultSet中的查询结果:如下所示。需要注意的是,
java.sql.ResultSet
也需要close()关闭
//输出查询结果while (resultSet.next()) {int id = resultSet.getInt("id");//resultSet.getInt用于获取int类型的结果String nameString = resultSet.getString("name");//resultSet.getString用于获取String类型的结果String ageString = resultSet.getString("age");System.out.print("id是"+id);System.out.print(",name是"+nameString);System.out.println(",age是"+ageString);System.out.println("---------------");}
完整代码,如下所示。
import java.sql.*;Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;//java.sql.ResultSet也需要close关闭!// MySQL 8.0 以下版本 - JDBC 驱动名及数据库 URL
// static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
// static final String DB_URL = "jdbc:mysql://localhost:3306/test";// MySQL 8.0 以上版本 - JDBC 驱动名及数据库 URLstatic final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/test?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";try{//注册JDBC驱动Class.forName(JDBC_DRIVER);//打开链接connection = DriverManager.getConnection(DB_URL, "root", "");//创建sql查询statement = connection.createStatement();//sql语句String sqlString = "select * from hogwarts_user;";//执行查询,获取sql查询结果resultSet = statement.executeQuery(sqlString);//输出查询结果while (resultSet.next()) {//此循环条件自测无误,不会导致错过一条int id = resultSet.getInt("id");String nameString = resultSet.getString("name");String ageString = resultSet.getString("age");System.out.print("id是"+id);System.out.print(",name是"+nameString);System.out.println(",age是"+ageString);System.out.println("---------------");}
} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();
} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();
}finally {if (resultSet!=null) {//java.sql.ResultSet也需要close!try {resultSet.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (statement!=null) {try {statement.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (connection!=null) {try {connection.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}