MySQL —— 简单聊一聊数据库设计

IM即时通讯功能mysql数据库设计 设计一个具备即时消息(IM)功能的数据库需要考虑许多因素,包括用户、消息、聊天室、消息状态等。以下是一个简单的MySQL数据库设计示例,用于支持基本的IM功能: 用户表 (User) 用户ID (UserID) 用户名 (Username) 密码 (Password) 电子邮件 (Email) 其他用户相关信息 聊天室表 (ChatRoom) 聊天室ID (RoomID) 聊天室名称 (R... 阅读详情

在这里插入图片描述


阅读原文


前言

这是关于 MySQL 系列文章的第三篇,在前两篇文章 《MySQL —— 数据库基础》 和 《MySQL —— SQL 语句总结》 中,主要介绍了一些数据库的基础概念、创建表的方式以及 SQL 语句的使用,本篇在使用的基础上做一个小小的升华,来简单聊一聊数据库的设计,还有一句话不得不再次赘述,数据库博大精深,本系列文章内容较浅,适合于前端的同学们对 MySQL 的入门,这也是我的学习笔记,希望可以帮助大家。


为什么设计数据库

说到为什么要设计数据库,就要说到数据的完整性,我们要在设计数据库时保证域的完整性和实体的完整性,同时从性能出发,我们要保证最大限度的节省存储空间,比如一张成绩表,上面没必要存储学生的姓名、年龄等信息,只需要存储成绩,如果一个数据库设计的合理,最后的结果就是方便我们对数据库的开发和扩展。

如果是一个 “糟糕” 的数据库设计会造成一系列的不良反应,比如数据冗余,存储空间浪费,内存浪费,有时甚至会造成数据插入和更新的异常,比如学生表存了学生信息,而成绩表也存了,这样在修改时没有全部修改就会出现错误。


软件项目开发中数据库设计的生命周期

软件项目开发中数据库设计的生命周期可大概分为以下几个阶段:

  • 需求分析阶段,分析客户的业务和数据处理需求;
  • 概要设计阶段,设计数据库 E-R 模型图,确认需求的正确和完整性;
  • 详细设计阶段,应用三大范式审核数据库;
  • 代码编写阶段,物理实现数据库,编码实现应用;
  • 软件测试阶段;
  • 安装部署阶段。

上面数据库的设计经历了从 “现实世界” 到 “信息世界” 到 “数据库模型” 再到 “数据库” 产生的一个完整过程。


设计数据库的步骤

收集信息:收集信息其实就是与相关人员进行交流、访谈、调研,充分了解用户需求,理解整个项目的完整流程,并理解数据库需要完成的任务,这部分工作大部分由需求人员完成,并根技术人员进行对接。

标识实体和实体属性:开发人员在明确需求和流程之后,标识数据库的实体,比如学生信息表,每一条实体中应该由哪些字段组成,成绩表中实体由哪些字段组成等等。

标识实体之间的关系:其实就是通过表之间的某字段对表进行关联,对表的实体之间建立对应关系,如学生表的 id 字段会关联成绩表的 student_id 字段,用来查找某个学生的成绩。


数据库 E-R 图

1、E-R 图基本概念

E-R 图也叫做实体关系图,是指用实体、关系、属性三个基本概念概括数据的基本结构,从而描述静态数据的概念模型。

E-R 图的实体:即数据模型中的数据对象,每一张表就是一个 E-R 图的实体。

E-R 图的属性:即数据对象中所具有的属性,例如学生表的学生、姓名、年龄等,属性又分为唯一属性和非唯一属性,唯一属性如经过唯一约束和主键约束的属性,不可重复,其他的都是非唯一属性。

E-R 图的关系:用来表示每一个数据对象与数据对象之间的联系,即每一个实体之间的联系,例如学生表和成绩表之间的联系,因为每个学生都有自己的成绩。

2、E-R 图的关联关系

(1) 1 对 1 (1 : 1)

1 对 1 关系是指对于实体集 A 和 实体集 B,A 中的每一个实体最多与 B 中的一个实体有关系,反之在实体集 B 中的每一个实体之多与实体集 A 中的一个实体有关系。

在这里插入图片描述

(2) 1 对多(1 : N)

1 对多关系是指实体集 A 与实体集 B 中至少有 N (N > 0) 个实体有关系,并且实体集 B 中最多与实体集 A 中的一个实体有关系。

在这里插入图片描述

(3) 多对多(M : N)

多对多关系是指实体集 A 中的每一个实体与实体集 B 中至少有 M (M > 0) 个实体有关系,并且实体集 B 中的每一个实体与实体集 A 中至少有 N (N > 0) 个实体有关系。

在这里插入图片描述


数据库设计的三大范式

1、确保每列的原子性

如果每列都是不可再分的最小单元信息,则满足第一范式,比如下图中,地址是由国家和城市组成的,显然可以继续在拆分成两个列,国家和城市,是不满足第一范式的,需要将地址列差分成国家和城市两个列。

在这里插入图片描述

举一个简单的例子,我们平时在淘宝购物的时候需要添加地址,在填写新地址时,都是让我们选择国家、省、城市、区、街道、小区这样的方式,而不是让我们自己将这些地址写在一起,其原因就是因为淘宝的数据库设计严格遵循每列的原子性,这样的提交可以方便后端获取每一个列的信息在数据库中进行存储。

2、每个表只能描述一件事情

如下图中所示,在左侧的表中,描述了学生信息和课程信息,这明显是两件事情,假设再有一张成绩表,也要描述学生信息,课程信息和成绩等多件事情,就会造成数据的重复、冗余,也可能会导致更新、插入、删除数据异常的现象。

在这里插入图片描述

所以正确的做法是应该将左侧表差分成两张表分别为学生表和课程表,并使用学生编号与课程编号进行关联。

3、其他列都不传递依赖于主键列

其他列都不传递依赖于主键列的意思是表中各列必须都与主键直接相关,不能简介相关,从下图左表可以看出,学生编号为主键,年级 ID 也应该为主键,正常应该通过学生编号找到年级 ID,再找到年级名称,这样年级名称与学生编号之间就形成了一个传递并且依赖于主键年级 ID,即年级 ID 做为主键在中间隔了一层,这样就使年级名称与主键学生编号间接相关,如果在同一张表中,所有的字段都是应该直接依赖于主键,而不是再通过其他的主键传递。

在这里插入图片描述

如果一个表中表述了多件事情并有多个作为主键的列,与上一条的处理方式相同,应该拆成多张表,并且每张表只有一个主键列。


RBAC 基于角色的访问控制

1、RBAC 的含义

RBAC(Role-Based Access Control)基于角色的访问控制,就是用户通过角色与权限进行关联,简单的说,一个用户拥若干个角色,每个角色拥有若干个权限,这样就构造成了 “用户 → 角色 → 权限 → 资源” 的授权模型,在这个模型中,用户与角色之间,角色与权限之间,权限与资源之间,一般都是多对多的关系,在 RBAC 中最重要的概念主要有四部分,就是用户(User)、角色(Role)、权限(Permission)和资源(Resource)。

2、RBAC 的安全原则

  • 最小权限原则:最小权限原则之所以被 RBAC 所支持,是因为 RBAC 可以将其角色配置成完成任务所需要的最小的权限集;
  • 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务而体现,比如要求一个计帐员和财务管理员共参与同一个帐目;
  • 数据抽象原则:数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。

3、RBAC 的 E-R 图

之前说 RBAC 最重要的概念由四部分,其实体现在数据库的表中有主要三部分,因为角色和用户是重叠的,那么主要有三张表分别为用户表、权限表和资源表,其中用户表与权限表之间有一张关联表,权限表与资源表之间有一张关联表,E-R 图如下。

在这里插入图片描述


事务

1、为什么需要事务?

在生活中我们经常使用银行转账或者支付宝和微信支付,这种操作每一次至少影响两个用户的数据信息,比如一方给另一方转钱,如果成功则转钱方余额减去转出金额,而收钱方余额增加收到的金额,这应该是一个请求操作了数据表中的俩个实体,如果在两个操作数据的环节任意一个失败了,都会影响两个人数据的正确性,这种时候需要两个操作同时失败或同时成功,就是说有一个操作出现失败的情况,即使另一个成功了也需要进行回滚操作,这就是事务的由来。

2、什么是事务

事务是作为单个逻辑工作单元执行的一系列操作,多个操作作为一个整体向系统提交,要么都执行,要么都不执行,是一个不可分割的工作逻辑单元。

转账过程就是一个整体,它需要两条 UPDATE 语句,如果任何一个出错,则整个转账业务取消,两个账户的余额都恢复到原来的数据(回滚),确保总余额不变。

这里再举一个例子,有一个上传文件的功能,后端接收到文件流时是需要先写入的,当写入成功后,会将上传成功的结果返回给客户端,如果文件很大,写入的时间就会长,如果在此期间突然写入失败,则会删除之前写入的内容,将整个操作回滚到写入之前,这里面主要两步操作,创建一个新文件并写入,写入成功删除旧文件,如果写入失败,两个操作将会同时失败,即不会删除旧文件,这也是一个事务的例子,只是没有转账那么明显。

3、事务的特性 ACID

事务具有以下特性,被简称为 ACID:

  • 原子性(Atomicity):事务是一个完整的操作,事务各个部分是不可分的,要么都执行,要么都不执行;
  • 一致性(Consistency):当事务完成后,数据必须处理完整的状态;
  • 隔离性(Isolation):并发事务彼此隔离、独立,它不应该以任何方式依赖于其它事务;
  • 持久性(Durability):事务完成后,它对数据库的修改被永久保持。

4、如何创建事务

(1) 创建表

创建表 account,id 列为主键列,name 列为姓名,balance 为余额。

CREATE TABLE `account` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(64) NOT NULL,
    `balance` INT(11) DEFAULT 0
    PRIMARY KEY (`id`)
);
(2) 添加数据

将表 account 添加两条数据,分别为 “张三” 和 “李四”,余额都为 100。

INSERT INTO `student` (`name`, `balance`) VALUES ("张三", 100);
INSERT INTO `student` (`name`, `balance`) VALUES ("李四", 100);
(3) 使用 NodeJS 实现事务
const mysql = require("mysql");

// 创建数据库连接
const connection = mysql.createConnection({
    host: "localhost", // 主机名
    port: "3306", // 数据库服务端口号
    username: "root", // 数据库名称
    pwd: "123456", // 数据库密码
    database: "school"  // 连接的数据库名称
});

connection.connect();

// 开启事务
connection.beginTransaction(err => {
    // 回调参数为错误对象,返回结果,返回字段描述
    connection.query("UPDATE account SET balance - 50 WHERE id = 1", (err, result, fields) => {
        if (err) {
            connection.rollback(); // 如果失败直接回归
        } else {
            connection.query("UPDATE account SET balance - 50 WHERE id = 1", (err, result, fields) => {
                if (err) {
                    connection.rollback(); // 如果失败直接回归
                } else {
                    connection.commit(); // 如果两个都成功了则提交事务
                }
            });
        }
    });
});

总结

到此关于 MySQL 的系列文章就告一段落了,希望前端的同学们在看了这几篇文章后对你们入门 MySQL 有一些帮助,那这几篇的文章就达到目的了,也欢迎后端的小伙伴来指出文章中的错误和不足。


浅析数据库(DB)、操作数据存储(ODS)和数据仓库(DW)的区别与联系 文章背景:相信大部分刚接触上面三个概念的同学,都多多少少会有些迷惑,现在我就给大家简单分析下这三者的关系,希望大家对这三者的概念理解有所帮助吧。本文主要从下面两类关系来叙述上面三者的关系: 数据库(DB)和数据仓库(DW)的区别与联系 操作数据存储(ODS)和数据仓库(DW)的区别与联系 数据库与数据仓库的区别与联系数据库与数据仓库基础概念:数据库:传统的关系型数据库的主要应用,主要是基本的、日常的 阅读详情

相关推荐

MYSQL-修改数据库 ALTER DATABASE (一)

MYSQL修改数据库 ALTER DATABASE

口袋里的小龙的专栏 972

简单数据库设计

数据库设计 学生表:student 字段: studentnum(学号),studentname(学生姓名),classname(班级名称),sex(男:1,女:2),birthday(出生日期) 问题1:查出student表中各个班级的人数,并按人数从多到少排列 答案: SELECT classname,COUNT(classname) FROM student GROUP BY classname ORDER BY COUNT(classname) DESC 注意:GROUP BY分组,OR

Zhang5801的博客 1976

MyEclipse DB Browser连接MySQL配置

MyEclipse DB Browser连接MySQL配置   1、打开MyEclipse   2、选择菜单:Window/Open Perspective/MyEclipse Database Explorer,点这儿OK,在左边打开DB Brower窗口。   3、在DB Brower窗口内任意空白处击右键,选择New命令,弹出Database Driver窗口   4、本

几鹰 4170

聊天室——MYSQL建表

在进行聊天室项目以前,我从来没有接触过mysql,但是mysql在聊天室的开发过程中起到了非常重要的作用;我们许多功能的实现都需要依靠数据库,毕竟我们的server不可能一直运行,有时一个功能实现的关键就在于数据表。 关于聊天室的建表我也是根据整体服务器的架构来进行 首先我们需要把每一个用户的基础信息记录下来, 用户数据表——UserData 在聊天之前,我们需要先有好友列表, 好友列表——FriendsList 关于好友列表,我们可以给每一个用户创建一个数据表,这个表的名字为这个用户的用户名"u

qq_51665789的博客 5119

mysql 数据库设计实例_一个简单数据库设计例子

一个曾经做过的简单的管理系统中数据库设计的例子,包括设计表、ER图、建模、脚本. 项目信息 Project Name: Book Manager System DB: MySQL5.5 DB Name: db_library Tables: 1). tb_book_info 2). tb_user 3). tb_admin_info 4). tb_borrow_return 5). tb_boo一...

weixin_29212429的博客 3782

MYSQL-创建数据库 CREATE DATABASE (十一)

MYSQL创建数据库语法 CREATE DATABASE

口袋里的小龙的专栏 1403

对话聊天设计

2、展示用户列表 :/userapp/message/selectUserList (返回用户信息和未读消息的条数)展示用户列表 :/userapp/message/selectUserList (返回用户信息和未读消息的条数)5、用户撤回消息(三分钟之内可以撤回):/userapp/message/removeUserMessage。1、用户发送消息 :/userapp/message/insertUserMessage。4、移除用户列表:/userapp/message/removeUser。

qq_51120876的博客 2783

消息聊天系统MySQL表设计-聊天系统-数据库设计.pdf

消息聊天系统MySQL表设计_聊天系统-数据库设计 //常⽤的redis命令 CONFIG SET requirepass "mypass" //Hashmap hset [key] [field] value] hget [key] [field] hgetall [key] //List LPUSH [key] [value] RPUSH [key] [value] LPOP [key] RPOP [key] //删除表头2个值为value的元素 LREM [key] [count > 0] [value] //删除表尾2个值为value的元素 LREM [key] [count < 0] [value] //删除所有值为value的元素 LREM [key] [count = 0] [value] LREM mylist 2 "hello" LREM mylist -2 "hello" //查询0~最后1个元素(不删除) LRANGE mylist 0 -1 BRPOP [key] [timeout] BLPOP [key] [timeout] //例:获取message_1最左的元素,如果没有,等待5秒,超时返回nil BLPOP message_1 5 采⽤Redis进⾏数据存储,主要包括频控、限流、⽤户表、在线⽤户表、聊天消息表(redis list实现消息队列)、好友表(TODO) 频控 CheckFrequency(userId uint64) bool 返回true检查通过,false触发频控 visited_{user_id} >3触发 //频控key前缀 const freqPre string = "visited_" /* Desc: 检查频控key Input: userId Output: False 触发频控/异常 True 正常请求 */ func CheckFrequency(userId uint64) bool { key := freqPre + strconv.FormatUint(userId, 10) resExists, err := Client.Exists(key).Result() if err != nil { return false } if resExists == 0 { //该key不存在 Client.Set(key, 0, 100 * time.Second) return true } res, err := Client.Get(key).Result() if err != nil { return false } resCnt, err := strconv.Atoi(res) if err != nil { return false } if resCnt > 2 {//10秒同⼀userid不能访问超过2次 fmt.Println("触发频控") //... return false } Client.Incr(key) return true } 频控测试 redis.CreateClient() var res bool = true for res { time.Sleep(time.Second * 1) res = redis.CheckFrequency(54508) fmt.Println(res) } 限流 /* 令牌桶算法API */ const LevelFast int = 1 const LevelMedium int = 2 const LevelSlow int = 3 var tokenBucket *ratelimit.Bucket func InitToken(speedLevel int) { var bucketFillDuring time.Duration if speedLevel == LevelFast { bucketFillDuring = 20 * time.Millisecond } else if speedLevel == LevelMedium { bucketFillDuring = 100 * time.Millisecond } else if speedLevel == LevelSlow { bucketFillDuring = 1000 * time.Millisecond } else { //⽇志 fmt.Println("speedLevel只能为Fast, Medium, Slow三个值!") return } var bucketMax int64 = 1//令牌桶最⼤容量,初始也会有这么多个令牌,此处为1是测试所⽤,⽅便看到限流效果,后期需增加⼤⼩ toke

数据库课程设计mysql——个人博客数据管理系统

本篇是我大二数据库课程的结课作业,想分享给大家,文中理解有误的地方,请多多指正~ 文章目录需求分析概念结构设计抽象出系统的实体2.2 设计E-R图全局E-R图逻辑结构设计数据库物理设计与实施创建数据库建立和管理基本表建立基本表与管理基本表插入数据建立和管理视图建立视图管理视图访问数据库数据查询数据更新数据库维护备份数据库创建触发器总结与心得 需求分析 随着互联网的发展,越来越多的人拥有了自己的个人博客。但是大多数采用的是网上别人做好的博客模板,众所周知,网上的模板并不是单独为个人而定制,而是面向大多数人

2302_77250325的博客 8736

知识图谱初步学习(一)——本体+Protege新手学习

文章目录前言(本体详解)1.本体概念2.本体分类3.本体组成4.本体构建方法一、protege简介二、软件使用步骤1.安装2.使用三、问题解决方案汇总 前言(本体详解) 在开始学习知识图谱的过程中,首先就是要了解什么是本体(ontology)。 1.本体概念 本体的概念最初源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体是可以在语义的层次上来对知识进行描述,可以看做是某一个领域知识的通用模型。 本体是从客观世界中抽象出来

qq_43654669的博客 3万+

水下机器人仿真平台选型指南:从AirSim到Unity3D的深度对比

本文深入对比了AirSim+UE和Unity3D两大水下机器人仿真平台的核心架构、传感器仿真能力和水下环境建模特点。AirSim+UE凭借高精度物理仿真和丰富传感器支持成为专业研发首选,而Unity3D则以快速开发和灵活扩展见长。文章为研发团队提供了全面的选型指南,帮助优化水下实验的仿真效率与成本。

weixin_29009669的博客 450

5、MySQL修改数据库:ALTER DATABASE用法简介

在 MySQL 数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。 在 MySQL 中,可以使用 ALTER DATABASE 来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ DEFAULT ] COLLATE <校对规则名>} 语法说明如下: A

you can you up up up的博客 2710

VirtualBox虚拟机拖放文件总失败?手把手教你配置双向拖放与共享文件夹(Ubuntu版)

本文详细指导如何在VirtualBox的Ubuntu虚拟机中配置高效的数据交换方案。核心是安装VirtualBox Guest Additions,并在此基础上开启双向拖放与共享粘贴板功能,同时建立稳定的共享文件夹,彻底解决主机与虚拟机间文件传输失败的问题,构建无缝的跨系统工作环境。

weixin_29245767的博客 232

mysql 新建database_MySQL创建数据库(CREATE DATABASE语句)

在MySQL 中,可以使用CREATE DATABASE 语句创建数据库,语法格式如下:CREATE DATABASE [IF NOT EXISTS] [[DEFAULT] CHARACTER SET ][[DEFAULT] COLLATE ];[ ]中的内容是可选的。语法说明如下::创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文...

weixin_30441727的博客 7047

告别F5失灵!手把手教你为Cursor配置.Net Core控制台项目专属调试环境

本文详细指导如何在Cursor编辑器中为.Net Core控制台项目配置专属调试环境,解决F5失灵等常见问题。从调试器选择到launch.json配置,再到高级调试技巧,帮助开发者高效搭建完整的调试工具链,提升开发效率。

weixin_28834765的博客 285

PINN for PDE(偏微分方程)4 - 反向问题 - Burgers’ equation

PINN for PDE(偏微分方程)4 - 反向问题 - Burgers’ equation

m0_62030579的博客 3003

MySQL修改数据库:ALTER DATABASE用法简介

数据库创建好后也是可以修改的,下面我们来介绍一下修改数据库的基本操作 基本语法 在 MySQL 中,可以使用 ALTER DATABASE 或 ALTER SCHEMA 语句来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为: ALTER DATABASE [数据库名] { [ DEFAULT ] CHARACTER SET <字符集名> | [ D...

MYSQL安装教程 2077

Autosar NvM配置-手动配置Nvblock及使用-基于ETAS软件

NVM作为存储协议栈中最顶层的模块,是必须要掌握的。目前项目基本使用MCU带的Dflash模块,使用Fee模拟eeprom。在项目前期阶段,应该充分讨论需要存储的内容,包括应用数据,诊断数据等,用以评估Dflash空间是否够用。本文基于ETAS软件介绍NVBlock配置生成NVM参数及使用。使用NVBlock配置生成,基本不用手写代码,还是比较方便的。对于Nv block的划分,建议将同时写的一类数据放到一个block中,因为block除了data以外,Fee还会增加一些header数据,占用不少内存。

赞的博客 1884

mysql alter database_MySQL修改数据库:ALTER DATABASE用法简介

在MySQL数据库中只能对数据库使用的字符集和校对规则进行修改,数据库的这些特性都储存在 db.opt 文件中。下面我们来介绍一下修改数据库的基本操作。在 MySQL 中,可以使用ALTER DATABASE来修改已经被创建或者存在的数据库的相关参数。修改数据库的语法格式为:ALTER DATABASE [数据库名] {[ DEFAULT ] CHARACTER SET |[ DEFAULT ]...

weixin_35084134的博客 2393

13、基于RBF的自适应鲁棒控制与反步控制方法及实现

本文介绍了基于RBF神经网络的自适应鲁棒控制与反步控制方法,详细阐述了控制系统的程序结构、核心算法及实现流程。通过Simulink搭建仿真系统,利用RBF网络逼近系统中的不确定非线性函数,并结合Lyapunov稳定性理论设计控制律,实现了对倒立摆等复杂非线性系统的高精度跟踪控制。文章还提供了完整的MATLAB/Simulink代码示例和仿真结果分析,验证了该方法的有效性与鲁棒性,为实际工程应用提供了可行的技术路径。

ol789012的博客 87

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

详解Xilinx FPGA高速串行收发器GTX/GTP(6)--Pattern Generator/Pattern Checker

孤独的单刀 1625

db文件怎么修改_详解MySQL数据库的db.opt文件含义及作用

概述MySQL数据库存放数据目录里的db.opt文件是MySQL建库过程中自动生成的。细心的朋友可能会发现有时候在MySQL数据库的某些库目录下有个db.opt文件,那这个文件是干什么用的呢?如果你用记事本等编辑器打开看的话,内容很简单,是用来记录该库的默认字符集编码和字符集排序规则用的。db.optMySQL的每个数据库目录中有一个文件db.opt,该文件主要 用来存储当前数据库的默认字符集和字...

weixin_39856607的博客 2467

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

MySQL创建数据库(CREATE DATABASE语句)

在 MySQL 中,可以使用CREATE DATABASE语句创建数据库,语法格式如下: CREATE DATABASE [IF NOT EXISTS] <数据库名> [[DEFAULT] CHARACTER SET <字符集名>] [[DEFAULT] COLLATE <校对规则名>]; [ ]中的内容是可选的。语法说明如下: &l...

weixin_42145502的博客 9950

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

TeamTalk知识点梳理一(单聊)

TeamTalk单聊相关逻辑

COOL_jack的博客 1166

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: MySQL —— SQL 语句总结
下一篇: 通过一个案例理解 JWT
Panda Shen
博客等级 码龄10年 18粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值