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

ops/2024/9/24 8:42:34/

文章目录

  • 前言
  • 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;

在这里插入图片描述


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


http://www.ppmy.cn/ops/95935.html

相关文章

CSC2121 半桥驱动芯片

CSC2121 X系列是一款高性价比的半桥架构的栅极驱动专用电路,用于大功率MOS管、IGBT管栅极驱动。CSC2121内部集成了逻辑信号处理电路、死区时间控制电路、欠压保护电路、电平位移电路、脉冲滤波电路及输出驱动电路,CSC2121X专用于无刷电机控制器中驱动电路…

untiy有渲染线程和逻辑线程嘛

之前我也这么认为,其实unity引擎是单线程的,当然后续的jobs不在考虑范围内 如果你在一个awake 或者 start方法中 延时,是会卡住主线程的 比如 其实游戏引擎有一个基础简单理解,那就是不断的进行一个循环,在这个周期循…

ptrade排坑笔记——服务器连接建立失败

前言 今天要和大家分享的一个问题是和服务器相关的,也就是服务器连接建立失败! 一、问题描述 PTrade终端登录量化界面报错:登录失败,错误信息:服务器连接建立失败,正在尝试重连.. 二、解决方案 1、检查…

家里养有宠物,宠物空气净化器真的能除毛除臭吗?

相信大部分养猫家庭都有一个共同烦恼,那就是浮毛和异味。曾经没养猫之前并不知道这个问题会困扰我这么久,之前甚至还不以为然,想着大不了买个吸尘器或者扫地机器人就可以了,何必担心。但养了猫之后,才发现这些想法真的…

【LVGL9学习笔记-2.添加百问网demo至工程模板】

添加百问网demo至工程模板 上一节使用codeBlocks运行了LVGL ,以此作为模板,将百问网的一些demo添加至该工程中 拷贝文件与配置文件至该目录下 打开工程包含文件 –>add files recusively –>add files 编译一次出现如下情况(后面学到了再做解决…

k8s 部署kubernetes-dashboard

参考: K8s-k8s集群部署-8-部署Dashboard_8. 部署 dashboard-CSDN博客k8s-kubernetes常用命令,服务部署,可视化控制台安装及token的生成_kubernetes-dashboard 生成token-CSDN博客 首先下载yaml文件 $ wget https://raw.githubusercontent.…

从0开发一个 组件/插件 并部署

从零开始发布一个 Vue3 Vite 的 npm 包 1. npm账号配置 1.1 注册新账号 注册地址: www.npmjs.com/signup 1.2 登录账号 在命令行输入: npm login,此时会提醒你打开浏览器进行登录,然后邮件接收验证码,输入登录 …

JS DOM、点击事件

JS DOM 加载事件onload js代码执行的时候,需要html&css的支持 onload在页面加载完之后执行 dom:用JS对html标签进行增删改查 元素节点获取 var name document.getElementById("userName"); var inputs document.getElementsByTagNam…