每日一问?

什么是视图?

视图是两张有外键约束的表,显示所有的列,有些是重复的,把需要的字段显示出来

SELECT * FROM account a,orderlist o WHERE a.id=o.aid;

--创建视图account_orderlist

CREATE VIEW account_orderlist(account_id,account_name,orderlist_number) AS

SELECT

a.id,

a.name,

o.number

FROM

account a,

orderlist o

WHERE

a.id=o.aid;

--查看视图

SELECT * FROM account_orderlist;

查询结果后面没有null

--修改视图 (修改视图中的列的值)

SELECT * FROM account_orderlist;

UPDATE account_orderlist SET account_name="" WHERE account_id=2;

--修改视图(修改视图中的列名)

SELECT * FROM account_orderlist;

修改视图中的列名用ALTER

ALTER VIEW account_orderlist (account_id,account_name,number) AS

SELECT

FROM

WHERE

;

--删除视图

删除用DROP 视图用VIEW 视图名称

DROP VIEW IF EXISTS account_orderlist;

DROP VIEW account_orderlist IF EXISTS; X

选中sql语句,点击运行,视图被删除,对原表account,orderlist数据没有影响。

--存储过程查单词,记个框架,符号怎么放,其他的就是基础语法。

怎么删?类似于视图怎么删?用 PROCEDURE mysql.proc 为什么存储过程用mysql.proc??????

DELIMITER$

CREATE PROCEDURE stu_group()

BEGIN

SQL语句

END$

DELIMITER;

存储过程与变量

DELIMITER$

CREATE PROCEDURE acc_order()

BEGIN

--定义一个字符串类型的变量,并赋值默认值

DECLARE name VARCHAR(20);

--为变量赋值

SET name='存储过程';

--使用变量

SELECT name;

END$

DELIMITER;

--调用存储过程

CALL acc_order();

name

存储过程

男女同学的总分数

SELECT SUM(score) getSum INTO women FROM student WHERE gender='女';

DECLARE men ,women int;

--查询student表中男生的总分数,并赋值给变量men

SELECT SUM(score) INTO men FROM student WHERE gender='男';

--查询student表中女生的总分数,并赋值给变量women

SELECT SUM(score) INTO women FROM student WHERE gender='女';

--使用变量men,women

SELECT men,women;

日志表怎么写?为什么写?

id operation operation_id operation_time operation_params

int INSERT 1 (account表) 系统时间 做的事情:记录

CREATE TABLE account_log(

id INT PRIMARY KEY AUTO_INCREMENT,

operation_id INT,

operation_time DATETIME,

operation_params VARCHAR(255)

);

注意:

DATETIME格式为:yyyy-MM-dd HH:mm:ss SSS

注意:DOUBLE,LONG,FLOAT,,,可以直接写,bigint ??????

触发器怎么写?

先写个结束分割符

DELIMITER$

DELIMITER;

在结束分割符里面写创建一个触发器,叫什么名字 触发器名字一般取表名_触发器类型

CREATE TRIGGER account_insert

做了什么操作

INSERT

做的这个操作属于之前有数据变动还是之后,对原表的影响

AFTER INSERT

做了之前/之后,对哪张表

ON account

表中数据一行一行展示:无论添加,删除,更新

FOR EACH ROW

开始

结束$ 这里是$

BEGIN

END$

为什么要用$结束???

重写一遍?

结束分割符

DELIMITER$ 与上面的SQL语句划线

创建触发器,取一个名字,取名: 表名_触发器类型 不能用表名.触发器类型 mysql.proc 表示mysql数据库中的proc表

CREATE TRIGGER account_update 没有括号

做了什么操作

???? UPDATE

对哪张表

ON account

表的哪一行影响

FOR EACH ROW

开始,结束

BEGIN

开始和结束之间,触发器做的事情

触发器做的功能; 分号结束

END$

DELIMITER;

AFTER INSERT

BEFORE DELETE

UPDATE ????用什么

结束分割符之间

创建触发器

触发器做的操作

对哪张表,

对表的哪一行

开始和结束之间

触发器的功能; 也就是 operation_params?

触发器怎么写?

account表

对account表进行触发器操作,会有一个日志记录表

account_log日志表

CREATE TABLE account_log(

id INT PRIMARY KEY AUTO_INCREMENT,

做了什么操作

operation VARCHAR(20),

对象是谁

operation_id INT,

时间

operation_time DATETIME,

内容记录

operation_params VARCHAR(200)

);

运行结果:略

现在来写个触发器

流程是:

先写个结束分割符

DELIMITER$

CREATE TRIGGER account_insert

AFTER INSERT

ON account

FOR EACH ROW

DELIMITER;

在结束分隔符里面,创建一个触发器,取名字,

注意,取名字有要求,对哪个表,进行什么触发器名字; 不能用account.insert 例如mysql.proc 是数据库里面的proc表

把下面写的语句装进上面的语句中

CREATE TRIGGER account_insert 注意:没有括号

创建完触发器的名字,接下来就说明进行了什么触发器操作,对哪张表,表的哪一行

AFTER INSERT

注意:为什么 INSERT 用AFTER ? 插入之后对表有影响,表多了一行数据而已。

ON account

FOR EACH ROW

交代完了创建触发器,对哪张表,对表的每行,

接下来是写触发器执行的功能,写个开始,结束的分隔符,为什么用$

BEGIN

插入日志表中的数据规定格式,NULL,'INSERT',时间,

INSERT INTO account_log(

account表中的id为自增,填null,数据库设置会自增

类似于 timestamp: not null, 填null,系统会自增

--explicit_defaults_for_timestamp=1

下面写

)

END$

注意:

创建完account表,DESC account; 查看表的结构,对着表的结构写

NULL:

'INSERT':触发器的类型

时间:类型为DATETIME : NOW()

对象: new.id 新的id,新插入的数据的id

做的事情:用concat()函数,拼接字符串

INSERT INTO account VALUES(NULL,'INSERT',NOW(),new.id,CONCAT(怎么写?) );

account_log表字段:

id,operation触发器类型,操作时间,操作account表哪个id,operation_params

CONCAT('11','22','33');

112233

CONCAT_WS(',','11','22'); CONCAT WITH SEPARATOR

11,22

CONCAT('','','','')

CONCAT('插入后{id=','name=','money=','}');

CONCAT('插入后{id=',new.id,'name=',new.name,'money=',new.money'}')

new.id:int

new.name:varchar

new.money:double

是变量值

和字符串做拼接的话,变成一个字符串

插入后{id=1,name='张三',money=23.01}

CONCAT('插入后{id=',new.id,'name=',new.name,'money=',new.money,'}')

打印出来的:

插入后{id=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值