Mysql之增删改

161 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

今天先补充一个知识点——外键,然后就是DML的增删改。查询后面会单独拿出来讲

外键

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

设置外键的语法:

[constraint 约束名] foreign key(作为外键的列) references 另一个表(字段名)

注意:一个表的外键必须是另一个表的主键

在创建表的时候,添加外键

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 '出生日期',
    `address` varchar(100) default null comment '家庭住址',
    `email` varchar(50) default null comment '邮箱',
    `gradeid` int(10) not null comment '学生的年级'
    primary key(`id`);
    constraint `gradeid` foreign key(`gradeid`) references `grade`(`gradeid`)
) engine=innodb default charset=utf-8

删除有外键关系的表的时候,必须要先删除引用别人的表(从表),再删除被引用的表(主表)

在外面添加外键

alter table `student`
add constraint `gradeid` foreign key(`gradeid`) references `grade`(`gradeid`);

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

外键可能形成闭环,使我们无法删除任何一个表

最佳实践:

  • 数据库就是单纯的表,只用来存数据,只有行(数据)和列(字段)
  • 我们想使用多张表的数据,想使用外键(程序实现)

DML语言

数据库的意义:数据存储,数据管理

DML语言:数据操作语言

  • insert 增加
  • update 修改
  • delete 删除

添加

语法:

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

样例:

--插入一个值
insert into `grade`(`gradename`) values('大二');

--插入多个值
insert into `grade`(`gradename`) values('大一'), ('大二');

--一般写插入语句,一定要数据和字段一一对应
--插入多个字段值
insert into `student`(`name`, `pwd`, `sex`) values ('张三', 'aaaaa', '男');

注意:

  1. 字段和字段之间使用英文逗号隔开
  2. 字段是可以省略的,但后面的值必须要一一对应
  3. 可以同时插入多条数据,values后面的值需要使用逗号隔开

修改

语法:

update 表名 set 需要修改的内容 where [条件]

样例:

--修改学员名字
update `student` set `name` = '狂神' where id = 1;
--不指定条件会改变所有项

--修改多个属性,逗号隔开
update `student` set `name` = '张三', `email` = '12345654' where `id` = 1;

注意:

  • 条件是筛选的条件,如果没有指定,则会修改所有的列
  • 修改的内容可以是一个具体的值,也可以是一个变量
  • 设置多个属性时,要用逗号隔开

删除

delete命令

语法:

delete from 表名 [where 条件]

样例:

--删除数据(会全部删除)
delete from `student`;

--删除指定数据
delete from `student` where id = 1;

truncate命令

作用:完全清空一个数据库表,表的结构和索引约束不会变

truncate `student`;

delete 和 truncate 的区别

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

  • 不同:

    • truncate 重新设置自增列,计数器会归零
    • truncate 不会影响事务

delete 和 truncate,重启数据库后引擎的现象

  • innodb 自增列会从1开始(存在内存当中,断电即失)
  • myisam 继续从上一个自增量开始(存在文件中,不会丢失)