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','','!@#$')
执行结果:
如果里面有NULL存在,就返回NULL
select CONCAT('abc','','!@#$',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('',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('%^','','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);
执行结果:
Python学习日记(三十八) Mysql数据库篇 六的更多相关文章
- Python学习日记(三十九) Mysql数据库篇 七
Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...
- Python学习日记(三十五) Mysql数据库篇 三
使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...
- Python学习日记(三十四) Mysql数据库篇 二
外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务 ...
- Python学习日记(四十二) Mysql数据库篇 十
前言 当我们自己去写SQL代码的时候有时候会因为不熟练会导致效率低,再之后要进行许多的优化,并且操作也较为繁琐.因此ORM框架就能够解决上面的问题,它能根据自身的一些规则来帮助开发者去生成SQL代码. ...
- Python学习日记(三十六) Mysql数据库篇 四
MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...
- Python学习日记(二十八) hashlib模块、configparse模块、logging模块
hashlib模块 主要提供字符加密算法功能,如md5.sha1.sha224.sha512.sha384等,这里的加密算法称为摘要算法.什么是摘要算法?它又称为哈希算法.散列算法,它通过一个函数把任 ...
- Python学习(三十八)—— Djago之Ajax
转载自:http://www.cnblogs.com/yuanchenqi/articles/7638956.html 一.Ajax准备知识:json 什么是json? 定义: JSON(JavaSc ...
- Python学习札记(三十八) 面向对象编程 Object Oriented Program 9
参考:多重继承 NOTE #!/usr/bin/env python3 class Animal(object): def __init__(self, name): self.name = name ...
- Python学习日记(三十二) hmac检验客户端的合法性和socketsever模块
Hmac模块 其实这个模块类似hashlib模块,它能将一些重要的信息通过算法加密成密文,让信息更具有安全性. 关于hmac加密算法的了解:它的全名是哈希运算消息认证码(Hash-based Mess ...
随机推荐
- fork()和vfork()的区别(转载)
fork和vfork 转载 http://coolshell.cn/articles/12103.html 在知乎上,有个人问了这样的一个问题--为什么vfork的子进程里用return,整个程序会挂 ...
- jQuery事件绑定与切换
一.事件绑定 1.标准方式 1. jquery标准的绑定方式 * jq对象.事件方法(回调函数): * 注:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为. * 表单对象.submit(); ...
- C语言实现linux之who功能
/* who_test.c */ #include<stdio.h> #include<string.h> #include<getopt.h> #include& ...
- JavaScriptDOM编程学习笔记(二)图片库案例
<JavascriptDOM编程艺术>提供一个图片库的demo,主要讲解如何更好的使用JavaScript在网页中,跟随作者的思路来分析一下这个案例 首先需求是将图片发布到网上,但是如果发 ...
- vue package-lock.json
npm5之后安装文件之后会多出一个package-lock.json的文件,它的作用是: 1. 安装之后锁定包的版本,手动更改package.json文件安装将不会更新包,想要更新只能使用 npm i ...
- docker镜像编码注意事项
第一步:下面这些话如果你不知道我在说什么,只管粘贴复制然后按回车键等待执行完成就行,一步步来不要着急. 首先安装docker,ubuntu18.04安装docker很简单只需要 一行命令 wget - ...
- 怎么删除iOS模拟器上的应用程序?
怎么删除iOS模拟器上的应用程序: 和手机上一样,鼠标长按,点击删除 xcode 卸载模拟器 Simulator:删除目录/Library/Developer/CoreSimulator/Profil ...
- 此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。
访问者所使用的浏览器不能完全支持页面里的脚本,形成“脚本错误”.遇到“脚本错误”时一般会弹出一个非常难看的脚本运行错误警告窗口,而事实上,脚本错误并不会影响网站浏览,因此这一警告可谓多此一举.要关闭警 ...
- 数据库连接池, websocket
转自: https://www.cnblogs.com/xiao987334176/p/9605536.html 一.DButils 什么是数据库连接池 数据库连接池负责分配.管理和释放数据库连接,它 ...
- PHP生成正则表达式的类
正则表达式,写起来还是比较费劲的,于是封装个类,初稿,抛砖引玉. 关于正则,建议参考 https://github.com/CyC2018/CS-Notes/blob/master/notes/%E6 ...