-- 概念:存储过程是数据库中的一个对象,存储在服务端,用来封装多条SQL语句且带有逻辑性,可以实现一个功能,由于他在创建时,就已经对SQL进行了编译,所以执行效率高,而且可以重复调用,类似于我们java中的方法。
-- 语法:
delimiter $$
create procedure myTest()
begin
end $$
-- 输入值和输出值
delimiter $$
create
procedure `mydb`.`mypro2`(in num int,out sum int)
begin
delete from myemp where empno=num;
select count(*) from myemp into sum;
end $$
delimiter;
-- 定义一个会话变量
set @sum=0;
call mypro2(7499,@sum);
-- 查询会话变量的值
select @sum;
-- 删除存储过程
语法:drop procedure myTestPro;
-- 带有if逻辑的储存过程
DELIMITER $$
CREATE
PROCEDURE `mypro`(IN num INT,OUT str VARCHAR(10))
BEGIN
IF num=1 THEN
SET str='星期一';
ELSEIF num=2 THEN
SET str='星期二';
ELSEIF num=3 THEN
SET str='星期三';
ELSE
SET str='未知';
END IF;
END $$
SET @str='a';
CALL `mypro`(1,@str);
SELECT @str;
-- 概念:
-- 触发器:数据库中的一个对象,相当于JS中的监听器,触发器可以监听增删改 三个动作。
-- 语法:
DELIMITER $$
CREATE
TRIGGER `mytestdb`.`myTriger` BEFORE/AFTER INSERT/UPDATE/DELETE
ON `mytestdb`.`<Table Name>`
FOR EACH ROW
BEGIN
END$$
DELIMITER ;
BEFORE 行为发生之前就触发
AFTER 行为发生之后触发
FOR EACH ROW 行级触发,每操作一行就触发
-- 我往一张表test中插入了数据,在日志表logger中添加一条记录
DELIMITER $$
CREATE TRIGGER `mytestdb`.`MyTri3` AFTER DELETE ON test FOR EACH ROW
BEGIN
INSERT INTO logger VALUES(NULL,"你删除了一条数据",NOW());
END$$
DELIMITER ;
-- old和new
old.字段 可以获取到被监听的表中的字段的旧值
new.字段 可以获取到被监听表中更新后字段的新值 比如插入新值或者修改旧值
例:在表t1中添加一条数据,另一张表t2也要添加一条同样的数据
DELIMITER $$
CREATE
TRIGGER `mytestdb`.`myTri6` AFTER INSERT
ON `mytestdb`.`t1`
FOR EACH ROW BEGIN
INSERT INTO t2 VALUES(new.id,new.username,new.age);
END$$
DELIMITER ;
视图 View
-- 视图的出现是为了简化数据的查询。
-- 视图本身不会去存储数据,他的数据来自查询的基表中的数据。
select * from emp;
-- 创建单表视图
create view my_view as select * from emp;
-- 查询视图 和查询表的语句是一样的
select * from my_view;
select user.*,orders.'id' as oid,orders.'totalprice',orders.'user_id' from user,orders where user.'id'=orders.'user_id';
-- 创建多表视图
create view my_view3 as select user.*,orders.'id' as oid,orders.'totalprice',orders.'user_id' from user,orders where user.'id'=orders.'user_id';
-- 多表视图不支持子查询。
-- 删除视图
drop view my_view3;
-- 修改视图 视图本身不能修改 只能修改数据来源
-- 索引正mysql中也叫'键 key',是存储引擎用于快速找到记录的一种数据结构。
-- 索引对于良好的性能非常关键,尤其是当表中的数据越来越多,索引对于性能的影响愈发重要.
-- 索引优化应该是对查询性能优化的最有效手段了,索引能够轻易将查询性能提高好几个数量级.
-- 索引相当于新华字典的音序表,如果要查某个汉字,不使用音序表,则需要从几百页中的数据中去找找个汉字
-- 简单理解就是,索引就像一本书的目录,让你很快能够查询到你想要的数据.
-- 分类:普通索引 唯一索引 全文索引 单列索引 多列索引 空间索引
-- 语法:
create table student (
sid int,
sname varchar(32),
index(sname) -- 给sname字段建立普通索引 注意字段不要带引号
);
-- 通过查看建表语句来看某个字段有没有索引
show create table student;
create table student (
tid int,
sname varchar(32),
unique index(sname) -- 创建唯一索引,这列的值不能重复
);
show create table student;
create table student (
tid int,
tname varchar(32),
tlog varchar(100),
index my_Index(tname,tlog) -- 给tname和tlog两个字段设置索引
);
-- 表已经存在我们给表中的某个字段建立索引
-- 创建普通索引
create index myIndex on syudent (sname);
-- 创建全文索引
create unique index myIndex on syudent (sname);
-- 创建多列索引
create index myIndex on syudent (sname,slog); -- 或
alter table student add index myIndex(sname);
数据库的权限(DCL)DBA数据库管理员
-- 权限:select insert delete update drop create 或 all
grant select,drop on mydb.`emp` to 'zhangsan'@'localhost' identified by '123456';
-- mydb.* mydb库下的下的所有表
-- ** 所有库习的所有表
远程登录数据库
-- 1.切换库
use mysql;
-- 2.授权远程访问
grant all pribileges on *.* to 'root'@'%' identified by '123456' with grant option; -- 授权所有用户所有表将root改为%
-- 3.刷新
flush privileges;
-- 4.退出mysql
exit;
-- 5.启用服务
service mysqld start;
-- 6.查看状态
service mysqld status;
-- 7.远程登录
mysql -h192.168.17.123 -p3306 -uroot -p123456