MySQL学习笔记12:数据操纵语言(DML语言)insert update delete

简介

本系列(MySQL学习笔记)是我基于B站上SQL播放量第一的MySQL 基础+高级篇- 数据库 -sql -尚硅谷视频所做的笔记,方便大家学习和掌握MySQL。

MySQL学习笔记12:数据操纵语言(DML语言)insert update delete_第1张图片

说明

1.这个系列基本包含了视频中老师讲课的所有内容,包括知识点、案例、部分测试题。
2.所需的配套资料(来自B站评论区)

@黎曼的猜想:
配套资料下载–>公众号公众号 DragonWell 回复:mysql 注意:是公众号!!是公众号!!是公众号,点那个 搜一搜 搜索!!!
不是私人号,是公众号!!! (可以直接在 搜一搜 搜索 dragonwell) 名称是:DragonWell公众号

3.SQLyog的安装(来自B站评论区)

@江左萌粽猪 链接:https://pan.baidu.com/s/18PDjbqEeDSAjQM0VQye6og 提取码:qjuz

目录

MySQL学习笔记1:数据查询语言(DQL语言)select基本用法
MySQL学习笔记2:where 条件查询
MySQL学习笔记3:order by 排序查询
MySQL学习笔记4:常见函数(一) 单行函数
MySQL学习笔记5:常见函数(二) 分组函数
MySQL学习笔记6:group by 分组查询
MySQL学习笔记7:join 连接查询(SQL 92标准)
MySQL学习笔记8:join 连接查询(SQL 99标准)
MySQL学习笔记9:子查询(内查询)
MySQL学习笔记10:union 联合查询
MySQL学习笔记11:limit 分页查询
MySQL学习笔记12:数据操纵语言(DML语言)insert update delete
MySQL学习笔记13:数据定义语言(DDL语言)create alter drop
MySQL学习笔记14:常见数据类型
MySQL学习笔记15:常见约束
MySQL学习笔记16:事务控制语言(TCL语言)
MySQL学习笔记17:视图
MySQL学习笔记18:存储过程
MySQL学习笔记19:函数
MySQL学习笔记20:流程控制结构

DML语言

数据操纵语言
数据的插入:insert
修改:update
删除:delete

一.插入语句

方式一(经典)
语法:
insert into 表名(列名,...) values(1...)
插入的是一行

1.插入的值的类型要与列的类型一致或兼容

INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','18988888888',NULL,2);#photo有NULLABLE

SELECT * FROM beauty;

2.不可以为NULL的列必须插入值,可以为null的列如何插入值?

方式一:值写NULL
INSERT INTO beauty(id,NAME,sex,borndate,phone,photo,boyfriend_id)
VALUES(13,'唐艺昕','女','1990-4-23','18988888888',NULL,2);#photo有NULLABLE

方式二:列名和值都省略
INSERT INTO beauty(id,NAME,sex,borndate,phone)
VALUES(14,'金星','女','1990-4-23','13888888888');

INSERT INTO beauty(id,NAME,sex,borndate,phone)
VALUES(15,'娜扎','女','1990-4-23','13888888888');

3.列的顺序可以调换

INSERT INTO beauty(NAME,sex,borndate,phone,id)
VALUES('蒋欣','女','1990-4-23','110',16);

4.列数和值的个数必须一致:否则报错

INSERT INTO beauty(NAME,sex,borndate,phone,id,boyfriend_id)
VALUES('蒋欣','女','1990-4-23','110',17); #报错

5.可以省略列名,默认是所有列,而且列的顺序和表中列的顺序是一致的

INSERT INTO beauty
VALUES(18,'gsy','女',NULL,'119',NULL,NULL);
方式二:
语法:
insert into 表名
set 列名=值,列名=值,...
INSERT INTO beauty
SET id=19,NAME='刘涛',phone='999';
两种方式PK
1.方式一支持插入多行,但方式二不支持
INSERT INTO beauty
VALUES(23,'唐艺昕1','女','1990-4-23','18988888888',NULL,2),
(24,'唐艺昕2','女','1990-4-23','18988888888',NULL,2),
(25,'唐艺昕3','女','1990-4-23','18988888888',NULL,2);

2.方式一支持子查询,但方式二不支持
INSERT INTO beauty(id,NAME,phone)
SELECT 26,'宋茜','118'; # 把结果集插入对应的列,不用values

INSERT INTO beauty(id,NAME,phone)
SELECT id,boyName,'118'
FROM boys WHERE id<3;

二.修改语句

1.修改单表的记录【※】
语法: 
update 表名 
set=新值,=新值, ...
where 筛选条件;

2.修改多表的记录
sql92语法:
update1 别名,表2 别名
set=,...
where 连接条件
and 筛选条件;

sql99语法:
update1 别名
inner|left|right join2 别名
on 连接条件
set=,...
where 筛选条件;

1.修改单表

修改beauty 表中姓唐的女神为13899888899
UPDATE beauty 
SET phone='13899888899'
WHERE NAME LIKE '唐%';
SELECT * FROM beauty;
修改boys表 2号的名改为张飞,魅力值为10
UPDATE boys
SET boyname = '张飞',userCP=10
WHERE id=2;

SELECT * FROM boys;

2.修改多表记录

 修改张无忌的女朋友的手机号为114
# 涉及boys表和beauty两个表 ,需要内连接
UPDATE beauty AS b
INNER JOIN boys AS j
ON b.`boyfriend_id`=j.`id`
SET b.`phone`='114'
WHERE j.`boyName`='张无忌';
修改没有男朋友的女神的男朋友编号都为2
UPDATE beauty  AS b # 哪个(女神)xxx没有yyy,所以beauty是主表
LEFT JOIN boys AS j
ON b.`boyfriend_id`=j.`id`
SET b.`boyfriend_id`=2
WHERE b.`boyfriend_id` IS NULL;

三.删除语句

一删就是整行
方式一:
语法:
1.单表的删除【※】
delete from 表名
where 筛选条件(没有筛选条件就整个表没了)

2.多表的删除
sql92:
delete 要删的:表1的别名/2的别名
from1 别名,表2 别名
where 连接条件
and 筛选条件  

sql99:
delete 要删的:表1的别名/2的别名
from1 别名
inner|left|right join2 别名
on 连接条件
where 筛选条件  

方式二:
语法:
truncate table 表名;删除整个表
方式一:单表删除
删除手机号以9结尾的女神信息
DELETE FROM beauty
WHERE phone LIKE '%9';

SELECT *  FROM beauty;
SELECT *  FROM boys;
#多表删除
删除张无忌的女朋友的信息
DELETE b  # 删的是beauty 表
FROM beauty AS b
INNER JOIN boys AS j
ON j.id=b.boyfriend_id
WHERE j.boyName = '张无忌';
# 删除黄晓明的信息,以及他女朋友的信息
DELETE j,b
FROM beauty AS b
INNER JOIN boys AS j
ON j.`id`=b.`boyfriend_id`
WHERE j.`boyName`='黄晓明';
方式二:truncate
把boys魅力值大于100的男生删除
TRUNCATE TABLE boys
WHERE userCP>100; # 报错 不能用where

TRUNCATE TABLE boys;
delete truncate PK 【常见】
1 delete可以加wheretruncate不能
2 truncate删除效率高一丢
3 加入要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列从断点开始,
而truncate删除后,再插入数据,自增长列的值从0开始
4 truncate删除没有返回值(0行受到影响),delete删除有返回值
5 truncate删除不能回滚,delete删除可以回滚
DELETE FROM boys; # 全删,假设之前的id最大到5
INSERT INTO boys(boyNAme,userCP)
VALUES('张飞',100),('刘备',100),('关云长',100);
SELECT * FROM boys; # 新的数据的id 从6开始

TRUNCATE TABLE boys;  # 全删
INSERT INTO boys(boyNAme,userCP)
VALUES('张飞',100),('刘备',100),('关云长',100);
SELECT * FROM boys; # 新的数据的id 从1开始

测试题

USE myemployees;
CREATE TABLE my_employees(
	Id INT(10),
	First_name VARCHAR(10),
	Last_name VARCHAR(10),
	Userid VARCHAR(10),
	Salary DOUBLE(10,2)
);
CREATE TABLE users(
	id INT,
	userid VARCHAR(10),
	department_id INT
);
# 查看表结构
DESC my_employees
#向my_employees插入数据
INSERT INTO my_employees(id,first_name,last_name,userid,salary)
VALUES(1,'patel','Ralph','Rptal',895),
(2,'Dance','Betty','Bdance',860),
(3,'Biri','Ben','Bbiri',1100),
(4,'Newman','Chad','Cnewman',750),
(5,'Ropeburn','Auddrey','Aropevur',1550);
# 或
INSERT INTO my_employees(id,first_name,last_name,userid,salary)
SELECT 1,'patel','Ralph','Rptal',895 UNION
SELECT 2,'Dance','Betty','Bdance',860 UNION
SELECT 3,'Biri','Ben','Bbiri',1100 UNION
SELECT 4,'Newman','Chad','Cnewman',750 UNION
SELECT 5,'Ropeburn','Auddrey','Aropevur',1550;user表插入数据
INSERT INTO users
VALUES(1,'Rptal',10),
(2,'Bdance',10),
(3,'Bbiri',20),
(4,'Cnewman',30),
(5,'Aropevur',40);

UPDATE my_employees
SET last_name='drelxer'
WHERE id=3;

UPDATE my_employees
SET salary=1000
WHERE salary<900;

SELECT * FROM my_employees;

DELETE u,m
FROM users AS u
INNER JOIN my_employees AS m
ON u.userid=m.`Userid`
WHERE u.userid='Bbiri';

删除所有数据
DELETE FROM my_employees;
DELETE FROM users;

检查所做的修正
SELECT * FROM my_employees;

清空表my_employees
TRUNCATE TABLE my_employees;

你可能感兴趣的:(MySQL)