前言
这段时间呢,分享的都是关于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';
总结
今天的博客就分享到这里了,学会使用视图还挺重要的啦,欢迎评论留言交流啦,告辞!