第二章 MySQL的DML操作(2)

MySQL数据库

第二章 MySQL的DML操作

一、SQL概述

SQL(Structure Query Language):结构化查询语言。
SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。

  • 各数据库厂商都支持ISO的SQL标准——普通话。
  • 各数据库厂商在标准的基础上做了自己的扩展——方言。
1、数据库意义

(1)数据存储
(2)数据管理

2、管理数据库数据方法

(1)通过Navicat、SQLyog等管理工具管理数据库数据
(2)通过DML语句管理数据库数据

二、DML(Data Manipulation Language):数据操纵语言

用于向数据表中插入、修改和删除数据。

1、添加数据 insert

在这里插入图片描述
(1)字段或值之间用英文逗号隔开;
(2)“字段1, 字段2…”该部分可省略,但添加的值务必与表结构数据列顺序相对应,且数量一致;
(3)可同时插入多条数据,values 后用英文逗号隔开;

2、修改数据 update

在这里插入图片描述

(1)column_name 为要更改的数据列
(2)value 为修改后的数据,可以为变量、具体值、表达式或者嵌套的SELECT结果
(3)condition为筛选条件,如不指定则修改该表的所有列数据

3、where条件子句

有条件地从表中筛选数据。
where中的运算符
在这里插入图片描述

4、删除数据

(1)delete
在这里插入图片描述
condition为筛选条件,如不指定则删除该表的所有列数据。
(2)TRUNCATE命令
用于完全清空表数据,但表结构、索引、约束等不变
在这里插入图片描述
(3)TRUNCATE和DELETE的区别

  • 都能删除数据、不删除表结构,但TRUNCATE 速度更快
    不同:
  • 使用TRUNCATE TABLE重新设置AUTO_INCREMENT计数器;
  • 使用TRUNCATE TABLE不会对事务有影响。

三、项目中两张数据库表之间的关系

1、一对一映射(One To One)

A 表中有一条记录,能够在 B 表中找到与之唯一对应的一条记录,同时通过 B 表的一条记录,也能够在 A 表中找到一条与之唯一对应的一条记录。
例如:个人信息表和学校的学籍信息表,一个人在个人信息表中有一条记录,同时在学籍表中也有一条记录。

2、多对一映射(Many To One)

A 表中的一条记录,能够在 B 表中找到与之唯一对应的一条记录,同时在 B 表中的一条记录,在 A 表中却能够查询到多条与之对应的记录。
例如:学生信息表和班级信息表之间的关系,如果站在学生信息表的角度,那么学生信息表和班级信息表就是典型的多对一映射关系。要想解决多对一映射关系,那么就会在多的一方的表中,将一的一方的主键作为一个字段,这个字段就相当于是多的一方的外键。

drop table if exists sys_classroom;
create table sys_classroom(
	no int(10) not null auto_increment comment '班级编号',
	name varchar(100) not null comment '班级名称',
	-- 往往会在一张表中保留日志字段,例如何时插入的这条数据,以及何时修改的这条数据,
	-- 就会保留类似于 create_time、update_time 这样的字段,使用 timestamp 类型。
	create_time timestamp not null default current_timestamp comment '添加时间',
	update_time timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
	primary key(no)
)Engine=InnoDB charset=utf8mb4 comment='班级信息表';
-- 插入班级信息
insert into sys_classroom(name) values('初一五班');
-- 学生信息表:sys_student
drop table if exists sys_student;
create table sys_student(
	no int(10) not null auto_increment comment '学生编号',
	name varchar(100) not null comment '学生名称',
	cellphone varchar(100) unique comment '手机号码',
	-- 为了表示该学生所在的班,那么就将 sys_classroom 的主键作为该表的一个字段,可以看做是外键
	classroom_no int(10) not null comment '学生所在班级',
	-- 往往会在一张表中保留日志字段,例如何时插入的这条数据,以及何时修改的这条数据,
	-- 就会保留类似于 create_time、update_time 这样的字段,使用 timestamp 类型。
	create_time timestamp not null default current_timestamp comment '添加时间',
	update_time timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
	primary key(no)
)Engine=InnoDB charset=utf8mb4 comment='学生信息表';
-- 插入学生信息
insert into sys_student(name, cellphone, classroom_no) values(张三', '13790030315', 1), ('里斯', '17300205472', 1), ('王五', '15610070603', 1);
3、一对多映射(One To Many)

其本质和多对一是相同的,只不过此时所站的角度是在班级角度看待问题。
例如班级和学生关系。

4、多对多映射(Many To Many)

A 表中的一条记录在 B 表中能够找到多条对应关系,同时 B 表中的一条记录,在 A 表中也能够找到多条对应记录,那么 A 表和 B 表就成型了多对多映射关系。例如员工和福利之间的关系,就是典型的多对多。要解决多对多映射关系,则必须通过第三张表来完成,该表自保存 A 表和 B 表的主键字段,我们将这张第三张表就称之为中间表。

drop table if exists sys_emp;
create table sys_emp(
	no int(10) not null auto_increment comment '员工编号',
	name varchar(100) not null comment '员工名称',
	cellphone varchar(100) unique comment '手机号码',
	-- 往往会在一张表中保留日志字段,例如何时插入的这条数据,以及何时修改的这条数据,
	-- 就会保留类似于 create_time、update_time 这样的字段,使用 timestamp 类型。
	create_time timestamp not null default current_timestamp comment '添加时间',
	update_time timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
	primary key(no)
)Engine=InnoDB charset=utf8mb4 comment='员工信息表';
insert into sys_emp(name, cellphone) values('占山', '13799030015'), ('里斯', '17389200072'), ('王五', '15000670603');

drop table if exists sys_welfare;
create table sys_welfare(
	no int(10) not null auto_increment comment '福利编号',
	name varchar(100) not null comment '福利名称',
	-- 往往会在一张表中保留日志字段,例如何时插入的这条数据,以及何时修改的这条数据,
	-- 就会保留类似于 create_time、update_time 这样的字段,使用 timestamp 类型。
	create_time timestamp not null default current_timestamp comment '添加时间',
	update_time timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
	primary key(no)
)Engine=InnoDB charset=utf8mb4 comment='福利信息表';
insert into sys_welfare(name) values('养老保险'), ('医疗保险'), ('失业保险'), ('工伤保险'), ('生育保险'), ('住房公积金');

drop table if exists sys_emp_welfare;
create table sys_emp_welfare(
	emp_no int(10) comment '员工主键',
	welfare_no int(10) comment '福利主键'
)Engine=InnoDB charset=utf8mb4 comment='员工福利信息表';

insert into sys_emp_welfare values(1, 1);
insert into sys_emp_welfare values(1, 2);
insert into sys_emp_welfare values(1, 3);
insert into sys_emp_welfare values(1, 4);
insert into sys_emp_welfare values(1, 5);
insert into sys_emp_welfare values(1, 6);
insert into sys_emp_welfare values(2, 1);
insert into sys_emp_welfare values(2, 2);
insert into sys_emp_welfare values(2, 3);
insert into sys_emp_welfare values(2, 4);
insert into sys_emp_welfare values(2, 5);
insert into sys_emp_welfare values(3, 1);
insert into sys_emp_welfare values(3, 2);
insert into sys_emp_welfare values(3, 3);
insert into sys_emp_welfare values(3, 4);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值