Python学习日记(三十八) Mysql数据库篇 六

Mysql视图

假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询。

创建视图:

CREATE VIEW passtview AS SELECT
student_id,
course_id,
number 
FROM
    scoretable 
WHERE
    number >= 60;

执行语句后,可以在左边的视窗中看到刚创建的视图表

Python学习日记(三十八) Mysql数据库篇 六_第1张图片

如果在scoretable中插入一条数据,视图中也会随之增加。因为scoretable它的本质是一张物理表,即真实存在,而视图它是一个虚拟的表格,在视图中的数据都是从物理表中动态的读取出来,因此本质上视图中的数据自己是不能去修改。

修改视图:

ALTER VIEW passtview AS SELECT
student_id,
course_id,
number 
FROM
    scoretable 
WHERE
    number < 60;

删除视图:

DROP VIEW passtview;

 

Mysql触发器

当某张表要做增删改操作时,可以使用触发器来自定义关联行为;当使用插入方法时能使用NEW关键字添加新数据,删除方法时能使用OLD关键字添加老数据,更新时可以使用OLD和NEW关键字去添加新老数据。

删除触发器

drop trigger t1;

插入前

delimiter //                                           -- 将结束符改成//
CREATE TRIGGER t1 BEFORE INSERT ON studenttable FOR EACH ROW
BEGIN
        INSERT INTO teachertable (tname) VALUES ('akj');
END //
delimiter ;                                             -- 将结束符改成 ;

再在学生表中加入一个新的数据

insert into studenttable(sname,gender,class_id) values('Jxson','',2),('Jxsons','',3);

可以看到学生表在添加了两个数据之后,教师表中也增加了相应个数的数据

Python学习日记(三十八) Mysql数据库篇 六_第2张图片

动态插入:

delimiter //
CREATE TRIGGER t1 BEFORE INSERT ON studenttable FOR EACH ROW
BEGIN
        INSERT INTO teachertable (tname) VALUES (new.sname);    
END // 
delimiter ;

加入数据

insert into studenttable(sname,gender,class_id) values('实习老师1','',2),('实习老师2','',4)

通过这种动态插入会让两张表加入的数据相同

插入后 

CREATE TRIGGER t1 AFTER INSERT ON studenttable FOR EACH ROW
BEGIN
        ...
END

删除前

CREATE TRIGGER t1 BEFORE DELETE ON studenttable FOR EACH ROW
BEGIN
        ...
END

删除后

CREATE TRIGGER t1 AFTER DELETE ON studenttable FOR EACH ROW
BEGIN
        ...
END

更新前

CREATE TRIGGER t1 BEFORE UPDATE ON studenttable FOR EACH ROW
BEGIN
        ...
END

更新后

CREATE TRIGGER t1 AFTER UPDATE ON studenttable FOR EACH ROW
BEGIN
        ...
END

 

Mysql函数

处理字符串内置函数

1.CHAR_LENGTH

计算字符串中字符的个数

select CHAR_LENGTH('string');

执行结果:

2.CONCAT(str1,str2,...)

将所有的字符串进行拼接

select CONCAT('abc','123','!@#$')

执行结果:

如果里面有NULL存在,就返回NULL

select CONCAT('abc','123','!@#$',NULL)

执行结果:

3.CONCAT_WS(separator,str1,str2,...)

自定义字符串拼接的方式,会忽略NULL,separator是分隔符

select  CONCAT_WS(' + ','string1','string2',NULL,'string3');

执行结果:

4.CHARACTER_LENGTH(str)

返回字符串的字符数

SELECT CHARACTER_LENGTH('abc a');

执行结果:

5.ASCII(str)

返回字符串第一个字符的ASCII值

select ASCII(tname) from teachertable;

执行结果:

Python学习日记(三十八) Mysql数据库篇 六_第3张图片

6.FIELD(str,str1,str2,str3,...)

返回第一个字符串str在字符串列表(str1,str2...)中的位置

select FIELD('cas','cas','a','b','cas');

执行结果:

7.FIND_IN_SET(str,strlist)

返回字符串s2与s1匹配的字符串位置

select FIND_IN_SET('hi12','abc,wcs,hi12,ssw')

执行结果:

8.FORMAT(X,D)

函数将数字x进行格式化“#,###.##”,将x保留到小数点后n位,最后一位四舍五入,X为输入的浮点数,D为保留的小数位

select FORMAT(1348922.7777777,5)

执行结果:

9.INSERT(s1,x,len,s2)

将字符串s2替换s1的x位置开始长度为len的字符串

select INSERT('11111111',3,3,'###')

执行结果:

10.LOCATE(substr,str)

从字符串substr中获取str开始的位置

select LOCATE('aaa','111aaa111aaa1111');

执行结果:

11.LCASE(str)

按字符串str的所有字母变成小写字母 

select LCASE('aABaswQOP');

执行结果:

12.LEFT(str,len)

返回字符串str的前n个字符

select LEFT('abcde',3);

执行结果:

13.LOWER(str)

将所有字符串str的所有字母变成小写字母

select LOWER('aABCS 1AASDa')

执行结果:

14.LPAD(str,len,padstr)

在字符串str的开始处填充字符串padstr,使字符串长度达到len

select LPAD('abc',10,'#@$')

执行结果:

15.LTRIM(str)

去掉字符串str的空格

select LTRIM(' ## ## ## ')

执行结果:

16.MID(str,pos,len)

从字符串str的pos位置截取长度为len的子字符串,同SUBSTRING

select MID('abcdefg',-3,3

执行结果:

17.POSITION(substr IN str)

从字符串substr中获取s1的开始位置

select POSITION('#' IN 'a#fg#a');

执行结果:

18.REPEAT(str,count)

将字符串str重复count次

select REPEAT('@_@',3);

执行结果:

19.REPLACE(str,from_str,to_str)

将字符串to_str替代字符串str中的from_str

select REPLACE('1aaaaaa1','a','#');

执行结果:

20.REVERSE(str)

反转字符串str

select REVERSE('abc123');

执行结果:

21.RIGHT(str,len)

返回字符串str的后len个字符

select RIGHT('abcd123',4)

执行结果:

22.RPAD(str,len,padstr)

在字符串str的结尾处添加字符串padstr,使字符串的长度达到len

select RPAD('vvvvv',10,'$%^');

执行结果:

23.SPACE(N)

返回N个空格

select SPACE(5);

执行结果:

24.STRCMP(expr1,expr2)

比较字符串expr1和expr2,如果expr1与expr2相等返回0,如果expr1>expr2返回1,如果expr1

select STRCMP('abc','a'),STRCMP('abc','abc'),STRCMP('a','abc');

执行结果:

25.SUBSTR(str,pos,len)

从字符串str的pos位置截取长度为len的子字符串

select SUBSTR('abcdefg',2,3)

执行结果:

26.SUBSTRING(str,pos,len)

从字符串str的pos位置截取长度为len的子字符串

select SUBSTRING('abcedfg',2,3);

执行结果:

27.SUBSTRING_INDEX(str,delim,count)

返回从字符串str的第count个出现的分隔符delim之后的字串,如果count > 0,返回第count个字符左边的字符串,如果count < 0,返回第count的绝对值(从右开始数)个字符右边的字符串

select SUBSTRING_INDEX('a*b*c*d*e','*',2),SUBSTRING_INDEX('a*b*c*d*e','*',-2)

执行结果:

28.TRIM(str)

去掉字符串开头和结尾的空格,除此之外还有LTRIM和RTRIM函数

select TRIM(' as  asa s as  ');

执行结果:

29.UCASE(str)

将字符串转成大写,UPPER函数也有相同的功能

select UCASE('abc1@');

执行结果:

处理数字内置函数

 

 

 

 

自定义函数

 

 

你可能感兴趣的:(Python学习日记(三十八) Mysql数据库篇 六)