欢迎投稿

今日深度:

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

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


Mysql视图

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

创建视图:

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

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

如果在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);

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

动态插入:

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;

执行结果:

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<expr2返回0

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@');

执行结果:

 

处理数字内置函数

1.ABS(X)

返回X的绝对值

select ABS(-1);

执行结果:

2.ACOS(X)

返回X的反余弦值(X为弧度)

select ACOS(0.25);

执行结果:

3.ASIN(X)

求反正弦值(X为弧度)

select ASIN(0.25);

执行结果:

4.ATAN(X)

求反正切值(X为弧度)

select ATAN(2.5);

执行结果:

5.ATAN2(Y,X)

求反正切值(Y,X为弧度)

select ATAN2(-0.8,2);

执行结果:

6.AVG(expr)

计算平均值,expr为一个字段

7.CEIL(X)

返回大于或等于X的最小整数

select CEIL(3.789);

执行结果:

 

8.CEILING(X)

返回大于或等于X的最小整数

select CEILING(3.256);

执行结果:

9.COS(X)

求余弦值(X为弧度)

10.COT(X)

求余切值(X为弧度)

11.COUNT(expr)

返回查询的记录总数,expr为一个字段或者*号

12.DEGREES(X)

将弧度转换为角度

select DEGREES(3.141592);

执行结果:

13.n DIV m

整除,n为被除数,m为除数

select 15.5 DIV 3;

执行结果:

14.EXP(X)

返回e的X次方

select EXP(2);

执行结果:

15.GREATEST(value1,value2,...)

返回列表的最大值

select GREATEST(1,7,8,9,-2,6,0);

执行结果:

比较字符串

select GREATEST('%^','1234','awsl');

执行结果:

16.LEAST(value1,value2,...)

返回列表中的最小值

select LEAST(1,2,-3,0);

执行结果:

比较字符串

select LEAST('App','Abc','Abb');

执行结果:

17.LN(X)

返回数字的自然对数

select LN(6);

执行结果:

18.LOG(X)

返回自然对数(以e为底的对数)

select LOG(2);

执行结果:

19.LOG2(X)

返回以2为底的对数

20.LOG10(X)

返回以10为底的对数

21.MAX(expr)

返回字段expr中的最大值

22.MIN(expr)

返回字段expr中的最小值

23.MOD(N,M)

返回N除以M以后的余数

select MOD(10,3);

执行结果:

24.PI()

返回圆周率

select PI();

执行结果:

25.POW(X,Y)

返回X的Y次方

select POW(2,3);

执行结果:

26.POWER(X,Y)

返回X的Y次方

select POWER(2,3);

执行结果:

27.RADIANS(X)

将角度转化为弧度

select RADIANS(180);

执行结果:

28.RAND()

返回0-1的随机数

select RAND();

执行结果:

29.ROUND(X)

返回距离X最近的整数

select ROUND(1.456);

执行结果:

30.SIGN(X)

返回X的符号,X是负数,返回-1,X是正数,返回1,X是0,返回0

select SIGN(-6),SIGN(0),SIGN(6);

执行函数:

31.SIN(X)

求正弦值(参数是弧度)

32.SQRT(X)

返回平方根

select SQRT(4);

执行函数:

33.SUM(expr)

返回指定字段的总和

34.TAN(X)

求正切值(参数是弧度)

35.TRUNCATE(X,D)

返回数值X保留到小数点后D位的值(与ROUND最大的区别是不会进行四舍五入)

select TRUNCATE(1.2356,3);

执行结果:

 

处理时间内置函数

1.ADDDATE(expr,days)

计算起始日期expr加上days天的日期

select ADDDATE('2019-10-1',INTERVAL 10 DAY);

执行结果:

2.ADDTIME(expr1,expr2)

时间expr1加上expr2秒的时间

select ADDTIME('2019-10-1 12:35:20',20);

执行结果:

3.CURDATE();

返回当前日期

select CURDATE();

执行结果:

4.CURRENT_DATE()

返回当前日期

select CURRENT_DATE();

执行结果:

5.CURRENT_TIME

返回当前时间

select CURRENT_TIME;

执行结果:

6.CURRENT_TIMESTAMP()

返回当前时间和日期

select CURRENT_TIMESTAMP();

执行结果:

7.CURTIME()

返回当前时间

select CURTIME();

执行结果:

8.DATE(expr)

从日期或日期表达式中提取日期值

select DATE('2019-10-6');

执行结果:

9.DATEDIFF(expr1,expr2)

计算日期expr1->expr2之间相隔的天数

select DATEDIFF('2019-10-1','2019-10-16');

执行结果:

10.DATE_ADD(date,INTERVAL expr unit)

计算起始日期date加上一个时间段后的日期

select DATE_ADD('2012-5-21 11:21:23',INTERVAL 5 MINUTE);

执行结果:

11.DATE_FORMAT(date,format)

按表达式format的要求显示日期date

select DATE_FORMAT('2012-5-9 23:50:49','%Y-%m-%d %r');

执行结果:

 

12.DATE_SUB(date,INTERVAL expr unit)

函数从日期减去指定的时间间隔

select DATE_SUB('2019-5-6 17:55:20',INTERVAL 7 DAY);

执行结果:

13.DAY(date)

返回日期值date的日期部分

select DAY('2019-6-9');

执行结果:

select DAYOFMONTH('2019-10-15 21:55:32');

14.DAYNAME(date)

返回日期date是星期几,如Monday,Tuesday等

select DAYNAME('2019-10-28 12:59:59');

执行结果:

15.DAYOFMONTH(date)

计算日期date是本月的第几天

select DAYOFMONTH('2019-10-15 21:55:32');

执行结果:

16.DAYOFWEEK(date)

计算date今天是周几

select DAYOFWEEK('2019-10-15 21:55:32');

执行结果:

17.DAYOFYEAR(date)

计算日记date是本年的第几天

select DAYOFYEAR('2019-10-15 21:55:32');

执行结果:

18.EXTRACT(unit FROM date)

从日期date中获得指定的值,unit指定返回的值,unit可取得值为:

MICROSECOND、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER、YEAR、SECOND_MICROSECOND、MINUTE_MICROSECOND、MINUTE_SECOND、HOUR_MICROSECOND、HOUR_SECOND、HOUR_MINUTE、DAY_MICROSECOND、DAY_SECOND、DAY_MINUTE、DAY_HOUR、YEAR_MONTH

19.FROM_DAYS(N)

计算0000年1月1日开始N天后的日期

select FROM_DAYS(1111);

执行结果:

20.HOUR(time)

返回time中的小时值

select HOUR('2019-7-8 21:48:20');

执行结果:

21.LAST_DAY(date)

返回给定日期的那一月份的最后一天

select LAST_DAY('2019-10-17 21:18:32');

执行结果:

22.LOCALTIME()

返回当前日期和时间

select LOCALTIME();

执行结果:

23.LOCALTIMESTAMP()

返回当前日期和时间

select LOCALTIMESTAMP();

执行结果:

24.MAKEDATE(year,dayofyear)

基于给定参数年份year和所在年中的天数序号dayofyear返回一个日期

select MAKEDATE(2019,300);

执行结果:

25.MAKETIME(hour,minute,second)

返回时间,参数为小时、分钟、秒

select MAKETIME(18,2,48);

执行结果:

26.MICROSECOND(expr)

返回日期参数所对应的微秒数

select MICROSECOND('2019-4-5 14:26:20.30');

执行结果:

27.MINUTE(time)

返回time中的分钟值

select MINUTE('2019-4-5 14:26:20');

执行结果:

28.MONTHNAME(date)

返回日期当中的月份名称

select MONTHNAME('2019-4-5 14:26:20');

执行结果:

29.MONTH(date)

返回日期的月份值(1-12)

30.NOW()

返回当前日期和时间

31.PERIOD_ADD(P,N)

为年-月 组合日期添加一个时段

select PERIOD_ADD(201910,3);

执行结果:

32.PERIOD_DIFF(P1,P2)

返回两个时段之间的月份差值

select PERIOD_DIFF(201910,202003);

执行结果:

33.QUARTER(date)

返回日期date是第几季节,1-4

select QUARTER('2019-4-5 14:26:20');

执行结果:

34.SECOND(time)

返回time的秒钟值

select SECOND('2019-4-5 14:26:20');

执行结果:

35.SEC_TO_TIME(seconds)

将秒为单位的时间seconds转化为时分秒的格式

select SEC_TO_TIME(15164);

执行结果:

36.STR_TO_DATE(str,format)

将字符串转变为日期

select STR_TO_DATE('April 4 2019','%M %d %Y');

执行结果:

37.SUBDATE(expr,days)

日期date减去日期days

select SUBDATE('2019-7-5 21:45:20',5);

执行结果:

38.SUBTIME(expr1,expr2)

时间expr1减去expr2秒的时间

select SUBTIME('2019-7-5 21:45:20',5);

执行结果:

39.SYSDATE()

返回当前日期和时间

40.TIME(expr)

提取传入表达式的时间部分

select TIME('2019-4-5 14:26:20');

执行结果:

41.TIME_FORMAT(time,format)

按表达式format的要求显示时间time

select TIME_FORMAT('2019-4-5 14:26:20','%r');

执行结果:

42.TIME_TO_SEC(time)

将时间time转化为秒

select TIME_TO_SEC('14:26:20');

执行结果:

43.TIMEDIFF(expr1,expr2)

计算时间差值

select TIMEDIFF('14:26:20','15:26:20');

执行结果:

44.TIMESTAMP(expr1,expr2)

单个参数时,函数返回日期或日期时间表达式;有两个参数时,将参数加合

select TIMESTAMP('2019-4-5 14:26:20'),TIMESTAMP('2019-4-5','15:20:6');

执行结果:

45.TO_DAYS(date)

计算日期date距离0000年1月1日的天数

select TO_DAYS('2019-4-5 14:26:20');

执行结果:

46.WEEK(date)

计算日期date是本年的第几个星期,范围是0-53

select WEEK('2019-4-5 14:26:20');

执行结果:

47.WEEKDAY(date)

返回日期date是星期几

select WEEKDAY('2019-4-5 14:26:20');

执行结果:

48.WEEKOFYEAR(date)

计算日期date是本年的第几个星期,范围是0-53

select WEEKOFYEAR('2019-4-5 14:26:20');

执行函数:

49.YEAR(date)

返回年份

50.YEARWEEK(date,mode)

返回年份及第几周(0-53),mode中0表示周末,1表示周一,2表示周二...

select YEARWEEK('2019-4-5',12);

执行结果:

www.htsjk.Com true http://www.htsjk.com/Mysql/37762.html NewsArticle Python学习日记(三十八) Mysql数据库篇 六, Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询。...
相关文章
    暂无相关文章
评论暂时关闭