#插入语句/*
语法:方式一:insert into 表名(列名,...)
values(值,...);
方式二:insert into 表名
set 列名=值,列名=值....;
*/#方式一支持插入多行,方式二不支持#方式一支持子查询,方式二不支持
3.2 修改(update)语句
#修改语句#1.修改单表/*
语法:update 表名 ①
set 列=新值,.... ③
where 条件; ②
*/#2.修改多表/*
语法 :sql92
update 表1 别名,表2 别名
set 列=新值,....
where 连接条件
and 筛选条件;
sql99
update 表1 别名
连接类型[inner|left|right] join 表2 别名
on 连接条件
set 列=新值,....
where 条件;
*/
3.3 删除(delete)语句
#删除语句/*1.方式一:
单表:
delete from 表名 where 筛选条件;
多表:
sql92:delete 表1的别名 from 表1 别名,表2 别名
where 连接条件 and 筛选记录;
sql99:delete 表1的别名,表2的别名
from 表1 别名
inner|left|right join 表2 别名 on 连接条件
where 筛选条件;
2.方式二:
truncate table 表名;
对比:truncate 不能加where条件,效率高一些
有自增长列,delete删除后,再插入从断点处开始,truncate从1开始
truncate没有返回值,delete有返回值
truncate删除不能回滚,delete可以回滚
*/
#视图/*
含义:虚拟表,和普通表一样使用
mysql5.1后出现新特性,是通过表动态生成的数据,只保存sql逻辑,不保存查询结果
视图和表的对比:
视图 create view 没有实际占用物理空间 一般不能增删改
表 create table 占用 都可以
*/CREATEVIEW v1
ASSELECT stuname,majorname
FROM stuinfo s
INNERJOIN major m ON s.majorid=m.id;SELECT*FROM v1;#1.创建视图/*
create view 视图名
as
查询语句;
*/CREATEVIEW v1
ASSELECT last_name,department_name,job_title
FROM employees e
JOIN departments d ON e.department_id=d.department_id
JOIN jobs j ON j.job_id=e.job_id;SELECT*FROM v1 WHERE last_name LIKE'%a%';CREATEVIEW v2
ASSELECTAVG(salary)FROM employees
GROUPBY department_id;SELECT v2.`avg(salary)`,g.grade_level FROM v2
JOIN job_grades g
ON v2.`avg(salary)`BETWEEN g.`lowest_sal`AND g.`highest_sal`;#2.视图的修改/*
方式一:
create or replace view 视图名
as
查询语句;
方式二:
alter view 视图名
as
查询语句;
*/#3.删除视图/*
语法:drop view 视图名,视图名...;
*/DESC v2;SHOWCREATEVIEW v2;DROPVIEW v1;#4.视图的更新CREATEORREPLACEVIEW myv1
ASSELECT last_name,email
FROM employees;#插入INSERTINTO myv1 VALUES('zhang','qqcom');#修改UPDATE myv1 SET last_name='lisi'WHERE last_name='zhang';#删除DELETEFROM myv1 WHERE last_name='lisi';
7. 变量
#变量/*分类:
1.系统变量:
全局变量
会话变量
2.自定义变量:
用户变量
局部变量
*/#1.系统变量,由系统提供,不是用户定义,属于服务器层面#查看语法SHOWSESSION|GLOBAL VARIABLES [LIKE'%char%'];SELECT @@global.变量名;#赋值SETGLOBAL 变量名=值;SET @@global.变量名=值;#2.自定义变量,用户自定义的#用户变量声明,初始化SET @用户变量名=值;SET @用户变量名:=值;SELECT @用户变量名:=值;#赋值SELECT 字段 INTO 变量名 FROM 表;#使用SELECT @用户变量名;#局部变量声明DECLARE 变量名 类型;DECLARE 变量名 类型 DEFAULT 值;#赋值SET 局部变量名=值;SET 局部变量名:=值;SELECT @局部变量名:=值;SELECT 字段 INTO 局部变量名 FROM 表;#使用SELECT 局部变量名;/*
用户变量和局部变量的对比:
用户变量 作用域当前对话 会话中的任何地方 声明语法不同,加@ 不用限定类型
局部变量 begin end中 begin end中第一句话 一般不加 需要
*/SET@m=1;SET@n=2;SET@sum=@m+@n;SELECT@sum;DECLARE m INTDEFAULT1;DECLARE n INTDEFAULT2;DECLARE mn INT;SET mn=m+n;SELECT mn;
9. 存储过程和函数
/*
存储过程和函数,类似于java中的方法
存储过程:一组预先编译好的SQL语句的集合
语法:
1.创建
create procedure 存储过程名(参数列表)
begin
存储过程体(一组合法的sql语句)
end
注意:
1.参数列表包含三部分:参数模式 in、out、inout
参数名
参数类型
2.如果存储过程体只有一句话,begin end可以省略,结尾用delimiter重新设置 delimiter 结束标记
2.调用
call 存储过程名(实参列表);
3.删除存储过程
drop procedure 存储过程名
4.查看存储过程的信息
show create procedure 存储过程名
*/#空参列表DELIMITER $
CREATEPROCEDURE myp1()BEGININSERTINTO admin(username,`password`)VALUES('aa','000'),('bb','111'),('cc','222');END $
CALL myp1()$
#in模式的参数CREATEPROCEDURE myp2(IN username VARCHAR(20),IN`password`VARCHAR(20))BEGINDECLARE result INTDEFAULT0;SELECTCOUNT(*)INTO result
FROM admin
WHERE admin.username=username AND admin.`password`=`password`;SELECTIF(result>0,'s','f');END $
CALL myp2('zhang','111')$
#out模式的存储过程CREATEPROCEDURE myp3(IN bName VARCHAR(20),OUT boyName VARCHAR(20))BEGINSELECT bo.boyName INTO boyName
FROM boys bo
INNERJOIN beauty b ON bo.id=b.boyfriend_id
WHERE b.name=beautyName;;END $
SET@bName $
CALL myp3('zhang',@bName);SELECT@bName$#inout模式CREATEPROCEDURE myp4(INOUT a INT,INOUT b INT)BEGINSET a=a*2;SET b=b*2;END$
SET@m=10$
SET@n=20$
CALL myp4(@m,@n)$
SELECT@m,@n$
#函数/*
存储过程:可以有0个返回,也可以有多个返回。适合左批量出入、更新
函数:只能有1个返回。适合处理数据后返回一个结果
1.创建语法
CREATE FUNCTION 函数名(参数名 参数类型) RETURNS 返回类型
BEGIN
函数体:肯定有return语句
END
使用delimiter语句设置结束标记
2.调用语法
select 函数名(参数列表)
3.查看函数
show create function 函数名;
4.删除函数
drop function myf2
*/#无参有返回CREATEFUNCTION myf1()RETURNSINTBEGINDECLARE c INTDEFAULT0;SELECTCOUNT(*)INTO c
FROM employees;RETURN c;END $
SELECT myf1() $
#有参有返回CREATEFUNCTION myf2(empName VARCHAR(20))RETURNSDOUBLEBEGINSET@sal=0;SELECT salary INTO@salFROM employees
WHERE last_name=empName;RETURN@sal;END $
SELECT myf2('kochhar') $
3. DML(Data Manipulation Language)语言3.1 插入(insert)语句#插入语句/*语法:方式一:insert into 表名(列名,...)values(值,...);方式二:insert into 表名set 列名=值,列名=值....;*/#方式一支持插入多行,方式二不支持#方式一支持子查询,方式二不支持3.2 修改(update)语句#修改语句#1.修改单表/*语法:update 表名 ①set 列=新值,.... ③