Mysql(三)---增删查改(基础)

文章目录

  • 前言
  • 1.补充
    • 1.修改表名
    • 1.2.修改列名
    • 1.3.修改列类型
    • 1.4.增加新列
    • 1.5.删除指定列
  • 2.CRUD
  • 3.新增(Create)
    • 3.1.单行插入
    • 3.2.指定列插入
    • 3.3.多行插入
  • 4.数据库的约束
    • 4.1.约束的分类
    • 4.2.NULL约束
    • 4.3.Unique约束
    • 4.4.Default 默认值约束
    • 4.5.PRIMARY KEY:主键约束
    • 4.6.FOREIGN KEY 外键约束


前言

上一篇我们学习了数据库的基础操作,这一篇我们学习数据库的增删改查等一系列操作


1.补充

首先要对上一篇表的操作,在进行一次扩充—修改表

1.修改表名

语法:

ALTER TABLE 旧表名 RENAME 新表名;

例如
创造一个student的表

create table student(
	id bigint,
	name varchar(50)
);

然后在把student表名改为stu;

alter table student rename stu;

1.2.修改列名

ALTER TABLE 表名 CHANGE COLUMN 旧列名 新列名 类型;

例如把stu表中的id字段改为stu_id

alter table stu change column id  stu_id bigint;

在这里插入图片描述

1.3.修改列类型

ALTER TABLE 表名 MODIFY 列名 新类型;

例如把stu的stu_id类型改写成int

alter table stu modify stu_id int;

在这里插入图片描述

1.4.增加新列

语法

ALTER TABLE 表名 ADD COLUMN 新列名 类型;

例如:把stu表中添加分数这一列

alter table stu add column score int;

在这里插入图片描述

1.5.删除指定列

ALTER TABLE 表名 DROP COLUMN 列名;

例如,把stu表中的score成绩删除

alter table stu drop column score;

在这里插入图片描述


2.CRUD

注释:在SQL中可以使用“–空格+描述”来表示注释说明
CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写


3.新增(Create)

语法

INSERT [INTO] table_name
[(column [, column] ...)]
VALUES (value_list) [, (value_list)] ...
value_list: value, [, value]...

3.1.单行插入

语法

insert into  表名[(字段1,字段2)] values (,);

或者

insert into 表名 values (,,...);

例如:
首先在test中建立student表,包含id和name字段
然后插入(1,‘张三’);

insert into student(id,name) values(1,"张三");

在这里插入图片描述
其中

select * from student;

属于查询语句,下一篇博客再讲,大家可以用这个先去查询表名中所有的信息

如果一不小心,字段名和值没有用一一对应的话
在这里插入图片描述
例如再插入一条数据(2,“李四”)

insert into student values(2,'李四');

在这里插入图片描述

3.2.指定列插入

语法:

insert into 表名(字段) values();

例如:
在student中加入一条数据,王五,没有编号

insert into student(name) values('王五');

在这里插入图片描述

3.3.多行插入

insert into 表名 [(指定列...)] values ([,...]) [,([,...])] [,([,...])]...;

例如插入三条数据,分别是小红,小刚,小明,编号分贝为4,5,6

insert into student(id,name) values (4,'小红'),(5,'小刚'),(6,'小明');

在这里插入图片描述
一次插入一条数据和一次插入多条数据那个效率高?
1.执行所有的SQL时都有网络开销
2.写入数据是还会有磁盘IOde开销
3.每执行一条SQL语句都会开启一个事务,事务的开启和关闭都需要消耗系统资源
一次提交多条数据(在一个可控的范围之内),比一次提交提条数据效率高一点点


4.数据库的约束

在上面再添加王五数据的时候,没有添加id编号,造成了用null填充,但是在现实中,再添加王五数据的时候,一定有一个数字来代替id,如何进行操作呢,就要使用约束,进一步限制表的具体内容。

4.1.约束的分类

  • NOT NULL - 指示某列不能存储 NULL 值。
  • UNIQUE - 保证某列的每行必须有唯一的值。
  • DEFAULT - 规定没有给列赋值时的默认值。
  • PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。
  • FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

4.2.NULL约束

NOT NULL - 指示某列不能存储 NULL 值。
在这里插入图片描述
那么我们再创建一个表,把id这一列变成非空约束

create database test1;
use test1;
create table student(
    id bigint not null ,
    name varchar(50)
);

在这里插入图片描述
在这里插入图片描述
此时,我们添加一条数据,王五,id为NULL
在这里插入图片描述

4.3.Unique约束

我们往上面的表中,添加三组数据,小明,小红,小刚,其中编号都为1
在这里插入图片描述
这样的操作会不会出现的,不可能一个编号多个人使用,因此为了这一特性,引用Unique约束

create database test2;
use test2;
create table student(
    id bigint unique,
    name varchar(50)
);

在这里插入图片描述
我们再次插入三组数据,小明,小红,小刚,其中编号都为1
在这里插入图片描述
就不让插入了,
但是如果编号都是NULL呢?
在这里插入图片描述
在这里插入图片描述

4.4.Default 默认值约束

在student中,如果一个学生名字不知道的话,我们使用‘无名氏’来代替。

create database test3;
use test3;
create table student(
    id bigint ,
    name varchar(50) default '无名氏'
);

在这里插入图片描述
我们这会只插入一条数据,只有id,没有姓名

insert into student(id) values(1);

在这里插入图片描述
如果插入的名字为NULL呢?

insert into student(id,name) values(2,NULL);

在这里插入图片描述

4.5.PRIMARY KEY:主键约束

PRIMARY KEY - NOT NULL 和 UNIQUE 的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的一个特定的记录。

在上面,我们发现id这个属性既属于NOT NULL又属于UNIQUE,因此可以使用PRIMARY KEY来代替

我们在创建一个student的表,使得其id为Primary key,sn(学号)以及name

create database test4;
use test4;
create table student(
    id bigint not null unique ,
    sn bigint unique,
    name varchar(50)
);

在这里插入图片描述
分别插入数据,1,1001,张三和NULL,1001,李四

在这里插入图片描述
发生了报错。
主键约束帮我们校验了非空和唯一,这两个校验在写入数据对效率是有一定影响的,但是比起不做校验来说,这个性能消耗还是可以承担的,为以后讲解索引起到作用
当然了,我们不想插入一条数据,就写编号,有什么别的方法,数据库自己生成一个编号,当然可以。

create database test5;
use test5;
create table student(
    id bigint primary key auto_increment,
    sn bigint unique,
    name varchar(50)
);

在这里插入图片描述
首先指定列插入
插入两条数据,1001,小红和1002,小明
在这里插入图片描述
那可不可以指定主键值呢?
可以的,只要主键值不重复
在这里插入图片描述
如果是插入的id为NULL呢?

在这里插入图片描述
继续加一
如果是上一条出错了,然后又插入一条数据,会发生什么现象呢?
在这里插入图片描述
其次还有一个表中只能有1个主键
但是一个主键可以有多个列共同组成(复合主键)

create database test6;
use test6;
create table student(
    id bigint,
    name varchar(50),
    mail varchar(50),
    primary key (id,name)
);

在这里插入图片描述

在这里插入图片描述
有效的解决了双胞胎,重名重姓的问题。

4.6.FOREIGN KEY 外键约束

FOREIGN KEY - 保证一个表中的数据匹配另一个表中的值的参照完整性。

创造两个表,满足下面的照片
在这里插入图片描述
我们发现,这两张表是通过班级编号连接起来的,为此我们引出FOREIGN KEY这一约束
语法:

foreign key (字段名) references 主表(列)

在这里插入图片描述

先设计班级class,在设计学生student

create database test7;
use test7;
create table class(
    id bigint primary key auto_increment,
    name varchar(50)
);
create table student(
    id bigint primary key auto_increment,
    name varchar(50),
    class_id bigint,
    foreign key (class_id) references class(id)
);

在这里插入图片描述
在这里插入图片描述
首先先写入class表中的数据

insert into class(name) values ('金工1班'),('金工2班'),('软工1班'),('软工2班'),('计算机应用与技术1班');

在这里插入图片描述

此时在向student中添加数据

insert into student(name,class_id) values ('张三',1),('李四',1),('小红',2),('小飞',3),('小刚',3);

在这里插入图片描述
插入成功
那么如果在student中插入一条class_id 和 id(class)不匹配的数据,会发生什么现象呢?
在这里插入图片描述
还有一个问题?
能否先删除class里面的数据,再删除student中的数据,
答案是不行的,
在这先把删除操作的代码写一下,下个博客再讲

delete from class where id = 1;

在这里插入图片描述
那么先删除student中的数据,再删除对应class的数据,那么就不会报错,例如
删除小红的数据,再删除对应class的数据

delete from student where name = '小红';
delete from class where id = 2;

在这里插入图片描述


下一篇博客,我们讲解查询,删除和查找操作,我们不见不散!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/870717.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Facebook与区块链:社交网络如何融入去中心化技术

随着区块链技术的飞速发展,去中心化理念逐渐渗透到各个领域,社交网络也不例外。作为全球领先的社交平台,Facebook在这一趋势下开始积极探索区块链技术的潜力,希望利用这一前沿技术来提升平台的安全性、透明度和用户控制权。本文将…

景联文科技:一文详解如何构建高质量SFT数据

在图像处理和计算机视觉领域中,将一张图像转化为可用于训练机器学习模型的数据是一项复杂而重要的任务。SFT(Supervised Fine-Tuning,监督微调)是一种常见的深度学习策略,在这一过程中发挥着核心作用。 SFT是指在一个预…

alibabacloud学习笔记14

阿里云ECS服务器Docker部署Nacos docker拉取镜像 查看容器: 启动docker: 查看启动日志: 阿里云ECSDocker部署Sentinel实战 docker拉取镜像 启动镜像: 查看日志: 记得网络安全组开放端口。 阿里云ECSDocker部署Zipkin实…

tekton什么情况下在Dockerfile中需要用copy

kaniko配置如下 如果docker中的workDir跟tekton中的workDir不一致需要copy。也可以通过mv,cp达到类似效果

vue前端可以完整的显示编辑子级部门,用户管理可以为用户分配角色和部门?

用户和角色是一对多的关系用户和部门是多对多得关系<template><div class="s"><!-- 操作按钮 --><div class="shang"><el-input v-model="searchText" placeholder="请输入搜索关键词" style="width:…

效果炫酷的3D翻转书特效WordPress主题模板MagicBook主题v1.19

正文&#xff1a; MagicBook是一款支持3D翻书特效的书籍WordPress主题。支持可视化页面搭建&#xff0c;3D菜单&#xff0c;完全自适应设计,WPML多语言支持。 这款主题一定会让你爱不释手。虽然他是英文的&#xff0c;但不可不承认的是&#xff0c;它优雅的设计会让你愿意花时…

如何在桌面同时展示多个窗口

一、实现2分屏显示 win箭头 二、实现3分屏显示 1. 在实现2分屏显示的基础上&#xff0c;再次点击箭头图标&#xff0c;这次选择屏幕的上方或下方。 2. 点击后&#xff0c;第三个窗口将会出现在你选择的区域。现在&#xff0c;你可以在三个窗口之间自由切换&#xff0c;提高工…

数值计算引擎:搭建远程容器开发环境

Build VS Code Remote Docker Development Environment 大型CAE软件开发技术栈通常依赖多个第三方库&#xff0c;因此从零开始配置开发、编译、运行等环境通常较为繁琐。但随着公司的发展壮大&#xff0c;却经常需要为新加入的成员配备相应的开发环境&#xff1b;另外&#xf…

手把手教你安装Jupyter Notebook(保姆级教程)

Jupyter Notebook介绍 什么是Jupyter Notebook Jupyter Notebook 是一个基于 Web 的交互式计算环境&#xff0c;支持多种编程语言&#xff0c;包括 Python、R、Julia 等。它的主要功能是将代码、文本、数学方程式、可视化和其他相关元素组合在一起&#xff0c;创建一个动态文…

数字化转型底座-盘古信息IMS OS,可支撑构建MES/WMS/QCS/IoT等工业软件

在当今这个数字化浪潮汹涌的时代&#xff0c;众多企业纷纷踏上数字化转型之路。对于部分想自研工业软件的企业来说&#xff0c;一个强大、灵活且可扩展的数字化底座显得尤为重要。盘古信息IMS OS&#xff0c;&#xff0c;正是这样一款能够支撑构建MES&#xff08;制造执行系统&…

ubuntu server 扩容

环境&#xff1a;VirtualBox、Ubuntu-server 调整虚拟磁盘大小 在 VirtualBox 主界面 工具 -- 介质 中选择你要操作的虚拟磁盘&#xff0c;点击属性&#xff0c;更改大小即可&#xff0c;保存后启动虚拟机 查看磁盘状态 lsblk 可以看到 sda 已经是 128G 了。ubuntu--vg-ubun…

【前端】VUE动态引入组件 通过字符串动态渲染模板 动态生成组件

【前端】VUE动态引入组件 通过字符串动态渲染模板 应用场景&#xff1a; js增强 动态代码 扩展一类的 可以配合低代码平台等 灵活配置在线表单 在线列表等 适合灵活性 扩展性比较强的组件 VUE2 <template><div><textarea v-model"templateString"…

开源版最新LoveCardsV2表白墙源码下载

源码亮点 模板系统&#xff0c;给你无限可能 卡片不限字数&#xff0c;支持多图片上传 支持评论&#xff0c;点赞&#xff0c;让互动性拉满 管理后台可添加多个管理员 卡片一键分享至多平台 卡片浏览次数统计 发行版开箱即用 部署教程 1. 环境&#xff08;参考开发环境&…

git-版本管理工具基本操作-创建仓库-拉取-推送-暂存库-版本库

1、创建仓库 2、克隆仓库到本地&#xff08;首次拉取需要输入用户名和密码&#xff0c;用户名用邮箱&#xff0c;密码用登录gitee的密码&#xff0c;后面配置密钥后可以直接clone&#xff09; 在命令行输出两行指令配置git才能克隆&#xff1a; username&#xff1a;gitee账号…

快速排序(Java实现)

目录 快速排序的思想 代码实现 思路 代码 快速排序的特点 快速排序的思想 快速排序和冒泡排序一样&#xff0c;是一种交换排序。快速排序的核心思想也是分治&#xff0c;分而治之。给定一个数组&#xff0c;先选定一个元素作为枢轴&#xff0c;然后将大于枢轴的放在右边&a…

成为Python砖家(3): 何时产生字节码 .pyc 文件

好奇&#xff1a;.pyc和 __pycache__是啥&#xff1f; 你是否好奇&#xff0c;在某些 Python 工程中&#xff0c;当执行了 xxx.py脚本后&#xff0c;多出了 __pycache__目录&#xff1f;这个目录下存放的是一些 .pyc结尾的文件。 这些文件&#xff0c;叫做 python bytecode。 …

开源免费的表单收集系统TDuck

TDuck&#xff08;填鸭表单&#xff09;是一款开源免费的表单收集系统&#xff0c;它基于Apache 2.0协议开源&#xff0c;用户可以随时下载源码&#xff0c;自由修改和定制&#xff0c;也可以参与到项目的贡献和反馈中。TDuck表单系统不仅支持私有化部署&#xff0c;还提供了丰…

【IEEE独立出版】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 会议时间&#xff1a;2024年11月1日-3日 会议地点&#xff1a;中国-南京…

在亚马逊云科技上提取视频内容并利用AI大模型开发视频内容问答服务

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技上利用音视…

langchian 批次调用 prompt

目录 基础不使用批次 batch 批次调用 关于 langchian 额一些应用&#xff0c;可以查看案例&#xff1a; GitHub - 5zjk5/prompt-engineering: prompt 工程项目案例 基础不使用批次 from dotenv import load_dotenv import time import os from langchain_core.prompts imp…