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);