mysql复习

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

什么是视图

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

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=1name='张三'money=23.01}

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: mysql