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


前言

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


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;

在这里插入图片描述


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

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值