<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>LuckyDu - MySQL</title>
<link>https://blog.anlucky.cn/index.php/tag/MySQL/</link>
<atom:link href="https://blog.anlucky.cn/index.php/feed/tag/MySQL/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Sat, 13 May 2023 16:19:00 +0800</lastBuildDate>
<pubDate>Sat, 13 May 2023 16:19:00 +0800</pubDate>
<item>
<title>SpringBoot基础入门</title>
<link>https://blog.anlucky.cn/index.php/programming/java/141</link>
<guid>https://blog.anlucky.cn/index.php/programming/java/141</guid>
<pubDate>Sat, 13 May 2023 16:19:00 +0800</pubDate>
<dc:creator>都依凡</dc:creator>
<description><![CDATA[SpringBoot基础入门Spring Boot是由Pivotal团队提供的一套开源框架，可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持，可以帮助开发者更轻松快捷地...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1>SpringBoot基础入门</h1><p>Spring Boot是由Pivotal团队提供的一套开源框架，可以简化spring应用的创建及部署。它提供了丰富的Spring模块化支持，可以帮助开发者更轻松快捷地构建出企业级应用。Spring Boot通过自动配置功能，降低了复杂性，同时支持基于JVM的多种开源框架，可以缩短开发时间，使开发更加简单和高效。（SpringBoot简化开发，可以快速部署SSM项目，整合了很多个配置，使用的时候只需要加上 Jar 包和对应的配置注解即可实现配置，Springboot内置了Tomcat）</p><h2>1. 构建SpringBoot项目</h2><blockquote>这里使用的IDEA编辑器，每个编辑器的构建方式可能有些不同，但是大致相同，使用别的编辑器的同学可以拿这篇文章作为参考</blockquote><h3>方式一：使用官网构建</h3><p>使用官网页面，直接下载springboot项目，使用流程如下</p><p>官网： <a href="https://start.spring.io/">https://start.spring.io/</a></p><p><img src="http://blog.anlucky.cn/usr/uploads/2023/05/4174152799.png" alt="137" title="137"></p><h3>方式二：使用IDEA构建</h3><blockquote>在IDEA中点击new project 创建新项目，然后根据需求构建项目</blockquote><p><img src="http://blog.anlucky.cn/usr/uploads/2023/05/3871765991.png" alt="138" title="138"></p><p><img src="http://blog.anlucky.cn/usr/uploads/2023/05/327866801.png" alt="139" title="139"></p><blockquote><p>注意：</p><p>​    使用此方法构建的SpringBoot和方式一构建的方式不同点在于一个是下载了一个压缩包文件，一个是直接在IDEA开发工具中下载，区别不大</p></blockquote><h3>方式三：自己配置</h3><blockquote><p>自己配置SpringBoot对于新手来说不太友好，要求对Jar包的熟悉程度比较高，个人不太推荐，大佬忽略，这里没有具体的配置方式</p><p>配置方式：</p><p>​    使用IDEA工具构建一个新的Maven工程，然后在POM文件中添加SpringBoot的相关依赖，自己创建Application启动类和配置文件</p></blockquote><pre><code>注意：
    Mybatis-Plus不可以直接勾选Jar包进行依赖引入，需要我们自己去官网选择版本引入</code></pre><h3>目录结构</h3><p><img src="http://blog.anlucky.cn/usr/uploads/2023/05/1552494730.png" alt="140" title="140"></p><h2>2. SpringBoot核心配置</h2><p>SpringBoot有两种配置文件结尾，<code>application.properties</code> <code>application.yml</code></p><p>yml 是一种 yaml 格式的配置文件，主要采用一定的空格、换行等格式排版进行配置。</p><p>yaml 是一种直观的能够被计算机识别的的数据序列化格式，容易被人类阅读，yaml 类似于 xml，但是语法比 xml 简洁很多，<strong>值与前面的冒号配置项必须要有一个空格</strong>， yml 后缀也可以使用 yaml 后缀。</p><blockquote><p>注意：</p><p>​    SpringBoot项目的配置文件必须使用<code>application</code>名称，否则不识别</p></blockquote><h3>1. SpringBoot基本配置</h3><pre><code class="lang-yml"># SpringBoot的核心配置文件
server:
  port: 8080  # 指定项目运行的端口
  servlet:
    context-path: /  # 指定项目的运行路径
    encoding:
      charset: utf-8 # 指定项目的编码集
spring:
  profiles:
    active: dev # 多环境下使用的环境是哪个，不写就默认 application</code></pre><h3>2. 多环境配置</h3><p>在实际开发的过程中，我们的项目会经历很多的阶段（开发-&gt;测试-&gt;上线），每个阶段的配置也会不 同，例如：端口、上下文根、数据库等，那么这个时候为了方便在不同的环境之间切换，SpringBoot 提供了多环境配置</p><blockquote><p>为每个环境创建一个配置文件，命名必须以 application-环境标识.properties|yml</p><p>例如：</p><ol><li><code>application-dev.yml</code></li><li><code>application-test.yml</code></li></ol></blockquote><h3>3. 自定义配置</h3><p>SpringBoot 的核心配置文件中，除了使用内置的配置项之外，我们还可以在自定义配置，然后采用注解去读取配置的属性值</p><p>如：</p><p>​    在<code>application.yml配置文件中</code>有如下配置</p><pre><code class="lang-yml">school:
  name: 清华大学
  address: 北京</code></pre><p>那么我们就可以在项目中使用</p><pre><code class="lang-java">    @Value(&quot;${school.name}&quot;) // 注入属性
    private String schoolName; </code></pre><h2>3. SpringBoot事务管理</h2><p>Spring Boot 使用事务非常简单，底层依然采用的是 Spring 本身提供的事务管理</p><p>在入口类中使用注解 @EnableTransactionManagement 开启事务支持</p><p>在访问数据库的 Service 方法上添加注解 @Transactional 即可</p><h2>4. SpringBoot整合mybatisPlus、thymeleaf、druid、redis、Dubbo配置</h2><pre><code class="lang-yml"># SpringBoot的核心配置文件
server:
  port: 8080  # 指定项目运行的端口
  servlet:
    context-path: /  # 指定项目的运行路径
    encoding:
      charset: UTF-8 # 指定项目的编码集
      enabled: true # 开启为 true
      force: true # 强制使用

# Spring 配置
spring:
  application:
    name: demo # spring项目名称
  profiles:
    active: dev # 使用的环境是哪个
  thymeleaf:
    cache: false # thymeleaf 不使用缓存
  datasource: # 数据库连接配置
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/ssm
    type: com.alibaba.druid.pool.DruidDataSource # 使用的数据库连接池需要导入 jar 包 druid-spring-boot-starter
    druid: # 可以不配置，有默认值
      initial-size: 5 # 初始化连接数
      min-idle: 5 # 最小连接数
      max-active: 20 # 最大连接数
      max-wait: 60000 # 获取数据库连接最大等待时间 单位毫秒
      time-between-eviction-runs-millis: 60000 # 配置多久进行一次检测，检测需要关闭的空闲连接 单位毫秒
  redis:  # redis 配置
    host: localhost
    port: 6379
#    password:  # redis密码，没有注释掉

# mybatis-plus 配置
mybatis-plus:
  mapper-locations: classpath*:/mapper/**/*.xml # 默认值，扫描mapper.xml文件
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 日志输出
  global-config:
    db-config:
      logic-delete-field: isDelete # 逻辑删除 需要加一个注解 @TableLogic
      logic-not-delete-value: 0 # 未删除逻辑值
      logic-delete-value: 1 # 已经删除逻辑值

# Dubbo服务提供者
#dubbo:
#  application:
#    name: provide
#  registry:
#    address: zookeeper://localhost:2181
#  scan:
#    base-packages: com.dyf # 这里配置Dubbo的注解所在包,扫描的是接口实现类


# Dubbo消费者
#dubbo:
#  application:
#    name: cosumer
#  registry:
#    address: zookeeper://localhost:2181
#  scan:
#    base-packages: com.dyf # 这里配置Dubbo的注解所在包,扫描的是controller</code></pre><h2>5. SpringBoot整合MybatisPlus分页插件配置类</h2><pre><code class="lang-java">@Configuration
public class MyBatisPlusConfig {
    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题(该属性会在旧插件移除后一同移除)
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 这里需要指定数据库类型 这里使用的Mysql
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}</code></pre><h2>6. 整合所需要的 jar 包</h2><p>导入SpringBoot 父类项目</p><pre><code class="lang-xml">    &lt;parent&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
        &lt;version&gt;2.7.11&lt;/version&gt;
        &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
    &lt;/parent&gt;</code></pre><p>导入所需要的 Jar 包</p><pre><code class="lang-xml">    &lt;dependencies&gt;
        &lt;!--redis--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;
        &lt;/dependency&gt;
        &lt;!--springboot Web包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt;
        &lt;/dependency&gt;
        &lt;!--springBoot 测试包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;!--Druid 数据库连接池包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.alibaba&lt;/groupId&gt;
            &lt;artifactId&gt;druid-spring-boot-starter&lt;/artifactId&gt;
            &lt;version&gt;1.2.16&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;!--mybatisPlus包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;com.baomidou&lt;/groupId&gt;
            &lt;artifactId&gt;mybatis-plus-boot-starter&lt;/artifactId&gt;
            &lt;version&gt;3.5.3.1&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;!--redis Jar包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-data-redis&lt;/artifactId&gt;
        &lt;/dependency&gt;

        &lt;!--Dubbo Jar包--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.dubbo&lt;/groupId&gt;
            &lt;artifactId&gt;dubbo-spring-boot-starter&lt;/artifactId&gt;
            &lt;version&gt;2.7.8&lt;/version&gt;
        &lt;/dependency&gt;
        &lt;!--zookeep包，注册中心，整合Dubbo时候使用--&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.apache.dubbo&lt;/groupId&gt;
            &lt;artifactId&gt;dubbo-dependencies-zookeeper&lt;/artifactId&gt;
            &lt;version&gt;2.7.8&lt;/version&gt;
            &lt;type&gt;pom&lt;/type&gt;
            &lt;!--取消引入这两个日志框架，若引入控制台会报错，Jar重复引入--&gt;
            &lt;exclusions&gt;
                &lt;exclusion&gt;
                    &lt;groupId&gt;org.slf4j&lt;/groupId&gt;
                    &lt;artifactId&gt;slf4j-reload4j&lt;/artifactId&gt;
                &lt;/exclusion&gt;
                &lt;exclusion&gt;
                    &lt;groupId&gt;log4j&lt;/groupId&gt;
                    &lt;artifactId&gt;log4j&lt;/artifactId&gt;
                &lt;/exclusion&gt;
            &lt;/exclusions&gt;
        &lt;/dependency&gt;

    &lt;/dependencies&gt;

    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
                &lt;configuration&gt;
                    &lt;excludes&gt;
                        &lt;exclude&gt;
                            &lt;groupId&gt;org.projectlombok&lt;/groupId&gt;
                            &lt;artifactId&gt;lombok&lt;/artifactId&gt;
                        &lt;/exclude&gt;
                    &lt;/excludes&gt;
                &lt;/configuration&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://blog.anlucky.cn/index.php/programming/java/141#comments</comments>
<wfw:commentRss>https://blog.anlucky.cn/index.php/feed/tag/MySQL/</wfw:commentRss>
</item>
<item>
<title>Mysql56个民族数据库</title>
<link>https://blog.anlucky.cn/index.php/programming/database/127</link>
<guid>https://blog.anlucky.cn/index.php/programming/database/127</guid>
<pubDate>Sat, 06 May 2023 17:02:00 +0800</pubDate>
<dc:creator>都依凡</dc:creator>
<description><![CDATA[Mysql 56个民族数据库表1. 创建数据库-- 创建数据库create database [数据库名称] charset=utf8;-- 使用数据库use database [数据库名称];...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h1>Mysql 56个民族数据库表</h1><h2>1. 创建数据库</h2><pre><code class="lang-sql">-- 创建数据库
create database [数据库名称] charset=utf8;
-- 使用数据库
use database [数据库名称];</code></pre><h2>2. 创建民族表</h2><pre><code class="lang-sql">create table [表名称](
    `id` varchar(32) primary key comment &#039;民族id&#039;,
    `nation` varchar(64) comment &#039;民族名称&#039;
);</code></pre><h2>3. 添加民族数据</h2><pre><code class="lang-sql">INSERT INTO `[表名称]` VALUES (&#039;1&#039;, &#039;汉族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;2&#039;, &#039;蒙古族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;3&#039;, &#039;回族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;4&#039;, &#039;藏族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;5&#039;, &#039;维吾尔族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;6&#039;, &#039;苗族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;7&#039;, &#039;彝族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;8&#039;, &#039;壮族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;9&#039;, &#039;布依族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;10&#039;, &#039;朝鲜族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;11&#039;, &#039;满族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;12&#039;, &#039;侗族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;13&#039;, &#039;瑶族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;14&#039;, &#039;白族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;15&#039;, &#039;土家族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;16&#039;, &#039;哈尼族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;17&#039;, &#039;哈萨克族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;18&#039;, &#039;傣族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;19&#039;, &#039;黎族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;20&#039;, &#039;傈僳族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;21&#039;, &#039;佤族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;22&#039;, &#039;畲族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;23&#039;, &#039;高山族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;24&#039;, &#039;拉祜族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;25&#039;, &#039;水族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;26&#039;, &#039;东乡族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;27&#039;, &#039;纳西族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;28&#039;, &#039;景颇族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;29&#039;, &#039;柯尔克孜族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;30&#039;, &#039;土族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;31&#039;, &#039;达翰尔族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;32&#039;, &#039;么佬族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;33&#039;, &#039;羌族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;34&#039;, &#039;布朗族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;35&#039;, &#039;撒拉族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;36&#039;, &#039;毛南族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;37&#039;, &#039;仡佬族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;38&#039;, &#039;锡伯族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;39&#039;, &#039;阿昌族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;40&#039;, &#039;普米族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;41&#039;, &#039;塔吉克族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;42&#039;, &#039;怒族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;43&#039;, &#039;乌孜别克族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;44&#039;, &#039;俄罗斯族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;45&#039;, &#039;鄂温克族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;46&#039;, &#039;德昂族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;47&#039;, &#039;保安族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;48&#039;, &#039;裕固族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;49&#039;, &#039;京族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;50&#039;, &#039;塔塔尔族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;51&#039;, &#039;独龙族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;52&#039;, &#039;鄂伦春族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;53&#039;, &#039;赫哲族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;54&#039;, &#039;门巴族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;55&#039;, &#039;珞巴族&#039;);
INSERT INTO `[表名称]` VALUES (&#039;56&#039;, &#039;基诺族&#039;);</code></pre><h2>4. 使用技巧</h2><p>将添加的数据的语句复制到记事本中，使用记事本中的替换功能进行替换</p><p>快捷键：<code>Ctrl + h</code></p><p><img src="http://blog.anlucky.cn/usr/uploads/2023/05/3028700854.png" alt="126" title="126"></p><p>然后在数据库中执行SQL语句即可完成</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://blog.anlucky.cn/index.php/programming/database/127#comments</comments>
<wfw:commentRss>https://blog.anlucky.cn/index.php/feed/tag/MySQL/</wfw:commentRss>
</item>
<item>
<title>Mysql数据库基础</title>
<link>https://blog.anlucky.cn/index.php/programming/database/39</link>
<guid>https://blog.anlucky.cn/index.php/programming/database/39</guid>
<pubDate>Sun, 16 Apr 2023 17:55:00 +0800</pubDate>
<dc:creator>都依凡</dc:creator>
<description><![CDATA[1. 什么是SQLSQL 是结构化查询语言( Structured  query language ) 适用于所有关系型数据库对数据进行增删改查的语言1.1按照SQL标准分类除了 SQL 标准之...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>1. 什么是SQL</h2><p>SQL 是结构化查询语言( Structured  query language ) </p><p>适用于所有关系型数据库对数据进行增删改查的语言</p><p><img src="http://blog.anlucky.cn/usr/uploads/2023/04/3930942210.png" alt="87" title="87"></p><h3>1.1按照SQL标准分类</h3><p>除了 SQL 标准之外，大部分 SQL 数据库程序都拥有它们自己的专有扩展！</p><h3>SQL标准</h3><p>关系型数据库通用的SQL语句就是SQL标准语句。</p><h3>SQL方言</h3><p>每个数据库管理系统都有各自的专属SQL语句，我们俗称方言，我们在实际开发的时候应该尽量避免使用每个数据库管理系统的专属SQL语句。</p><h2>2. 数据库管理系统的分类</h2><h3>关系型数据库（SQL）RDBMS</h3><pre><code>关系型数据库指的是使用关系模型（二维表格模型）来组织数据的数据库</code></pre><h3>常见的关系型数据库</h3><ol><li>Oracle</li><li>MySql</li><li>SQL Server    微软</li><li>SQLite</li><li>DB2   IBM</li></ol><h3>非关系型数据库（NoSQL）</h3><pre><code>非关系型数据库又被称为 NoSQL（Not Only SQL )，意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中，而对象之间的关系通过每个对象自身的属性来决定，常用于存储非结构化的数据</code></pre><h3>常见的非关系型数据库</h3><ol><li>键值数据库：Redis</li><li>文档数据库：MongoDB</li><li>图形数据库：Neo4j</li></ol><h2>3. MySQL介绍</h2><p>持久化(persistence)：把数据保存到可掉电式存储设备中以供之后使用。大多数情况下，特别是企 业级应用，数据持久化意味着将内存中的数据保存到硬盘上加以”固化”，而持久化的实现过程大多 通过各种关系数据库来完成。</p><p>持久化的主要作用是将内存中的数据存储在关系型数据库中，当然也可以存储在磁盘文件、XML数 据文件中。</p><h2>4. 数据类型</h2><h3>整数类型</h3><pre><code>* int / interage  4B  
* tinyint 1B
* bigint 8B</code></pre><h3>浮点类型</h3><pre><code class="lang-mysql">* float 小数点后面6-8位
    float(n,m); 
    n表示一共有多少位数 m表示小数部分保留几位
    此时整数部分位数：（n-m）位
* double 小数点后有效位数12位
    double(n,m) n表示一共有多少位数 m表示小数部分保留几位
    此时整数部分位数：（n-m）位
* decimal 用法和float和double相同  专用于表示钱相关的数字  
         decimal(n,m) m是小数位数 n-m为整数位数 </code></pre><h3>字符类型</h3><pre><code>* char 固定长度 char(10) 
    分配十个长度的存储空间，若不够10个长度，MySQL会自动补齐十个长度  char(n) n&lt;=4000
* varchar 可变长度 varchar(10) 
    分配十个长度的存储空间,传入长度不够时不会自动补齐
* text 64kb
* longtext 4GB</code></pre><h3>时间类型</h3><pre><code>1：time：只有时分秒： xx:xx:xx
2：date：只有年月日： xx/xx/xx
3：datetime：有年月日和时分秒: xx/xx/xx xx:xx:xx
4：timestamp：时间戳  毫秒值:</code></pre><h3>布尔类型</h3><pre><code>bool
boolean</code></pre><h3>字节类型</h3><pre><code>1：binary:255B
2：blob:64kB</code></pre><h2>5. DDL相关语句</h2><pre><code>data defined language:数据定义 对表结构的增删改查
关键字：create /drop /alter /show</code></pre><h3>1 对数据库的操作</h3><pre><code class="lang-mysql">-- 数据库相关的DDL语句
SHOW DATABASES; -- 显示所有数据库

SHOW VARIABLES LIKE &#039;%char%&#039;; -- 显示数据库的编码集

SHOW TABLES; -- 显示数据库所有表

CREATE DATABASE db_1; -- 创建一个数据库 名字：db_1

CREATE DATABASE db_1 CHARSET=&#039;utf8&#039;; -- 创建一个数据库 名字：db_1

USE db_1; -- 使用db_1 数据库

SELECT DATABASE(); -- 显示当前使用的数据库

DROP DATABASE db_1; -- 删除数据库 db_1

ALTER DATABASE db_1 CHARSET=&#039;gbk&#039;; -- 修改数据库的编码集为gbk
ALTER DATABASE db_1 CHARSET=&#039;utf8&#039;;</code></pre><h3>2 对表的操作</h3><pre><code class="lang-mysql">-- 数据表的DDL相关操作
CREATE TABLE tab_1(  -- 创建tab_1表 且必须传字段
    tid INT NOT NULL, -- 创建tid字段 数据类型是 int
    tname VARCHAR(4), -- 创建tname字段 数据类型varchar(4)
    tage TINYINT,
    tsex CHAR(1),
    tscort FLOAT(4,1),-- 数据类型float 整数长度4-1 小数1
    tbirthday DATE,
    tintime DATETIME  -- 最后一个不可以有逗号
);
SHOW TABLES; -- 显示所有表
DESC tab_1; -- 显示指定表的字段所有信息
DROP TABLE tab_1; -- 删除表

ALTER TABLE tab_1 RENAME TO tab_11; -- 修改表的名字
ALTER TABLE tab_11 RENAME TO tab_1;
ALTER TABLE tab_1 DROP tintime;    -- 删除一个字段
ALTER TABLE tab_1 ADD tintime DATETIME; -- 增加一个字段
ALTER TABLE tab_1 MODIFY tintime DATE; -- 修改字段的数据类型
ALTER TABLE tab_1 MODIFY tintime DATETIME;
ALTER TABLE tab_1 CHANGE tintime tin DATETIME; -- 修改字段名为tin数据类型为datetime
ALTER TABLE tab_1 CHANGE tin tintime DATE;</code></pre><h2>6. DML相关语句</h2><pre><code class="lang-mysql">-- DML相关语句
-- 对表记录的增删改：update insert delete
USE db_1;
DESC tab_1;
SELECT * FROM tab_1;
-- 添加信息
INSERT INTO tab_1 VALUES(1001,&#039;张三&#039;,19,&#039;男&#039;,19.9,&#039;1990/1/1&#039;,NOW());
INSERT INTO tab_1 VALUES(1002,&#039;李四&#039;,21,&#039;男&#039;,29.9,&#039;1993/3/4&#039;,NOW());
INSERT INTO tab_1 VALUES(1003,&#039;王五&#039;,24,&#039;男&#039;,2131.1,&#039;2001/4/133&#039;,NOW());
INSERT INTO tab_1(tid,tname,tage,tsex,tscort,tbirthday,tin)VALUES(1004,&#039;赵六&#039;,24,&#039;男&#039;,28.1,&#039;2002/3/14&#039;,NOW());
-- 添加一行信息 ，没有指定字段为null
INSERT INTO tab_1(tid,tname,tage,tsex,tscort)VALUES(1004,&#039;赵六&#039;,24,&#039;男&#039;,28.1);
-- 添加多行信息 没有指定的字段为null 
INSERT INTO tab_1(tid,tname,tage,tsex)VALUES(1004,&#039;王刚&#039;,24,&#039;女&#039;),(1004,&#039;小明&#039;,24,&#039;男&#039;);

UPDATE tab_1 SET tsex =&#039;妖&#039; WHERE tname = &#039;王刚&#039;;

UPDATE tab_1 SET tid = 1005 WHERE tbirthday = &#039;2002/3/14&#039;;
-- 删除数据 where 使用条件
DELETE FROM tab_1 WHERE tid = 1004;

INSERT INTO tab_1(tid,tname,tage,tsex)VALUES(1004,&#039;王刚&#039;,21,&#039;女&#039;);
-- tscort 是不是null 是null的话就是1不是null的话就是本身
UPDATE tab_1 SET tscort = IFNULL(tscort,1);</code></pre><h2>7. 函数</h2><h3>1. 字符串相关</h3><p>MySQL中字符串索引是从1开始</p><table><thead><tr><th align="center">函数名</th><th align="center">函数使用方式</th><th align="center">函数表示意义</th><th> </th></tr></thead><tbody><tr><td align="center">ascii</td><td align="center">ASCII('a')       返回97</td><td align="center">获取字符串在编码表中的位置</td><td> </td></tr><tr><td align="center">char_length</td><td align="center">CHAR_LENGTH('abcdefg') 返回7</td><td align="center">获取字符串的长度 一共有多少个长度</td><td> </td></tr><tr><td align="center">lentgth</td><td align="center">LENGTH('abc你好啊') 返回12</td><td align="center">获取字符串所占的字节数 字符串占2个字节</td><td> </td></tr><tr><td align="center">concat</td><td align="center">CONCAT('abc','123','defg',可无限写) 返回 abc123defg</td><td align="center">字符串连接</td><td> </td></tr><tr><td align="center">format</td><td align="center">SELECT FORMAT(123123123,3);返回123,123,123.000</td><td align="center">将数字转换成金钱余额的形式 小数点保留位数可以指定</td><td> </td></tr><tr><td align="center">locate</td><td align="center">SELECT LOCATE('de','abcdefg')返回4</td><td align="center">获取字符串1在字符串2中第一次出现的位置</td><td> </td></tr><tr><td align="center">lower</td><td align="center">SELECT LOWER('ABCDefg123%$#!@&#039;)返回abcdefg123%$#!@</td><td align="center">将大写字符转换成小写字符其他字符不变</td><td> </td></tr><tr><td align="center">upper</td><td align="center">SELECT UPPER('abcdef123@$#&#039;)返回ABCDEF123@$#</td><td align="center">将小写字符转换成大写字符</td><td> </td></tr><tr><td align="center">trim</td><td align="center">TRIM('   --abc--   ')返回--abc--</td><td align="center">清除字符串两边空格</td><td> </td></tr><tr><td align="center">rtrim</td><td align="center">SELECT RTRIM('  --abc--  ');</td><td align="center">清除字符串右边空格</td><td> </td></tr><tr><td align="center">Ltrim</td><td align="center">SELECT LTRIM('  --abc--  ');</td><td align="center">清除字符串左边空格</td><td> </td></tr><tr><td align="center">space</td><td align="center">SELECT CONCAT('abc',SPACE(5),'def');</td><td align="center">获取n个空格</td><td> </td></tr><tr><td align="center">reverse</td><td align="center">SELECT REVERSE('abcdefgh');</td><td align="center">字符串反转，逆序字符串</td><td> </td></tr><tr><td align="center">replace</td><td align="center">SELECT REPLACE('abc123abc456abc','abc','-')</td><td align="center">将参数一中的参数二替换成参数三</td><td> </td></tr><tr><td align="center">position</td><td align="center">SELECT POSITION('abc' IN 'defabcgheabc');</td><td align="center">获取第一个字符串在第二个字符串中出现第一次的位置</td><td> </td></tr><tr><td align="center">repeat</td><td align="center">SELECT REPEAT('abc',4);</td><td align="center">获取当前字符串几次的拼接结果</td><td> </td></tr><tr><td align="center">strcmp</td><td align="center">SELECT STRCMP('def','eabc');</td><td align="center">字符串逐个比较前面大返回1后面大返回-1一样返回0</td><td> </td></tr><tr><td align="center">substring</td><td align="center">SELECT SUBSTRING('abcdef',2,3);</td><td align="center">从参数一中截取字符串索引是参数2截取个数是参数3</td><td> </td></tr></tbody></table><h3>2. 数学相关函数</h3><table><thead><tr><th align="center">函数名</th><th align="center">函数使用方式</th><th align="center">函数表示意义</th><th> </th></tr></thead><tbody><tr><td align="center">sum</td><td align="center">SELECT SUM(tscore) FROM tab_2;</td><td align="center">求和，忽略null值不算</td><td> </td></tr><tr><td align="center">min</td><td align="center">MIN(tscore)</td><td align="center">求最小值，忽略null值不算</td><td> </td></tr><tr><td align="center">max</td><td align="center">MAX(tscore)</td><td align="center">求最大值，忽略null值不算</td><td> </td></tr><tr><td align="center">avg</td><td align="center">AVG(tscore)</td><td align="center">求平均值，忽略null值不算</td><td> </td></tr><tr><td align="center">count</td><td align="center">COUNT(tscore)</td><td align="center">获取数据行数，忽略null值不算   COUNT(*)会获取所有行包含null</td><td> </td></tr><tr><td align="center">floor</td><td align="center">floor(19.5)  返回19</td><td align="center">向下取整</td><td> </td></tr><tr><td align="center">ceil</td><td align="center">CEIL(19.5)  返回20</td><td align="center">向上取整</td><td> </td></tr><tr><td align="center">round</td><td align="center">round(19.5)   round(19.5,2)</td><td align="center">四舍五入保留几位小数</td><td> </td></tr><tr><td align="center">pow</td><td align="center">pow(n,m)</td><td align="center">幂运算 n的m次方</td><td> </td></tr><tr><td align="center">sqrt</td><td align="center">SQRT(9)</td><td align="center">开平方</td><td> </td></tr><tr><td align="center">rand</td><td align="center">RAND()</td><td align="center">获取一个0到1之间的随机数字</td><td> </td></tr><tr><td align="center">truncate</td><td align="center">TRUNCATE(n,m)</td><td align="center">截取数字n，保留小数点后m位</td><td> </td></tr><tr><td align="center">UUID</td><td align="center">UUID()</td><td align="center">随机一个不重复的32位字符串d2f5b155-4a97-11ed-98ed-eff1eabffcb4</td><td> </td></tr><tr><td align="center">mod</td><td align="center">MOD(n,m)</td><td align="center">n%m  取余运算</td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr></tbody></table><h3>3. 日期相关函数</h3><table><thead><tr><th align="center">函数名</th><th align="center">函数使用方式</th><th align="center">函数表示意义</th><th> </th></tr></thead><tbody><tr><td align="center">now</td><td align="center">NOW()</td><td align="center">取当前系统时间    2022-08-13 09:42:41</td><td> </td></tr><tr><td align="center">curdate</td><td align="center">CURDATE()</td><td align="center">取当前系统日期 2022-08-13</td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr><tr><td align="center"> </td><td align="center"> </td><td align="center"> </td><td> </td></tr></tbody></table><h2>8. 数据操作</h2><h3>1. Insert 插入数据</h3><pre><code class="lang-mysql">INSERT INTO【表名称】(字段列表)values(值列表); </code></pre><ul><li>插入多条数据</li></ul><pre><code class="lang-mysql">INSERT INTO 【表名称】(字段列表)values(值列表),(值列表)...;</code></pre><h3>2. Select 查询数据</h3><pre><code class="lang-mysql">SELECT * FROM 【表名称】;   -- 查询该表所有字段的所有信息</code></pre><ul><li>查询指定字段的信息</li></ul><pre><code class="lang-mysql">SELECT 【字段列表】 FROM 【表名称】; -- 查询该表中指定字段信息</code></pre><h3>3. Where 条件查询</h3><ul><li>需要配合着select查询语句进行使用</li></ul><pre><code class="lang-mysql">SELECT 【字段列表】 FROM 【表名称】 where 【字段名】&lt;等于/大于/小于/不等于&gt; 某值;</code></pre><h3>4. Update 更新数据</h3><ul><li>修改指定条件的字段等于某个数据</li></ul><pre><code class="lang-mysql">UPDATE 【表名称】SET 【字段】=【某值】,【字段】=【某值】 where 【字段名】&lt;等于/大于/小于/不等于&gt; 某值;</code></pre><h3>5. Delete 删除数据</h3><ul><li>删除表中的数据</li></ul><pre><code class="lang-mysql">DELETE FROM【表名称】;</code></pre><ul><li>指定条件删除某条或多条数据</li></ul><pre><code class="lang-mysql">DELETE FROM 【表名称】 where 【字段名】&lt;等于/大于/小于/不等于&gt; 某值;</code></pre><h3>6. Like 模糊匹配</h3><ul><li>我们在使用where的时候只能匹配精准的数据，若使用我们的Like 的话就可以模糊匹配某条数据是否包含某些值</li></ul><pre><code class="lang-mysql">select 【字段名】 from 【表名】 where 【字段名】 Like &#039;匹配规则&#039;</code></pre><h4>匹配规则</h4><pre><code class="lang-mysql">以某值开头        &#039;【值】%&#039;;
以某值结尾        &#039;%【值】&#039;;
包含某值        &#039;%【值】%&#039;;</code></pre><h3>7. 获取到数据后排序</h3><p>使用 Oreder By 【字段名】 【排序规则 DESC 倒序/ASC 正序】</p><pre><code class="lang-mysql">SELECT * FROM 【表名称】 order by 【字段名】 DESC/ASC;</code></pre><p>### 8. 获取到的数据分组</p><p>使用 Group by 【字段名】</p><p>按照指定固定字段进行分组</p><p>注意：</p><p>​            分组之后的数据无法查询组员是谁，只可以查询组员的聚合信息 比如 成员数，求和，求最大值，求最小值，求平均值等聚合信息</p><p>聚合信息：</p><p>​             比如 成员数，求和，求最大值，求最小值，求平均值</p><pre><code class="lang-mysql">select 【聚合信息字段】 from 【字段名】 group by 【分组字段】;</code></pre><h2>9. 多表查询</h2><h3>1. 字段连接查询 UNION    /  Union all</h3><ul><li>查询两张表中的字段 放到一张表中显示</li><li>1 两张表连接起来的数据类型必须一致</li></ul><pre><code class="lang-mysql">SELECT 【字段名】,【字段名】 from 【表名】 union select 【字段名】,【字段名】 from 【表名】; -- 查询到的数据不包含null


SELECT 【字段名】,【字段名】 from 【表名】 union all select 【字段名】,【字段名】 from 【表名】;-- 查询到的数据包含null</code></pre><h3>2. 表连接查询</h3><ul><li>方言</li></ul><pre><code class="lang-mysql">SELECT 【别名1】.*, 【别名2】.* from 【表名1】 as 【别名1】,【表名2】 as 【别名2】 where 【查询条件】;</code></pre><ul><li>标准 内连接 去除两张表中的NULL数据</li></ul><pre><code class="lang-mysql">SELECT 【别名1】.* 【别名2】.* from 【表名1】 as 【别名1】 inner join 【表名2】 as 【别名2】 on 【查询条件】;</code></pre><ul><li>标准 左连接</li></ul><pre><code class="lang-mysql">SELECT 【别名1】.* 【别名2】.* from 【表名1】 as 【别名1】 left join 【表名2】 as 【别名2】 on 【查询条件】;</code></pre><ul><li>标准 右连接</li></ul><pre><code class="lang-mysql">SELECT 【别名1】.* 【别名2】.* from 【表名1】 as 【别名1】 right join 【表名2】 as 【别名2】 on 【查询条件】;</code></pre><h2>10. SELECT(select) 查询</h2><p>select 字段1,字段2,......from 表名  # 查询当前表明指定字段的所有信息</p><p>查询指定字段 来自哪个表中</p><p>查询所有 select * from 表名  # 查询当前表中所有字段的所有信息</p><pre><code class="lang-mysql">SELECT 1+1,3*2;
SELECT 1+1,3*2 FROM DUAL
# dual 伪表
# 当前两种语句在执行的时候没有区别</code></pre><h2>11. 别名 AS</h2><p>在我们查询的时候为了方便查看我们可以给字段 / 表头 起一个别名,这个别名只在这条语句执行的时候有效</p><p>起别名的方式有两种</p><p>1 在我们select选择字段的时候可以直接按下一个空格然后指定别名</p><p>2 使用 AS 关键字 AS关键字后面写入你要起的别名使用双引号</p><pre><code class="lang-mysql">select id as &quot;学号&quot;,rname as &quot;姓名&quot; from student</code></pre><h2>12. 去除重复 distinct</h2><p>使用场景：比如我们要查询员工表中都有哪些部门中有员工</p><p>就可以使用关键字 distinct</p><pre><code class="lang-mysql">select distinct department_id from employees;</code></pre><p>错误的情况 运行报错无法运行</p><pre><code class="lang-mysql">select salary,distinct department_id from employees;</code></pre><p>正确的情况：</p><pre><code class="lang-mysql">select distinct department_id,salary from employees;</code></pre><h2>13. 着重号</h2><p>我们在给字段起名字的时候最好不要使用到MySQL的关键字，若真是使用到了关键字我们在查询的时候可以使用着重号来给这个词括起来</p><p>然后再去运行我们的查询语句就可以了</p><p>着重号就是~符号单点一下</p><h2>14. 显示表结构 describe</h2><pre><code class="lang-mysql">describe 表名;
desc 表名;</code></pre><p>显示表中所有字段的详细设置信息</p><h2>15. where 数据过滤</h2><pre><code class="lang-mysql">select * from 表名 Where 过滤条件</code></pre><p>如我们想要查询一个学生信息表中学生分数大于60的可写下面语句</p><pre><code class="lang-mysql">select * from student where scort&gt;60;</code></pre><h2>16. 算数运算</h2><pre><code class="lang-mysql">select 100 + &#039;a&#039; from dual; # 此时计算结果为100
# 在mysql中 他并不会将字符转换成对应的整数进行计算

select 100 + &#039;1&#039; from dual; # 计算结果101

select 100 + null from dual; # 计算结果为null</code></pre><ul><li>一个整数类型的值对整数进行加法和减法操作，结果还是一个整数；</li><li>一个整数类型的值对浮点数进行加法和减法操作，结果是一个浮点数；</li><li>加法和减法的优先级相同，进行先加后减操作与进行先减后加操作的结果是一样的；</li><li>在Java中，+的左右两边如果有字符串，那么表示字符串的拼接。但是在MySQL中+只表示数 值相加。如果遇到非数值类型，先尝试转成数值，如果转失败，就按0计算。（补充：MySQL 中字符串拼接要使用字符串函数CONCAT()实现）</li><li>一个数乘以整数1和除以整数1后仍得原数；</li><li>一个数乘以浮点数1和除以浮点数1后变成浮8点数，数值与原数相等；</li><li>一个数除以整数后，不管是否能除尽，结果都为一个浮点数；</li><li>一个数除以另一个数，除不尽时，结果为一个浮点数，并保留到小数点后4位；</li><li>乘法和除法的优先级相同，进行先乘后除操作与先除后乘操作，得出的结果相同。 在数学运算中，0不能用作除数，</li><li>在MySQL中，一个数除以0为NULL。</li></ul><h2>17. 比较运算符</h2><p>比较运算符用来对表达式左边的操作数和右边的操作数进行比较，比较的结果为真则返回1，比较的结果 为假则返回0，其他情况则返回NULL。 比较运算符经常被用来作为SELECT查询语句的条件来使用，返回符合条件的结果记录。</p><h3>1.字符串特殊情况</h3><p>字符串存在隐式转换，如果转换不成功 则给他当成0来看</p><p>若是字符串和字符串进行比较那么将比较的是值不会将字符串转换为 0 进行比较</p><p>若是字符串与数字进行比较那么将字符串转换为数字，若字符串不是数字的话默认当成0来看</p><h3>2. null特殊情况</h3><p>如果在比较中出现与null参与比较的时候比较返回也是一个null</p><pre><code class="lang-mysql">select null=null from dual;  # 结果返回一个null
select null = &#039;1&#039; from dual; # 结果返回一个null</code></pre><h3>3. null 查询</h3><pre><code class="lang-mysql"># 假设学生数据库中有地址字段address 其中有一部分学生的address是null 并没有添加地址信息，我们要查到这些学生使用sql语句

# 错误的写法
    select * from student where address = null; # 此条语句返回一个空
    # 因null在参与比较的时候无论什么情况都返回一个null 所以会取不出我们查询的数据集</code></pre><p>此时我们要借助一个新的运算符进行和null比较 </p><p>&lt;=&gt;  安全等于</p><pre><code class="lang-mysql">select null&lt;=&gt; null from dual;
# 按照之前的逻辑比较来说null参与比较是必须返回一个null，但是使用到安全等于比较运算符的时候就可以判断出他是不是等于null</code></pre><h3>4. 使用关键字进行字符串比较</h3><p><img src="http://blog.anlucky.cn/usr/uploads/2023/04/1914240989.png" alt="37" title="37"></p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://blog.anlucky.cn/index.php/programming/database/39#comments</comments>
<wfw:commentRss>https://blog.anlucky.cn/index.php/feed/tag/MySQL/</wfw:commentRss>
</item>
</channel>
</rss>