MySQL数据库的应用

2023-05-16

数据库常见术语

  • DB (Database):数据库
  • DBMS(Database Management System):数据库管理系统
  • SQL(Structured Query Language ):结构化的查询语言

数据库的设计

  • 数据库名字(规范)
  • 数据库的字符集(utf8mb4/utf8mb4_general_ci)
  • 数据库中表的数量(information_schema.tables)

常见问题分析(FAQ)

  • MySQL中创建数据库的语法是怎样的?

通过 help 'create database' 方式查看创建数据库的语法。

  • MySQL如何基于语法创建数据库?

CREATE DATABASE IF NOT EXISTS JSDTN2205 CHARACTER SET utf8mb4;  

 

CREATE DATABASE IF NOT EXISTS JSDVN2205 COLLATE utf8mb4_general_ci;

  • 如何查看Mysql中自带的字符集?

show variables like '%collation_%'

  • 如何删除MySQL中的数据库?

首先通过 help 'drop database' 方式查询删除数据库的语法。


  

DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

基于语法实现数据库的删除

DROP DATABASE IF EXISTS JSDTN2205;

  • 如何打开数据库?

use JSDTN2205;

  • 如何查看数据库中有哪些表?

show tables;

  • 如何统计指定数据库中有多少张表?(mysql5.7)

select table_schema,count(*) tables from information_schema.tables where table_schema='JSDVN2205' group by table_schema;

数据库中表的设计

  • 语法
  • 表的名字
  • 表中字段的类型
  • 表中字段常用约束
  • 表中字段的默认值(default)
  • 表中字段的描述(含义-comment)
  • 表中字段的数量(宽表/窄表)
  • 表的设计范式与反范式

常见问题分析

  • 如何查看创建表的语法?

help 'create table'

案例分析:打开JSDTN2205数据,然后在库中创建学生表(student)

use jsdtn2205 
create table if not exists student
( id bigint auto_increment, first_name varchar(50) not null comment '学生名字', last_name varchar(20) not null comment '学生姓', phone varchar(15) not null comment '手机号', 
birthday date comment '出生日期', create_time datetime default current_timestamp comment '注册日期', primary key (id), unique key (phone) )engine = InnoDB character set utf8mb4;
  • MySql中常用的数据类型有哪些?
  1. 字符串类型 (char,varchar,text,...)
  2. 日期/时间类型(date,time,datetime,timestamp,...)
  3. 数值类型(tinyint,int,bigint,decimal,...)
  4. 二进制类型(blob,mediumblob,longblob,...)
  5. 其它(enum,set,json,...)
  • MySQL中数据类型的应用有什么原则吗?
  1. 尽量选择简单数据类型(例如存储整数用int不用varchar)
  2. 尽量使用最小数据类型(例如能用tinyint不用int)
  3. 假如要存储小数可以考虑使用decimal类型。
  4. 尽量避免使用text、blob等大字段类型(假如需要使用则尽量放到一张表中)
  • MySql表中常用的字段约束有哪些?
  1. 非空约束(not null):字段的值不允许为空
  2. 主键约束(primary key):字段值不允许为空并且唯一
  3. 唯一约束(unique key):字段值必须唯一
  4. 检查约束(check):字段值需要在指定范围(但是数据库之间的兼容不好)
  5. 外键约束(foreign key):字段值需要参考引用表中的字段值。
drop table if exists category;

create table if not exists category(
id int auto_increment comment '主键值',
category_name varchar(100) not null comment '分类名称',
primary key (id)
)engine=InnoDB character set utf8mb4;

  • 如何理解宽表和窄表这个概念?

宽表和窄表的定义一般由企业内部开发规范进行定义(例如超出40个字段定义宽表)。

  1. 宽表就是表中字段比较多的表(字段越多维护越困难,甚至会影响查询效率)
  2. 窄表就是表中字段比较少的表(维护简单、太少可能会导致大量的表关联)
  • 如何理解表设计时的三大范式?

范式是一种设计规范,一种关系模式,可以对表的设计起到一个指导性作用。

  1. 第一范式(1NF):描述的是字段名不可再分。例如姓名可再分为姓和名,这属于可再分。
  2. 第二范式(2NF): 描述的是不存在非主键字段对主键字段的部分依赖。
  3. 第三范式(3NF): 不存在非主键字段对主键字段的传递依赖。

范式应用案例分析:

  1. 分析如下表的设计是否满足第一范式?

创建一张教师表,具体代码如下:

create table teacher
( id int auto_increment, name varchar(50) not null comment '姓名', primary key (id) 
)engine=InnoDB character set utf8mb4;

在teacher表的设计中,对于name字段其实可再分为姓和名,按照第一范式的的定义来讲, 这个设计不满足第一范式,我们可以将这个设计调整为如下方案:

create table teacher (
 id int auto_increment, first_name varchar(50) not null comment '名', last_name varchar(50) not null comment '姓', primary key (id)
 )engine=InnoDB character set utf8mb4;
  1. 分析如下表的设计是否满足第二范式?

创建一张成绩表,代码设计如下:

create table if not exists score( 
sid bigint comment '学生编号', cid bigint comment '课程编号', cname varchar(50) not null comment '课程名', score int not null comment '成绩', primary key (sid,cid) 
)engine=InnoDB character set utf8mb4; 

此表设计不满足第二范式,这里表中的cname依赖于cid,但不依赖于sid, 存在部分依赖。假如要满足第二范式,可调整为如下方案:

create table if not exists score (
 sid bigint comment '学生编号', cid bigint comment '课程编号', score int not null comment '成绩', primary key (sid,cid) 
)engine=InnoDB character set utf8mb4;
  1. 分析如下设计是否满足第三范式?

创建一个部门表,其代码如下:

create table if not exists departments (
 id int auto_increment comment '部门编号', name varchar(100) not null comment '部门名称', city varchar(20) not null comment '所在城市', street_address VARCHAR(40) not null '街道', postal_code VARCHAR(12) default '' comment '邮编', primary key (id) 
)engine=InnoDB character set utf8mb4;

此表的设计不满足第三范式,因为存在传递依赖,这里的邮编依赖于街道, 街道又依赖于部门id,所以这里存在传递依赖,假如希望这个表的设计满 足第三范式,可以将部门地址信息写到locations表,然后departments表 再与locations建立关系,例如:

create table if not exists locations (
 id int auto_increment comment '地址编号', city varchar(20) not null comment '城市', street_address VARCHAR(40) not null comment '街道', postal_code VARCHAR(12) default '' comment '邮编', primary key (id) 
)engine=InnoDB character set utf8mb4; 
create table if not exists departments (
 id int auto_increment comment '部门编号', name varchar(100) not null comment '部门名称', location_id int, unique key (name), primary key (id), foreign key (location_id) references locations(id) 
)engine=InnoDB character set utf8mb4;
  • 如何理解表设计时的反范式?

范式设计为我们进行表设计提供一些指导性思想,但实际项目中有时为了提高查询 效率,可能会在表中适当的添加一些冗余字段。就类似于将课程名添加到成绩表中, 这样查询成绩表时可以直接查询出课程名,不需要再去关联课程表进行查询了。但 是这种冗余可能会带来更新的复杂读。例如更新课程表的课程名时,还要去更新 成绩表中的课程名。

  •  一个SQL查询语句的基本执行逻辑是什么?

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL数据库的应用 的相关文章

  • 如何在Sequelize中设置查询超时?

    我想看看如何在 Sequelize 中设置查询的超时时间 我查看了 Sequelize 文档以获取一些信息 但我找不到我要找的东西 我发现的最接近的是 pools acquire 选项 但我不想设置传入连接的超时 而是设置正在进行的查询的超
  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • MySQL MIN/MAX 所有行

    我有桌子Races与行ID Name and TotalCP 我选择分钟 TotalCP FROM Races 但是我想选择具有最小值的整行 我如何在单个查询中做到这一点 从聚合值获取整行的一般形式是 SELECT FROM Races W
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教
  • Flask-login:无法理解它是如何工作的

    我试图理解如何Flask Login https flask login readthedocs org en latest works 我在他们的文档中看到他们使用预先填充的用户列表 我想使用数据库存储的用户列表 但是 我不明白其中的一些
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • POINT 列上的 MySQL INSERT/UPDATE

    我正在尝试用我国家的地理位置填充我的数据库 我的一张表有 4 个字段 ID PK 纬度 经度和地理点 EDIT SCDBs Punto Geografico SET lat 18 469692 SET lon 63 93212 SET g
  • 不允许在 php 中连接到此 MariaDB 服务器

    我尝试在 php 中连接远程服务器数据库 但出现以下错误 Host xx xxx xx xx is not allowed to connect to this MariaDB server in 我的连接代码是这样的 servername
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 即使没有结果也返回一个值

    我有这种简单的查询 它返回给定 id 的非空整数字段 SELECT field1 FROM table WHERE id 123 LIMIT 1 问题是如果找不到 id 结果集就是空的 我需要查询始终返回一个值 即使没有结果 我有这个东西工
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID

随机推荐

  • H3C交换机常用命令

    H3C S5800 显示当前配置 lt H3C gt display current configuration 缩写 xff1a dis cur 恢复出厂设置 lt H3C gt reset saved configuration 按y
  • SVN 增加patch打包管理

    系统上线后必然面临系统的维护 xff0c 目前我们对系统维护和新需求开发 xff0c 是以打patch包形式更新程序 xff0c 但对打包的文件不能很好的搜寻出来 xff0c 为解决这个问题 xff0c 我新开发一插件 xff0c 在svn
  • 1.1 海思3518E视频编解码的一些概念

    目录 1 1 1 前言1 1 2 视频编解码的基本概念了解 1 1 1 前言 这是我第一次写博客 xff0c 我写博客的目的是为了记录我的学习笔记 xff0c 同时也是想把我的学习记录分享出来 xff0c 供参考学习 这个学习笔记是关于海思
  • Git 客户端 - 可视化工具 Fork 使用

    Fork 是什么 当我们在多人协同开发项目的过程中 xff0c Git 是必不可少的代码托管工具 xff0c 但是繁琐的操作命令 抽象的文件状态 xff0c 多个不同分支需要花费大量的时间进行分配管理与维护 xff0c 至此 Fork 拥有
  • STM32串口外设是否需要加上拉电阻?

    STM32F103串口TX一般设置为GPIO Mode AF PP xff08 复用推挽输出 xff09 xff1b RX一般设置为RX一般设置为GPIO Mode IN FLOATING 模拟输入 xff1b 如图所示 xff0c STM
  • Windows11升级踩坑过程与镜像下载地址汇总

    第一天开始写博客 xff0c 之前一直想写但是各种原因没有开始 xff0c 今天折腾了一天升级完了windows11 xff0c 想分享一下过程和踩的坑 xff0c 也算是给自己一个开始的契机 xff0c 有些东西重新配置的时候看自己的博客
  • STM32CubeMx使用教程(六)—— OLED屏使用

    前言 在前面一章中 xff0c 学习了 串口通信以及定时器 xff0c 本章节中将介绍I2C通信 xff0c 使用 I2C 通信方式点亮 OLED 模块 由于 OLED 模块支持多种通信方式 xff0c OLED 模块的 I2C 通信过程主
  • Intel RealSense D435i深度相机通过点云获取图片中任意点三维信息(python实现)

    引用基础包 import pyrealsense2 as rs import numpy as np import cv2 import os import time 声明了个类 xff0c 以后也许会添加重置旋转等操作 xff0c 目前只
  • 闭包的实现

    概念 xff1a 闭包是指一个函数嵌套另一个函数另一个函数可以访问当前这个函数的局部变量 xff0c 闭包是将函数内部和函数外部连接起来的桥梁 闭包的作用 xff1a 缓存数据 xff0c 延长作用域 优点 xff1a 缓存数据 xff0c
  • 无人机高清远程直播+4G/5G智能多网路由系统

    无人机高清远程直播 43 4G 5G智能多网路由系统 交通拥堵问题一直是困扰交警的首要难题 它所带来的时间浪费 运营成本上升 交通事故 空气污染 噪声污染等问题使得交通拥堵成为制约城市经济和社会发展的 瓶颈 尤其是交通早高峰时段 xff0c
  • 无人机电网线路巡检有哪些优势?分享高效的图像实时回传解决方案

    随着科技的高速发展 xff0c 相关数据和图像资料表明 xff0c 在观察输电线路设备运行情况时 xff0c 无人机技术可以起到相当关键的作用 xff0c 大大减轻了电力员工的作业负担 通过无人机电力巡检 xff0c 可以清楚判断重要部件是
  • Mac软件推荐:NoMachine轻松带你远程控制桌面

    使用NoMachine for Mac与你的设备建立远程桌面连接后 xff0c 通过网络远程桌面就能快速访问你的设备 xff0c 方便快捷 xff0c 安全可靠 xff0c nomachine mac版的功能强大 xff0c 而且还是免费软
  • lodash源码

    function var undefined var VERSION 61 4 17 21 var LARGE ARRAY SIZE 61 200 var CORE ERROR TEXT 61 Unsupported core js use
  • mac系统如何安装nacos

    一 xff1a 安装步骤 1 先到nacos官网 http nacos io zh cn 2 点击前往Github xff08 进去下拉文档 xff0c 找到 latest stable release 点进去 xff09 3 点击下载zi
  • 使用Idea启动Nacos

    通过Edit Configurations进行配置 点击加号 xff0c 并且选择Shell Script 配置参数 xff1a Script path Mac系统的为bin目录 43 startup sh Windows系统为bin目录
  • BoundValueOps(RedisTemplate常用集合)

    目录 boundValueOps Key Value BoundValueOperations set V value get set V value long timeout TimeUnit unit getAndSet V value
  • macOS安装RabbitMQ

    Homebrew 是 MacOS 的一个流行的软件包管理器 可从 Homebrew 的仓库中安装RabbitMQ 首先 xff0c 确保你已经安装了Homebrew 在终端上 xff0c 运行 brew version 1 安装 用以下方法
  • Virtualbox加载虚拟机镜像

    启动虚拟机 打开这个文件夹 双击蓝色图标 会自动开启virtualbox虚拟机 并加载当前镜像 必须保证当前镜像文件所在全部路径都没有中文 建议启动Virtualbox时使用单击右键 gt 管理员方式运行 配置镜像参数 选中镜像 点击设置
  • Docker基础命令

    目录 Docker命令格式 images命令 search命令 pull命令 rmi命令 run命令 ps命令 stop rm命令 启动redis 关闭防火墙 Docker命令格式 Docker命令的语法结构 docker 子命令 选项 d
  • MySQL数据库的应用

    数据库常见术语 DB Database 数据库DBMS Database Management System xff1a 数据库管理系统SQL Structured Query Language xff1a 结构化的查询语言 数据库的设计