MySQL数据管理

2023-10-27

一、外键的创建

方法1、在创建表的时候,增加约束,这个方法比较复杂麻烦

CREATE TABLE `grade`(
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的gradeid字段要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用)
CREATE TABLE IF NOT EXISTS `student`(
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `gradeid` INT(10) NOT NULL COMMENT '学生的年级',
  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY(`id`),
  KEY `FK_gradeid` (`gradeid`),
  CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

方法2、创建表成功后添加外键约束

CREATE TABLE `grade`(
  `gradeid` INT(10) NOT NULL AUTO_INCREMENT COMMENT '年级id',
  `gradename` VARCHAR(50) NOT NULL COMMENT '年级名称',
  PRIMARY KEY(`gradeid`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 学生表的gradeid字段要去引用年级表的gradeid
-- 定义外键key
-- 给这个外键添加约束(执行引用)
CREATE TABLE IF NOT EXISTS `student`(
  `id` INT(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
  `name` VARCHAR(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
  `pwd` VARCHAR(20) NOT NULL DEFAULT '123456' COMMENT '密码',
  `sex` VARCHAR(2) NOT NULL DEFAULT '女' COMMENT '性别',
  `birthday` DATETIME DEFAULT NULL COMMENT '出生日期',
  `gradeid` INT(10) NOT NULL COMMENT '学生的年级',
  `address` VARCHAR(100) DEFAULT NULL COMMENT '家庭住址',
  `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
  PRIMARY KEY(`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8

-- 创建表的时候没有外键关系
ALTER TABLE `student`
ADD CONSTRAINT `FK_gradeid` FOREIGN KEY(`gradeid`) REFERENCES `grade`(`gradeid`);

-- ALTER TABLE 表名 ADD CONSTRAINT 约束名 FOREIGN KEY(作为外键的列)REFERENCES 表名(字段名)

以上的操作都是物理外键,数据库级别的外键,我们不建议使用。(避免数据库过多造成困扰)

1、数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)

2、我们想使用多张表的数据,想使用外键,使用程序去实现

二、DML语言(数据操作语言)

1、插入insert

-- 插入语句(添加)
-- insert into 表名([字段1][字段2][字段3])values('值1'),('值2'),('值3')
-- 在写插入语句时要注意数据和字段一一对应
-- 由于主键id是自增的,所以可以不插入数据 自动从1开始自增
INSERT INTO `grade`(`gradename`)VALUES('大四')
-- 插入多个数据
INSERT INTO `grade`(`gradename`)VALUES('大二'),('大三')


INSERT INTO `student`(`name`)VALUES('张三');
INSERT INTO `student`(`name`,`pwd`,`sex`)VALUES('张三','aaaaaa','男');
INSERT INTO `student`(`name`,`pwd`,`sex`)
VALUES('小明','bbbbbb','男'),('小罗','hhhhhh','女')

INSERT INTO `student`
VALUE(10,'李四','dsfvsd','男','2000-01-02',1,'赣州','220999@qq.com')

语法:insert into 表名([字段1][字段2][字段3])values('值1'),('值2'),('值3')

注意事项

1、字段和字段之间使用英文逗号隔开

2、字段是可以省略的,但是后面的值必须要一一对应

3、可以同时插入多条数据,values后面的值需要使用逗号隔开  VALUES(),(),....

2、修改update

-- 修改学生的名字
UPDATE `student` SET `name`='小廖' WHERE id=7

UPDATE `student` SET `name`='小廖' WHERE id BETWEEN 2 AND 5

-- 不指定条件会修改所有的表的内容

UPDATE `student` SET `name`='小廖'

-- 修改多个属性
UPDATE `student` SET `name`='小廖',`email`='2543@qq.com' WHERE id=7

-- 通过多个条件定位数据
UPDATE `student` SET `name`='小罗' WHERE `name`='小廖' AND `sex`='女'
-- 值也可以是一个函数或者一个变量
UPDATE `student` SET `birthday`=CURRENT_TIME WHERE `name`='小廖' AND `sex`='女'

-- 语法
UPDATE 表名 SET 字段名=VALUE,字段名=VALUE ... WHERE 条件

条件:where子句 运算符 id等于某个值,大于某个值,在某个区间内修改···

操作符会返回 布尔值

操作符 含义 范围 结果
<>或!= 不等于 5<>6 true
between...and... 在某个范围内 [2,5]

AND

OR

&&

||

5>1and1>2

5>1 or 1>2

false

true

3、删除delete

语法:delete from 表名 where 条件

-- 删除数据
-- 不写条件会删除全部数据 
DELETE FROM `student`

-- 清空一张表  TRUNCATE命令完全清空一个数据库表,表的结构和索引约束不会变
TRUNCATE `student`
-- 正确写法应该是增加一定的条件
DELETE FROM `student` WHERE `id`=3



-- 测试delete和truncate区别

CREATE TABLE `test`(
`id` INT(4) NOT NULL AUTO_INCREMENT,
`coll` VARCHAR(20) NOT NULL,
PRIMARY KEY(`id`)

)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO `test`(`coll`) VALUES('1'),('2'),('3')

DELETE FROM `test` -- 不会影响自增 删除之后再插入id从4开始

TRUNCATE TABLE `test`  --  删除之后再插入id从1开始

delete和truncate区别

相同点:都能删除数据,都不会删除表的结构

不同:

truncate重新设置 自增列 计数器会归零

truncate不会影响事务

delete删除的问题,重启数据库之后

InnoDB 自增列会从1开始(存在内存当中,断电即丢失)

MyISAM 继续从上一个自增量开始(存在文件中的,不会丢失)

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

MySQL数据管理 的相关文章

  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 使用 LINQ 将 DataTable 列中的值读入 List

    我有一个DataTable服务返回给我的包含 5 列的对象 我只对其中一栏感兴趣 FuncName列 并希望我的实用程序方法调用该服务来删除额外的信息并仅返回一个List
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • Mysql 时间匹配连接

    我有两个表cpuinfo和jobinfo 我想使用这两种数据创建报告 tabes CREATE TABLE cpuinfo id int 11 NOT NULL AUTO INCREMENT usagetime datetime DEFAU
  • MySQL:计算日期/时间之间的差异 - 仅在周一至周五“工作周”期间

    我需要计算开始日期 时间和结束日期 时间之间的差异 但是 我只想在 5 天的工作周内执行此操作 不包括周六 周日 做这个的最好方式是什么 我的想法是 从日期开始 我必须获取星期几 如果是工作日 那么我将添加到累加器中 如果不是 那么我不会添
  • MySql - 复制监控工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个主 从 MySql 复制 我正在寻找一个允许我监视复制的工具 查看它没有错误 检查滞后等 我更喜
  • 从另一台计算机访问 MYSQL

    我想开发一个java桌面应用程序 我想在其中设置服务器 这意味着我在这里使用mysql db 该数据库将仅存储在一台电脑上 其余所有用户都可以访问该数据库 所以 我听说了mysql远程连接 其中尝试了一些事情 这些措施如下 我的电脑已连接w
  • 合并两个 MYSQL SELECT 查询[重复]

    这个问题在这里已经有答案了 可能的重复 如何将两个 Post Category 表 MYSQL SELECT 查询合并为一个 https stackoverflow com questions 12972130 how to combine
  • 只获取倒数第二条记录 - mysql-query

    我有一个如下表记录 my table id rating description 1 0 0 bed 2 1 0 good 3 0 0 bed 4 1 0 good 5 0 0 bed 6 0 0 bed 7 0 0 bed 现在我通过评级
  • SQL Join 列上类似于另一列[重复]

    这个问题在这里已经有答案了 可能的重复 mysql连接查询使用like https stackoverflow com questions 1930809 mysql join query using like 我想要进行连接 其中一列包含
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 无法在 Mac 上启动 MySQL

    使用 Brew 安装后 我无法运行 MySQL 我使用的是 OS X El Capitan 版本 10 11 3 和 MySQL Server 版本 5 7 11 当我启动服务器时 我收到 启动 MySQL 错误 服务器退出而不更新 PID
  • 错误代码:1305。函数或过程不存在

    因此 我在 MySQL 中创建一个函数 然后尝试向用户授予使用该函数的权限 但我无法这样做 这就是我正在做的 DELIMITER USE rxhelp36 scbn DROP FUNCTION IF EXISTS businessDayDi
  • 慢速自动增量重置

    我有很多表 由于某些原因 我需要在应用程序启动时调整这些表的自动增量值 我尝试这样做 mysql gt select max id from item max id 97972232 1 row in set 0 05 sec mysql
  • MySQL中如何声明变量?

    如何在mysql中声明一个变量 以便我的第二个查询可以使用它 我想写一些类似的东西 SET start 1 SET finish 10 SELECT FROM places WHERE place BETWEEN start AND fin
  • 无法通过 LINQ to Entities 使用某些功能?

    我正在尝试使用 LINQ 查询在项目上实现搜索功能 由于数据有时包含带有重音符号和其他符号的字符 因此我创建了一种方法来删除这些字符以进行搜索 这是我的代码 var addresses from a in db Addresses join
  • 让登录更安全

    我已使用此代码进行管理员登录 仅当用户输入正确的用户名和密码时才应打开loginhome php 但后来我意识到这根本不安全 任何人都可以直接访问 mywebsite loginhome php 而无需登录 注销后 可以使用后退按钮打开 l
  • ORDER BY 字段内的 MySQL 子查询。 (没有内连接)

    有很多与此相关的问题 但都具有使用内部联接的相同答案 这 我认为 在这里是不可能的 如果我错了请告诉我 我现在正在做的是调用两个不同的 mysql 查询来获取结果 它工作完美 db gt query SELECT FROM meta WHE

随机推荐

  • LSTM神经网络详解

    LSTM 长短时记忆网络 Long Short Term Memory Network LSTM 是一种改进之后的循环神经网络 可以解决RNN无法处理长距离的依赖的问题 目前比较流行 长短时记忆网络的思路 原始 RNN 的隐藏层只有一个状态
  • Java学习笔记(02_1Java语言基础)

    知识点总结于毕向东Java基础视频教程25天版本 侵权请联系删除 第二章 Java语言基础 Java语言基础组成 关键字 标识符 注释 常量与变量 常量 变量 类型转换 运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三元
  • ajax后台返回的数据为空前台显示出现undefined的解决方法

    之前自己做的一个图书管理系统 显示图书借阅排行榜 因为翻译在数据库中有为空的字段 故前台显示会显示undefined 以下贴上部门代码 document ready function rankTable tbody html var id
  • chromium源码的下载与编译

    这篇文章主要记录在chromium源码下载以及编译过程中遇到的问题 一直都对chromium的源码感兴趣 在没有封闭外网之前 下载了一个版本 很老了 重新进行更新又不得行 再加上公司的产品线路需要了解chromium的相关知识 又加上疫情封
  • Ctfshow web入门 PHP特性篇 web89-web151 全

    web入门 PHP特性篇的wp都一把梭哈在这里啦 有点多 师傅们可以收藏下来慢慢看 写的应该挺全面的叭 有错误敬请斧正 CTFshow PHP web89 看题目 有个flag php文件 题目要求get有个num 是数字但是不包含0 9
  • 吴恩达深度学习笔记-单层神经网络(第2课)

    深度学习笔记 1 神经网络概览 2 神经网络表示 3 计算神经网络的输出 4 多个样本的向量化 5 向量化实现的解释 6 激活函数 7 为什么需要非线性激活函数 8 激活函数的导数 9 神经网络的梯度下降法 10 直观理解反向传播 11 随
  • SQL-万能密码

    打开目标站点 随便输入用户名密码 查看返回结果 提示错误 后台管理http 10 225 91 25 知识点 这题需要用到万能密码 首先了解一下万能密码 一般的 库验证登录注册查询数据会用到以下的句型 如果用户名与密码匹配正确则返回真值通过
  • Webpack配置

    Webpack 文章目录 Webpack 一 Webpack的基本功能 二 Webpack的核心概念 三 Webpack常用的Loader 四 Webpack常见的Plugins 五 Loader和Plugin的区别 以及如何自定义Load
  • Ehcache是现在最流行的纯Java开源缓存框架

    Ehcache是现在最流行的纯Java开源缓存框架 配置简单 结构清晰 功能强大 最初知道它 是从Hibernate的缓存开始的 网上中文的EhCache材料以简单介绍和配置方法居多 如果你有这方面的问题 请自行google 对于API 官
  • java枚举和数值的相互转换

    枚举简介 enum 的全称为 enumeration 是 JDK 1 5 中引入的新特性 存放在 java lang 包中 在实际编程中 往往存在着这样的 数据集 它们的数值在程序中是稳定的 而且 数据集 中的元素是有限的 此时枚举可以很方
  • BH1750 光照传感器文档详解 及 驱动设计

    前言 最近接触到一个应用 需要在低功耗的产品上加上光照度采集 正好最近有接触到一款光照传感器 BH1750 性能价格都合适 那么今天就抽空来好好测试一下 那么要写一篇测试文章 我会尽量以新手的角度从资料的获取 资料的阅读理解 以及根据资料进
  • Linux网络编程(7)本地套接字通信

    TCP本地套接字通信 为了实现没有血缘关系的进程之间通信 通常会采用本地套接字进行通信 在两个进程分别绑定好了套接字文件 sock 运行程序后将产生两个套接字文件 这两个文件共享同一片内核缓冲区 内核将完成两个进程之间的数据传输 在不同通信
  • 递推方程求解方法

    总结一下递推方程的求解方法 主要介绍六种方法 迭代法 差消法 递归树 主定理 特征根法 母函数法 欢迎大家批评指正 1 迭代法 不断用递推方程的右部替换左部 下面以汉诺塔为例进行求解 有时候直接迭代可能不太方便 可以使用换元迭代 下面以二分
  • Nginx 安全配置

    Nginx 是一个高性能的 HTTP 和反向代理服务 使用非常广泛 目前很大一部分网站均使用了 Nginx 作为 WEB 服务器 Nginx 虽然非常强大 但是安全防护的配置及恶意访问默认是没用做基础配置的 一 nginx 版本信息隐藏 s
  • STM32学习记录——使用蓝牙点亮LED

    文章目录 前言 一 学习目的 二 模块介绍 三 代码记录 四 实际操作 前言 今天记录一个蓝牙模块的简单应用 有关蓝牙的AT指令模式的设置在前面的记录中已经详细记录过 如果忘记了可以看看下面的文章 HC 05蓝牙模块的使用 KAIs32的博
  • 所有的raft算法

    https raft github io
  • 【java.lang.ref】PhantomReference & jdk.internal.ref.Cleaner

    目录 零 前情概要 ref包内容 系列目录 上一章回顾 一 PhantomReference 适用场景 优雅和提前规避 Java中使用native memory 常规做法 借助于Java引用机制 处理流程 二 jdk internal re
  • KETTLE 异常处理

    kettle未能正常执行任务时 同样需要记录下来执行操作 以便分析任务异常 红色线条代表任务异常时执行的任务 绿色为正常执行的任务序列 任务执行时都有日志记录 但kettle日志表中字段存在执行时间 但不存在业务日期字段 比如今天的任务执行
  • 第11节-PhotoShop基础课程-索套工具

    文章目录 前言 1 索套工具 选中后按Ctrl 可以移动 2 加 减 交叉 shift alt 2 多边形索套工具 手动首尾相连 或者双击空地 1 单击绘制直线选区 2 双击结束绘制 3 加 减 交叉 4 delete可以删除节点 3 磁性
  • MySQL数据管理

    一 外键的创建 方法1 在创建表的时候 增加约束 这个方法比较复杂麻烦 CREATE TABLE grade gradeid INT 10 NOT NULL AUTO INCREMENT COMMENT 年级id gradename VAR