DML(数据管理语言)、视图

前言

这段时间呢,分享的都是关于MYSQL的相关知识点,今天分享的依旧是MySQL相关知识点,没错就是DML语言以及视图的使用!

DML语言

1、DML语言简介

DML(Data Manipulation Language) 数据管理语言

DML语言实际上就是对数据的增删改!

2、插入数据

1、含义:使用 INSERT 语句向表中插入数据

2、语法:

INSERT INTO table [(column [, column...])]

VALUES (value [, value...]);

• 使用这种语法一次只能向表中插入一条数据。

3、插入语句的两种方式:

• 添加指定字段名,表名后必须写指定的字段名

INSERT INTO 表名(字段名1,字段名2,字段名3)values(?,?,?);

• 添加所有字段名,省略表名后面的字段名书写

INSERT INTO 表名(字段名1,字段名2,字段名3...)

values(?,?,?,...);

应用场景:当不需要添加所有数据时,使用第一种方式添加数据!反之,如果需要添加全部数据,则使用第二种方式!

个人建议:

以上两种方式,最好还是使用第二种方式,表名后最好写上全部的字段名,否则可能因为业务逻辑的改变,一年后可能需要使用的表格的表结构发生了改变!

案例1:创建一个 myemployees的数据库以及my_employees表格,并给表格添加数据!

#  创建数据库
create  database   myemployees;
#  使用该数据库
USE myemployees;
#  创建表格
CREATE TABLE my_employees(
	Id INT(10),
	First_name VARCHAR(10),
	Last_name VARCHAR(10),
	Userid VARCHAR(10),
	Salary DOUBLE(10,2)
);

给表格插入数据:

INSERT INTO my_employees
VALUES(1,'patel','Ralph','Rpatel',895),
(2,'Dancs','Betty','Bdancs',860),
(3,'Biri','Ben','Bbiri',1100),
(4,'Newman','Chad','Cnewman',750),
(5,'Ropeburn','Audrey','Aropebur',1550);

这里使用的是添加所有字段名,省略表名后面的字段名书写的方式

添加好数据之后查询运行,看数据是否插入成功!

select  *  from my_employees;

运行结果:

在这里插入图片描述
然后我们可以看到运行之后的数据,证明插入数据成功!

4、隐式方式: 在列名表中省略该列的值。

INSERT INTO t_mysql_departments (department_id, 

department_name ) VALUES (30, 'Purchasing');

5、 显示方式: 在VALUES 子句中指定空值。

	INSERT INTO t_mysql_departments
	VALUES (100, 'Finance', NULL, NULL);

6、从其它表中拷贝数据:

案例:拷贝好t_mysql_employees表格中department_id=90的数据并且添加到emp1表格中:

首先创建一个emp1表:

create  table  emp1
SELECT * 
FROM t_mysql_employees
where  1=2;

创建表格后:

在这里插入图片描述
拷贝数据成功后:

在这里插入图片描述

3、更新数据

1、含义: 使用 UPDATE 语句更新数据。
2、语法:

UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];

3、特点:

可以一次更新多条数据。

如果需要回滚数据,需要保证在DML前,进行设置:SET
AUTOCOMMIT = FALSE;
(也就是设置自动提交为false);

1、一次性更新多条数据

例:修改张无忌的女朋友的手机号为119

UPDATE t_mysql_boys bo
INNER JOIN t_mysql_beauty b ON bo.`id`=b.`boyfriend_id`
SET b.`phone`='119',bo.`userCP`=1000
WHERE bo.`boyName`='张无忌';

修改前的数据:

在这里插入图片描述
修改后的数据:

在这里插入图片描述

4、删除数据

1、含义:使用 DELETE 语句从表中删除数据。

2、语法:

DELETE FROM table [WHERE condition];

3、案例:

• 使用 WHERE 子句删除指定的记录。

DELETE FROM t_mysql_departments
WHERE department_name = 'Finance';

• 如果省略 WHERE 子句,则表中的全部数据将被删除

DELETE FROM copy_emp;

一次删除多表的数据

案例:删除张无忌的女朋友的信息

DELETE b,bo
FROM t_mysql_beauty b
INNER JOIN t_mysql_boys bo ON b.`boyfriend_id` = bo.`id`
WHERE bo.`boyName`='张无忌';

注意:删除的时候需要注意,最好先查询出来然后再删除,mysqll默认就可以直接删除数据,不需要像Oracle中j进行commit提交数据。

关于delete 和 truncate的区别:

1、delete 可以加where 条件,truncate不能加

2、truncate删除,效率高一丢丢

3、假如要删除的表中有自增长列,

如果用delete删除后,再插入数据,自增长列的值从断点开始,

而truncate删除后,再插入数据,自增长列的值从1开始。

4、truncate删除没有返回值,delete删除有返回值

5、truncate删除不能回滚,delete删除可以回滚.

视图

1、含义:虚拟表,和普通表一样使用
mysql5.1版本出现的新特性,是通过表动态生成的数据

2、语法:

create view 视图名
as
查询语句;

3、案例:查询姓张的学生名和专业名

创建表格:

SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`
WHERE s.`stuname` LIKE '张%';

4、学习视图的目的:

a、执行效率问题
b、编码便捷问题

(一)、创建视图:

CREATE VIEW v1
AS
SELECT stuname,majorname
FROM stuinfo s
INNER JOIN major m ON s.`majorid`= m.`id`;

SELECT * FROM v1 WHERE stuname LIKE '张%';

表格和视图的区别:

关键字 是否实际占用物流空间 使用
create view 只是保存了sql逻辑 增删改查,只是一般不能增删改
create table 保存了数据 增删改查

(二)、使用视图

SELECT * FROM myv1 WHERE last_name LIKE '%a%';

(三)、修改视图
方式一:

create or replace view  视图名
as
查询语句;

案例1:

CREATE OR REPLACE VIEW myv3
AS
SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

方式二:

alter view 视图名
as 
查询语句;

案例2:

ALTER VIEW myv3
AS
SELECT * FROM employees;

(四)、删除视图

语法:

语法:drop view 视图名,视图名,...;

案例:

DROP VIEW emp_v1,emp_v2,myv3;

(五)、查看视图

DESC myv3;

SHOW CREATE VIEW myv3;

(六)、视图的更新

CREATE OR REPLACE VIEW myv1
AS
SELECT last_name,email
FROM employees;

具备以下视图的特点不允许进行更新:

a、包含以下关键字的sql语句:分组函数、distinct、
   group  by、having、union
   或者union all
b、常量视图
c、Select中包含子查询

1、group by

CREATE OR REPLACE VIEW myv1
AS
SELECT MAX(salary) m,department_id
FROM employees
GROUP BY department_id;

SELECT * FROM myv1;

更新

UPDATE myv1 SET m=9000 WHERE department_id=10;

2、常量视图

CREATE OR REPLACE VIEW myv2
AS
SELECT 'john' NAME;
SELECT * FROM myv2;

更新

UPDATE myv2 SET NAME='lucy';

3、Select中包含子查询

CREATE OR REPLACE VIEW myv3
AS
SELECT department_id,(SELECT MAX(salary) FROM employees) 
最高工资 FROM departments;

更新

SELECT * FROM myv3;
UPDATE myv3 SET 最高工资=100000;

4、join

CREATE OR REPLACE VIEW myv4
AS
SELECT last_name,department_name
FROM employees e
JOIN departments d
ON e.department_id  = d.department_id;

更新

SELECT * FROM myv4;
UPDATE myv4 SET last_name  = '张飞' WHERE last_name='Whalen';
INSERT INTO myv4 VALUES('陈真','xxxx');

5、from一个不能更新的视图

CREATE OR REPLACE VIEW myv5
AS
SELECT * FROM myv3;

更新

SELECT * FROM myv5;

UPDATE myv5 SET 最高工资=10000 WHERE department_id=60;

6、where子句的子查询引用了from子句中的表

CREATE OR REPLACE VIEW myv6
AS
SELECT last_name,email,salary
FROM employees
WHERE employee_id IN(
	SELECT  manager_id
	FROM employees
	WHERE manager_id IS NOT NULL
);

更新

SELECT * FROM myv6;
UPDATE myv6 SET salary=10000 WHERE last_name = 'k_ing';

总结

今天的博客就分享到这里了,学会使用视图还挺重要的啦,欢迎评论留言交流啦,告辞!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45464930/article/details/106833612