【总结】MySQL1

2023-11-18

MySQL

1. 关系型数据库

1.1 特点

  • 理论基础:关系代数(集合论、一阶逻辑、关系运算)
  • 具体表象:用二维表装数据
    • 表 - table / entity - relation
    • 列 - column / field - attribute
    • 行 - row / record - tuple
    • 列的数量 - degree
    • 行的数量 - cardinality
    • 主键 - primary key
    • 外键 - foreign key
  • 编程语⾔:结构化查询语⾔(SQL)。
    • DDL:数据定义语⾔
    • DML:数据操作语⾔
    • DCL:数据控制语⾔
    • TCL:事务控制语⾔

1.2 SQL

  • DDL(数据定义语言)

    • create / drop / alter

    • create database / drop database

    • create table / drop table / alter table

    • add column / drop column

    • modify column / change column

    • add constraint / drop constraint

    • primary key

    • foreign key

    • check

    • unique

    • rename to

  • DML(数据操作语言)

    • insert / delete / update / select
  • DCL(数据控制语言)-

    • grant to / revoke from

2. MySQL

2.1 基本命令

1)查看所有数据库

  • show databases;

2)查看所有字符集

  • show character set;

3)查看所有的排序规则

  • show collation;

4)查看所有的引擎

  • show engines;

5)查看所有⽇志⽂件

  • show binary logs;

6)查看数据库下所有表

  • show tables;

7) 帮助

  • help ‘xxx’;(? show )

8)使用表

  • ~ use xxx;

9)查看表结构

  • ~ desc xxx;

2.2 MySQL数据类型

1)整数

  • int / integer - 4字节
  • tinyint - 1字节 --> -128 ~ 127
  • smallint - 2字节 --> -32768 ~ 32767
  • mediumint - 3字节
  • bigint - 8字节
  • unsigned / zerofill
  • int unsigned —> 0 ~ 2^32-1
  • bigint unsigned —> 0 ~ 2^64-1
  • int(4) zerofill —> 0010

2)小数

  • float

  • double / double precision

  • decimal / numeric

    decimal(10, 2) —> 保留两位小时

3)布尔类型

  • boolean —> tinyint(1) —> 1 / 0

4)字符串

  • 不可变char(255) / character
  • 可变varchar(16383) / character varying

例如:char(1) / varchar(1)的区别

char(1)只占一个字节,varchar(1)占两个字节,结束后面会有一个\0

5)字节串

  • binary
  • varbinary / binary varying

6)日期时间

  • date:年月日
  • time:具体时间
  • datetime:年月日+具体时间
  • timestamp 时间戳

7)其他:

  • longblob --> blob --> binary large object
  • longtext --> clob --> character large object
  • json
  • enum / set

2.3 表关系

1)一对一

例如:公民和身份证

2)多对一 / 一对多

学生和班级:一个学生只有一个班级,一个班级可以有多个学生

3)多对多

学生和课程:一个学生可以选多门课,一门课有多个学生

  • 修改表关系
    • 多对一关系在多的一边添加外键列
    • 多对多通过中间表转换成两个多对一
    • 一对一关系是多对一关系的特例
-- 如果存在名为hrs的数据库就删除他
drop database if exists hrs;
-- 创建并指定默认字符集
create database hrs default charset utf8mb4;

-- 切换数据库
use hrs;

-- 创建部门表
-- commit后也是注释
create table tb_dept
(
dno integer not null comment '部门编号',
dname varchar(20) not null comment '部门名称',
dloc varchar(10) not null comment '部门所在地',
primary key (dno)
) engine innodb comment '部门表';

-- 创建员工表
create table tb_emp
(
eno integer not null comment '员工工号',
ename varchar(20) not null comment '员工姓名',
egend char(2) default '男' not null comment '性别',
 -- esex enum('男', '女'), 枚举
epos varchar(10) not null comment '职位',
edate date not null comment '出生日期',
primary key (eno)
) engine innodb comment '员工表';

-- 修改表添加一个salary列
alter table tb_emp add column salary decimal(10, 2) not null;

-- 删除名为epos的列
alter table tb_emp drop column epos;

-- 修改表修改egend列的数据类型
alter table tb_emp modify column egend boolean default 1 not null;

-- 修改表修改egend列的名字和数据类型
alter table tb_emp change column egend  gender char(1) default '男' not null;

-- 修改表添加一个约束限制gender字段只能取‘男’或者‘女’
-- 可以在check 前添加约束名ck_emp_gender 
alter table tb_emp add constraint check (gender in ('男', '女'));

-- 修改表添加一个检查约束edate字段要大于等于1960-1-1
alter table tb_emp add constraint ck_emp_edate check (edate >= '1960-1-1');

-- 删除表约束的约束条件
alter table tb_emp drop constraint ck_emp_edate;

-- 修改表名
alter table tb_dept rename to departments;
alter table tb_emp rename to employees;

-- -------------------------- 一对多 ---------------------------------
-- 建立多对一关系
-- 修改员工表添加一个维持员工和部门多对一关系的列dno
alter table employees add column dno integer not null;

-- 修改员工表添加一个外键约束限制员工表的dno参照部门表的dno
alter table employees add constraint fk_employees_dno 
foreign key (dno) references departments (dno);

-- -------------------------- 一对一 ---------------------------------

-- 建立一对一关系实例
create table tb_person
(
person_id integer not null,
person_name varchar(20) not null,
primary key (person_id)
);

create table tb_idcard
(
card_id char(18) not null,
police_station varchar(50) not null,
expire_date date not null,
person_id integer not null,
primary key (card_id)
);

-- 外键约束变成多对一
alter table tb_idcard add constraint fk_tb_idcard_person_id
foreign key (person_id) references tb_person (person_id);

-- 唯一约束变成一对一
alter table tb_idcard add constraint fk_tb_idcard_person_id
unique (person_id);
desc tb_idcard;

-- -------------------------- 多对多 ---------------------------------

create table tb_user
(
user_id integer not null comment '用户ID',
user_name varchar(50) not null comment '用户名',
user_birth date not null comment '出生日期',
user_level integer not null comment '用户等级',
primary key (user_id)
);

create table tb_bike
(
bike_id integer not null comment '自行车ID',
bike_status integer not null comment '状态',
online_date date not null comment '上线日期',
primary key (bike_id)
);

-- 创建用户使用共享单车记录表(维持用户和共享单车多对多关系中间表)
create table tb_record
(
record_id bigint not null auto_increment comment '流水号',
user_id integer not null,
bike_id integer not null,
start_time datetime not null,
end_time datetime,
pay_way integer,
payment decimal(10,2),
primary key (record_id),
constraint fk_record_user_id foreign key (user_id) references tb_user (user_id),
constraint fk_record_bike_id foreign key (bike_id) references tb_bike (bike_id),
constraint fk_record_start_end check (end_time > start_time)
);
desc tb_record;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【总结】MySQL1 的相关文章

  • PDO::debugDumpParams 的输出是否有最大值?

    使用 PDO debugDumpParams 时 对于 选定 查询 输出显示的字符数是否有最大限制 大约 500 个字符后 查询将在查询中间结束 而在输出准备 query 变量时 将显示完整的查询 此外 当删除查询的某些部分时 它仍然显示一
  • WAMP/MySQL 错误语言不正确

    我已经多次重新安装WAMP 搜索了数百页 但仍未解决此问题 我查看了 phpmyadmin 配置文件 设置 cfg Lang en utf 8 卸载了多次 如上所述 似乎没有运气 任何帮助 将不胜感激 要更改 MySQL 在报告时使用的语言
  • 绕过外键约束强制删除mysql

    我试图从数据库中删除除一个表之外的所有表 最终出现以下错误 无法删除或更新父行 外键约束失败 当然 我可以反复试验来看看这些关键约束是什么 并最终删除所有表 但我想知道是否有一种快速方法来强制删除所有表 因为我将能够重新插入那些我想要的表
  • 连接错误 - SQLSTATE[HY000] [2002] 操作超时

    我在从 Windows 2008 R2 应用程序服务器连接到也在 Windows 2008 R2 上运行的 MySQL 服务器时遇到问题 Laravel 应用程序报告错误 exception PDOException with messag
  • 如何正确转义 mysql“搜索/喜欢”查询?

    Summary 我目前正在使用 search field LIKE this gt db gt escape like str search string 逃避动态创建的搜索查询 创建的 SQL 语句结果不会产生任何错误 也不会产生任何结果
  • 如何将 PHP 会话数据保存到数据库而不是文件系统中?

    我有两个网站 一个是 TLS 一个不是 两个都适用于同一个客户端 但我需要这些网站彼此 并且仅彼此 共享通用数据users orders accounts etc 这通常可以通过以下方式完成 SESSION数据 但我显然这些不能跨其他站点工
  • 根据长文本存储的 json 中的特定值提取密钥

    我有一列存储用户属性的值 列类型是长文本 例如 1 1 15607 1 1345 2 我只想提取值为 1 的键 这意味着我应该得到 1 和 15607 我尝试使用 json search json search cast attribute
  • 从 MySQL 列创建 PHP 数组

    mysql fetch array会给我一个获取行的数组 从一列中所有行的值生成数组的最佳方法是什么 您可以循环遍历数组并创建一个新数组 如下所示 column array while row mysql fetch array info
  • 'SQLSTATE[HY093]:参数数量无效:绑定变量的数量与令牌数量不匹配'[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我收到 SQLSTATE HY093 的错误 参数编号无效 绑定变量的数量与标记的数量不匹配 if isset POST cada
  • 如何在 MySQL 查询编辑器中对列重新排序?

    我想移动专栏OtherSupport below Amount2 是否有捷径可寻 ALTER TABLE myTable MODIFY OtherSupport VARCHAR 50 AFTER Amount2
  • 如何向 MySQL 中的 ENUM 类型列添加更多成员?

    MySQL 参考手册没有提供关于如何执行此操作的明确示例 我有一个 ENUM 类型的国家 地区名称列 我需要向其中添加更多国家 地区 实现此目的的正确 MySQL 语法是什么 这是我的尝试 ALTER TABLE carmake CHANG
  • 通过日期选择器过滤查询后检索具有特定值的行数[重复]

    这个问题在这里已经有答案了 目前 我正在使用 CodeIgniter 来检索特定时间范围内的数据 所有这些条目都有一个状态 我想将具有相同状态的所有条目分组并将其显示在各自的标题中 目前 这是我的模型类 其中我有以下条目来返回特定日期范围内
  • Laravel 雄辩的 withCount() 应该比 with() 慢

    所以我问这个的原因是在我当前的应用程序中withCount 与仅通过以下方式获取关系的所有数据相比 响应时间几乎增加了三倍with 并只是从前端获取长度 javascript 我认为使用的要点withCount 是为了加快查询速度 但也许我
  • 如何在 MySQL 中使用 INET_ATON 进行通配符搜索 IP 地址?

    我发现这个方法可以使用 INET ATON 将 IP 地址作为整数存储在 MySQL 数据库中 https stackoverflow com a 5133610 4491952 https stackoverflow com a 5133
  • 使用python中的mysql连接器正确从mysql数据库获取blob

    当执行以下代码时 import mysql connector connection mysql connector connect connection params here cursor connection cursor curso
  • 按组内顺序排序

    order by 在第二个查询中不起作用 我需要先按 DNAID 订购 然后按 DNBID 订购 首先查询其顺序为 111221 第二个查询的顺序为 112112 有关我想要完成的任务的更多信息和细节https stackoverflow
  • 将mysql表限制为一定大小并自动删除最旧的条目[重复]

    这个问题在这里已经有答案了 可能的重复 如何设置MySQL表的最大行数 https stackoverflow com questions 8048001 how can i set a maximum number of rows in
  • 如何在具有动态列的表中插入值 Jdbc/Mysql

    我想在具有动态列的表中添加值 我设法创建一个包含动态列的表 但我不知道如何插入数据 Create Table sql CREATE TABLE MyDB myTable level INTEGER 255 int columnNumber
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • MySQL REPLACE 在自动递增行中

    假设我有一个 MySQL 表 其中包含三列 id a and b和名为id is an AUTO INCREMENT场地 如果我将如下查询传递给 MySQL 它将正常工作 REPLACE INTO table id a b VALUES 1

随机推荐

  • keytool生成BKS格式的私钥跟信任证书

    Andrid生成SSL证书 第一步 为服务器生成证书库 keytool genkey alias roomcastServer keypass 123456 keyalg RSA keysize 1024 validity 36500 ke
  • JS根据时区获取对应时间

    安装插件 luxon yarn add luxon 页面使用 引入DateTime类 import DateTime from luxon let c DateTime fromObject zone 传入时区 zone America L
  • 操作系统9-文件系统,I/O子系统

    大纲 文件系统和文件 文件描述符 目录 文件别名 文件系统种类 虚拟文件系统 文件缓存和打开文件 文件分配 空闲空间管理 I O子系统特点 结构 传输 冗余磁盘阵列RAID 哟西太太太太太激动了 算是真正意义上的第一次完整严谨写了 博客 笔
  • Java StringBuilder类(为什么更高效、常用方法、构造器)

    StringBuilder类 一 引言 二 StringBuilder类特点 三 StringBuilder构造方法 四 StringBuilder常用方法 五 StringBuilder为什么高效率 六 StringBuffer类 一 引
  • android 文件删除命令大全,Android中删除sdcard里文件的命令

    Android中删除sdcard里文件的命令 有时我们需要删除android模拟器或手机上的sd卡文件 特别是模拟器上的 这时我们就需要借助于一些命令来帮助我们删除文件 复制代码 代码如下 重新挂载模拟器 adb remount 开始she
  • fasterxml ToStringSerializerBase报错

    ToStringSerializerBase报错 报错内容 整合dubbo时报错 Caused by java lang NoClassDefFoundError com fasterxml jackson databind ser std
  • 英语姓名

    英语姓名的一般结构为 教名 自取名 姓 如 William Jafferson Clinton 但在很多场合中间名往往略去不写 如 George Bush 而且许多人更喜欢用昵称取代正式教名 如 Bill Clinton 上述教名和中间名又
  • Unity中的单元测试

    我知道的单元测试有两种方法 1 从Unity的AssetStore窗口下载UnityTestTools 已下架了 2 使用TestRuner 2018 2 5以上版本有 我用的是2018 2 7 TestRuner的用法 操作窗口 Wind
  • 堵塞队列之ArrayBlockingQueue和LinkedBlockingQueue解析

    在线程池创建的时候 需要传一个堵塞队列来维护需要执行的线程任务 其中最常用的是ArrayBlockingQueue和LinkedBlockingQueue 他们都继承了BlockingQueue接口 ArrayBlockingQueue 一
  • 交叉熵损失

    什么是交叉熵损失 提起损失 我们最熟悉的可能就是MSE 最小均方误差损失了 MSE通俗理解 就是预测值与真实值之间取个差 再求平方 交叉熵损失也是一种衡量预测值与真实值之间的差异的方式 两者的定义不同 适用的范围也不同 通常来说 交叉熵损失
  • 如何从Python入门机器学习

    学习Python基本语法 首先我在Python官网找到入门教程 快速过了一遍Python的基本语法 相信对于稍微有点编程基础的人来说这都不是事儿 作为实践 接着我用Python实现了一个基于命令行翻译脚本 到此Python算入门了 这里啰嗦
  • 如何用R分析CNKI文献关键词词频?

    疑惑 如何用VOSviewer分析CNKI数据 一文发布后 有同学问我 王老师 我有个问题 我用cnki导出关键词后 想统计关键词的词频 我应该用什么样的工具 如果不利用citespace和python 做出excel那种的统计表格 该怎么
  • 操作系统笔记整理8——虚拟存储器

    点此链接可跳转到 操作系统笔记整理 目录索引页 参考书籍 计算机操作系统 第四版 汤小丹等编著 文章目录 点此链接可跳转到 操作系统笔记整理 目录索引页 虚拟存储器概述 请求分页存储管理方式 请求页表机制 地址变换 物理块的分配策略 例题
  • Sqli-labs之Less-28和Less-28a

    Less 28 基于错误的 单引号字符型 过滤了union和select等的注入 判断注入类型 1和1 正常回显 1 报错 单引号字符型 2 26 26 1 1回显为id 1 有小括号 参看源码 发现没有过滤or与and 过滤了相连的uni
  • vuforia for unity 入门教程

    一 配置vuforia环境 与 运行简单AR程序 1 安装unity2017 1 从官网上下载unity2017下载器 2 运行下载器勾选上vuforiasupport选项 其余不变 点击开始安装 2 创建AR项目与配置AR运行环境 1 打
  • KITTI数据集介绍

    KITTI数据集 7481 training images and point clouds and 7518 test images and point clouds 采集平台 1惯性导航系统 GPS IMU OXTS RT 3003 1
  • Python基础教程(入门教程),30分钟玩转Python编程!

    这是一篇针对初学者的 Python 基础教程 只要你认真阅读 花费 30 分钟即可快速了解 Python 这篇 Python 入门教程讲解的知识点包括 Python 编程环境的搭建 Python 基本操作入门 Python 数据类型 Pyt
  • bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算

    bit Byte bps Bps pps Gbps的单位详细说明及换算 bit 电脑记忆体中最小的单位 在二进位电脑系统中 每一bit 可以代表0 或 1 的数位讯号 Byte 字节单位 一般表示存储介质大小的单位 一个B 常用大写的B来表
  • 为什么uzi排到古手羽就秒_为什么uzi排到古手羽就秒退看一下直播间里的弹幕就清楚了!...

    为什么uzi排到古手羽就秒退 看一下直播间里的弹幕就清楚了 百度APP游戏年度票选活动 前言 12月24号英雄联盟电竞圈快讯 12月份的电竞圈显得有点冷清 不过龙百万仍然会带来每天的精彩快讯 和召唤师们聊聊天 谈谈心 刚出道就遭受巨大压力的
  • 【总结】MySQL1

    MySQL 1 关系型数据库 1 1 特点 理论基础 关系代数 集合论 一阶逻辑 关系运算 具体表象 用二维表装数据 表 table entity relation 列 column field attribute 行 row record