
开始之前推荐一篇实用的文章:《H5 App实战四:H5 App的跨域请求与数据交互》,作者:【china马斯克】。
https://cloud.tencent.com/developer/article/2470348
在H5 App开发中,通过配置代理服务器或使用JavaScriptBridge等方法,可以解决跨域问题,实现与后端或其他应用的数据交互。这篇文章介绍了这些技术和方法对于提升H5 App的交互性和用户体验具有重要意义。是非常好的一篇H5 APP实战文章。
接下来开始我们的正文。
视图( view )是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。其内容由查询定义。 基表:用来创建视图的表叫做基表。 通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。
视图主要用来做优化的。通常使用select来构建视图表,而很少使用update、delete、insert,因为限制特别多,容易出错。
一般,视图只做查询,不做更删改。
CREATE VIEW <视图名> AS <SELECT语句>示例:
create view vt1 as select A.student_id from
(
(select student_id,num from score where course_id=(
select `cid` from `course` where cname='linux c/c++')) as A
left join
(select student_id,num from score where course_id=(
select `cid` from `course` where cname='mysql')) as B
on A.student_id=B.student_id
) WHERE A.num>if(isnull(B.num),0,B.num);
select * from vt1;触发器是具备事务性的。
触发器(trigger)是 MySQL 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行 DML 操作( insert , delete ,update )时就会激活它执行。
(1)监视对象:table (2)监视事件:insert 、update 、delete (3)触发时间:before , after (4)触发事件:insert 、update 、delete
CREATE TRIGGER trigger_name trigger_time trigger_event ON table_name FOR EACH ROW [trigger_order]
trigger_body -- 此处写执行语句trigger_body:可以一个语句,也可以是多个语句;多个语句写在 BEGIN … END 间。 trigger_time:{ BEFORE | AFTER } trigger_event:{ INSERT | UPDATE | DELETE } trigger_order:{ FOLLOWS | PRECEDES } other_trigger_name
示例:
CREATE TABLE `work` (
`id` INT PRIMARY KEY auto_increment,
`address` VARCHAR (32)
) DEFAULT charset = utf8 ENGINE = innoDB;
CREATE TABLE `time` (
`id` INT PRIMARY KEY auto_increment,
`time` DATETIME
) DEFAULT charset = utf8 ENGINE = innoDB;
CREATE TRIGGER trig_test1 AFTER INSERT
ON `work` FOR EACH ROW INSERT INTO `time` VALUES(NULL,NOW());(1)在INSERT型触发器中,NEW 用来表示将要( BEFORE )或已经( AFTER )插入的新数据。
(2)在DELETE型触发器中,OLD 用来表示将要或已经被删除的原数据。
(3)在 UPDATE 型触发器中, OLD 用来表示将要或已经被修改的原数据, NEW 用来表示将要或已经修改为的新数据。
NEW.columnName (columnName为相应数据表某一列名)
OLD.columnName (columnName为相应数据表某一列名)delimiter是mysql分隔符,在mysql客户端中分隔符默认是分号 ; 。如果一次输入的语句较多,并且语句中间有分号,这时需要重新指定一个特殊的分隔符。 通常指定 $$ 或 ||。
在下订单的时候,对应的商品的库存量要相应的减少,即买几个商品就减少多少个库存量。
准备表结构和表数据:
CREATE TABLE `goods` (
`id` INT PRIMARY KEY auto_increment,
`name` VARCHAR (32),
`num` SMALLINT DEFAULT 0
);
CREATE TABLE `order` (
`id` INT PRIMARY KEY auto_increment,
`goods_id` INT,
`quantity` SMALLINT COMMENT '下单数量'
);
INSERT INTO goods VALUES (NULL, 'C++', 40);
INSERT INTO goods VALUES (NULL, 'C', 63);
INSERT INTO goods VALUES (NULL, 'mysql', 87);
INSERT INTO goods VALUES (NULL, 'linux', 90);
INSERT INTO `order` VALUES (NULL, 1, 3);
INSERT INTO `order` VALUES (NULL, 2, 4);(1)场景1:客户修改订单购买的数量,在原来购买数量的基础上减少2个。
delimiter //
CREATE TRIGGER trig_order_1 AFTER INSERT
ON `order` FOR EACH ROW
BEGIN
UPDATE goods SET num = num - 2 WHERE id = 1;
END//
delimiter ;
--测试
INSERT INTO `order` (`goods_id`,`quantity`) VALUES(1,2);
select * from goods where goods_id=1;
select * from `order`;(2)场景2:客户修改订单购买的数量,商品表的库存数量自动改变。
delimiter //
CREATE TRIGGER trig_order_3 BEFORE UPDATE
ON `order` FOR EACH ROW
BEGIN
UPDATE goods SET num=num+old.quantity - new.quantity WHERE id = new.goods_id;
END
//
delimiter ;
-- 测试
UPDATE `order` SET quantity = quantity+2 WHERE id= 1;语法:
CREATE USER username username@host IDENTIFIED BY password;host 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost ,如果想让该用户可以从任意远程主机登陆,可以使用通配符 % 。
语法:
GRANT privileges ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;privileges :用户的操作权限,如SELECT , INSERT ,UPDATE 等,如果要授予所的权限则使用ALL。
databasename.tablename 如果是 . 表示任意数据库以及任意表。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION 选项导致后来该用户不能使用 GRANT 命令创建用户或者给其它用户授权。 如果不想这个用户有这个 grant 的权限,则不要加该 WITH GRANT OPTION 选项。
GRANT select, SHOW VIEW ON `databasename`.`tablename` to 'username'@'host';修改权限后需要刷新权限。
FLUSH PRIVILEGES;步骤: (1)注释 mysqld.cnf 中 bind-address 。
-- mysqld.cnf
# vi /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address=127.0.0.1(2)修改 mysql.user 表。
-- 修改user表
select `user`, `host` from `mysql`.`user`;
update user set host='%' where user='root';(3)然后重启 mysql。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。