1
1
---
2
- title : MySQL数据库的基本操作
2
+ title : MySQL数据库的基本操作,包括创建数据库、切换数据库、删除数据库
3
3
shortTitle : MySQL数据库的基本操作
4
4
---
5
5
@@ -11,17 +11,17 @@ shortTitle: MySQL数据库的基本操作
11
11
12
12
![ ] ( https://cdn.tobebetterjavaer.com/stutymore/database-20240125185015.png )
13
13
14
- 注意要带上分号 ` ; ` 并按下 enter 键,不然 MySQL 会认为你还没有输入完,会换一行继续等待你输入。
14
+ 注意在 MySQL 客户端执行 SQL 语句的时候要带上分号 ` ; ` 并按下 enter 键,不然 MySQL 会认为你还没有输入完,会换一行继续等待你输入。
15
15
16
16
![ ] ( https://cdn.tobebetterjavaer.com/stutymore/database-20240125185214.png )
17
17
18
- 分号 ` ; ` 是 MySQL 的语句结束符。
18
+ 也就是说, 分号 ` ; ` 是 MySQL 的语句结束符。
19
19
20
- OK,像上面截图中的 information_schema、mysql、performance_schema、sys 这些都是 MySQL 自带的数据库,剩余的 cmower、codingmore、jeesite、jepf、pai_coding 等都是我本地创建的数据库。
20
+ OK,像上面截图中的 information_schema、mysql、performance_schema、sys 这些都是 MySQL 自带的数据库,剩余的 cmower、codingmore、jeesite、jepf、pai_coding 等都是我本地创建的数据库,这些数据库名大家很容易就联系到某些有点名气的开源项目,比如说技术派 。
21
21
22
- [ 二哥的 MySQL 进阶之路] ( https://javabetter.cn/mysql/ ) 会结合[ 技术派实战项目] ( https://paicoding.com ) 来讲解 MySQL 的基本操作。其中的 pai_coding 就是技术派项目的数据库 。
22
+ [ 二哥的 MySQL 进阶之路] ( https://javabetter.cn/mysql/ ) 会结合[ 技术派实战项目] ( https://javabetter.cn/zhishixingqiu/ paicoding.html ) 来讲解 MySQL 的基本操作。
23
23
24
- 对技术派项目还不太了解的小伙伴可以戳下面的链接了解:
24
+ 上面截图中的 pai_coding 就是技术派项目的数据库。 对技术派项目还不太了解的小伙伴可以戳下面的链接了解:
25
25
26
26
[ 二哥的原创实战项目技术派详细介绍] ( https://javabetter.cn/zhishixingqiu/paicoding.html )
27
27
@@ -103,6 +103,200 @@ drop database test;
103
103
104
104
但删库跑路之前,最好掐一下自己的大腿,看看自己是不是清醒着,不然后悔都来不及(😂)。
105
105
106
+ 删除数据库的时候,也可以带上 `if exists`,这样当数据库不存在的时候,就不会报错了。
107
+
108
+ ```sql
109
+ drop database if exists test;
110
+ ```
111
+
112
+ ## 技术派是如何创建数据库的?
113
+
114
+ 技术派创建数据库是自动完成的,当项目启动的时候就会自动创建数据库。
115
+
116
+ 具体实现的方法我放在了技术派的教程里,大家可以通过这个链接获取技术派实战教程。
117
+
118
+ [二哥的原创实战项目技术派详细介绍](https://javabetter.cn/zhishixingqiu/paicoding.html)
119
+
120
+ 
121
+
122
+ 这里我做一些简单的介绍,实现源码在 ForumDataSourceInitializer 这个类中。
123
+
124
+ 
125
+
126
+ 注意看 autoInitDatabase 方法,这里是自动创建数据库的逻辑。
127
+
128
+ ```java
129
+ private boolean autoInitDatabase() {
130
+ // 查询失败,可能是数据库不存在,尝试创建数据库之后再次测试
131
+
132
+ // 数据库链接
133
+ URI url = URI.create(SpringUtil.getConfigOrElse("spring.datasource.url", "spring.dynamic.datasource.master.url").substring(5));
134
+ // 用户名
135
+ String uname = SpringUtil.getConfigOrElse("spring.datasource.username", "spring.dynamic.datasource.master.username");
136
+ // 密码
137
+ String pwd = SpringUtil.getConfigOrElse("spring.datasource.password", "spring.dynamic.datasource.master.password");
138
+ // 创建连接
139
+ try (Connection connection = DriverManager.getConnection("jdbc:mysql://" + url.getHost() + ":" + url.getPort() +
140
+ "?useUnicode=true&characterEncoding=UTF-8&useSSL=false", uname, pwd);
141
+ Statement statement = connection.createStatement()) {
142
+ // 查询数据库是否存在
143
+ ResultSet set = statement.executeQuery("select schema_name from information_schema.schemata where schema_name = ' " + database + " ' ");
144
+ if (!set.next()) {
145
+ // 不存在时,创建数据库
146
+ String createDb = "CREATE DATABASE IF NOT EXISTS " + database;
147
+ connection.setAutoCommit(false);
148
+ statement.execute(createDb);
149
+ connection.commit();
150
+ log.info("创建数据库({})成功", database);
151
+ if (set.isClosed()) {
152
+ set.close();
153
+ }
154
+ return true;
155
+ }
156
+ set.close();
157
+ log.info("数据库已存在,无需初始化");
158
+ return false;
159
+ } catch (SQLException e2) {
160
+ throw new RuntimeException(e2);
161
+ }
162
+ }
163
+ ```
164
+
165
+ 逻辑很简单,就是根据 URL、用户名、密码创建数据库连接,客户端到服务端的连接,然后从 `information_schema.schemata` 表中查询数据库是否存在,如果不存在,就创建数据库。
166
+
167
+ 用的是最原始的 JDBC 方式,以及一些 Spring 方面的知识,这里就不展开了。大家看代码注释应该是能懂的。
168
+
169
+ information_schema 是 MySQL 的元数据信息,数据库的信息会存放在 schemata 表中。我们可以通过终端查看到 schemata 表的结构。
170
+
171
+ 
172
+
173
+ 这里给大家留一个作业题,如果你之前学过 Java 或者 Spring Boot 的话,可以仿照技术派的方式实现一个自动创建数据库的功能。
174
+
175
+ ### Java 原生
176
+
177
+ Java 原生代码需要你先下载一个 MySQL 的 JDBC 驱动,驱动的作用是让 Java 程序能够和 MySQL 数据库进行交互。
178
+
179
+ [MySQL Connector/J](https://dev.mysql.com/downloads/connector/j/)
180
+
181
+ 
182
+
183
+
184
+ 将下载的 `.jar` 包放到项目 classpath 下,什么是 classpath,一般就是项目的 `src/main/resources` 目录,或者是项目的 `lib` 目录。
185
+
186
+ 接下来,编写一个 Java 类来连接到 MySQL 服务器,并在数据库不存在时创建它:
187
+
188
+ ```java
189
+ class DatabaseCreator {
190
+
191
+ private static final String URL = "jdbc:mysql://localhost:3306/?useSSL=false&serverTimezone=UTC";
192
+ private static final String USER = "root";
193
+ private static final String PASSWORD = "123456";
194
+ private static final String DATABASE_NAME = "pai_coding";
195
+
196
+ public static void main(String[] args) {
197
+ try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
198
+ Statement stmt = conn.createStatement()) {
199
+
200
+ if (!databaseExists(conn, DATABASE_NAME)) {
201
+ stmt.executeUpdate("CREATE DATABASE " + DATABASE_NAME);
202
+ System.out.println("Database created successfully");
203
+ } else {
204
+ System.out.println("Database already exists");
205
+ }
206
+ } catch (SQLException e) {
207
+ e.printStackTrace();
208
+ }
209
+ }
210
+
211
+ private static boolean databaseExists(Connection conn, String dbName) throws SQLException {
212
+ ResultSet resultSet = conn.getMetaData().getCatalogs();
213
+
214
+ while (resultSet.next()) {
215
+ if (dbName.equals(resultSet.getString(1))) {
216
+ return true;
217
+ }
218
+ }
219
+
220
+ return false;
221
+ }
222
+ }
223
+ ```
224
+
225
+ ### Spring Boot
226
+
227
+ Spring Boot 项目的话,就比较省事了,不用去下载驱动,直接在 pom.xml 文件中添加 MySQL 的驱动依赖就可以了。
228
+
229
+ ```xml
230
+ <dependency>
231
+ <groupId>mysql</groupId>
232
+ <artifactId>mysql-connector-java</artifactId>
233
+ <version>8.0.19</version>
234
+ </dependency>
235
+ ```
236
+
237
+ 接着在 application.yml 配置文件中,设置数据库的基本连接信息。
238
+
239
+ ```yaml
240
+ spring:
241
+ datasource:
242
+ url: jdbc:mysql://localhost:3306/?useSSL=false&serverTimezone=UTC
243
+ username: root
244
+ password: 123456
245
+ ```
246
+
247
+ 然后在 Spring Boot 的启动类中创建数据库。
248
+
249
+ ```java
250
+ @SpringBootApplication
251
+ public class PaiCodingApplication {
252
+
253
+ public static void main(String[] args) {
254
+ SpringApplication.run(PaiCodingApplication.class, args);
255
+ }
256
+
257
+ @Bean
258
+ public CommandLineRunner initDatabase(DataSource dataSource) {
259
+ return args -> {
260
+ try (Connection conn = dataSource.getConnection();
261
+ Statement stmt = conn.createStatement()) {
262
+
263
+ if (!databaseExists(conn, "pai_coding")) {
264
+ stmt.executeUpdate("CREATE DATABASE pai_coding");
265
+ System.out.println("Database created successfully");
266
+ } else {
267
+ System.out.println("Database already exists");
268
+ }
269
+ } catch (SQLException e) {
270
+ e.printStackTrace();
271
+ }
272
+ };
273
+ }
274
+
275
+ private static boolean databaseExists(Connection conn, String dbName) throws SQLException {
276
+ ResultSet resultSet = conn.getMetaData().getCatalogs();
277
+
278
+ while (resultSet.next()) {
279
+ if (dbName.equals(resultSet.getString(1))) {
280
+ return true;
281
+ }
282
+ }
283
+
284
+ return false;
285
+ }
286
+ }
287
+ ```
288
+
289
+ 大家可以尝试下,看看能不能成功。
290
+
291
+ 更详细的参考答案和源码我放在了这个链接里:[Spring Boot 整合 MySQL 和 Druid](https://javabetter.cn/springboot/mysql-druid.html)
292
+
293
+ ## 小结
294
+
295
+ 本篇我们主要讲解了 MySQL 数据库的基本操作,包括创建数据库、切换数据库、删除数据库。
296
+
297
+ 并结合技术派实战项目来讲解了技术派是如何自动创建数据库的。以及如何通过 Java 原生代码和 Spring Boot 项目来创建数据库。
298
+
299
+ 希望大家动动手,练习一下,实战和理论真正的结合起来,冲鸭😁。
106
300
107
301
----
108
302
0 commit comments