场景
基础知识回顾:mysql中视图的基础使用以及常见运算符的使用示例。
注:
博客:
霸道流氓气质
实现
Mysql中视图的使用
视图的创建
CREATE VIEW stu_view AS
SELECT * FROM bus_student;
视图查询
SELECT * FROM stu_view;
查看视图基本信息
SHOW TABLE STATUS LIKE 'stu_view';
执行结果显示,表的 Comment 的值为 VIEW 说明该表为视图,其他信息为 NULL 说明这是一个虚表。
查看视图详细信息
执行结果显示视图的名称、创建视图的语句等信息
SHOW CREATE VIEW stu_view;
修改视图
使用 CREATE OR REPLACE VIEW 语句可以修改视图。当视图存在时可以对视图进行修改,当视图不存在时可以创建视图。
CREATE OR REPLACE VIEW stu_view AS
SELECT id,name,age FROM bus_student;
除了可以使用 CREATE OR REPLACE 修改视图以外,用户还可以使 ALTER 修改
ALTER VIEW stu_view AS
SELECT id,name FROM bus_student;
更新视图
CREATE OR PLAC ALTER 主要是对视图的结构进行修改,其实在 MySQL 中还可以对视图内
容进行更新,也就是对视图进 UPDATE 操作,通过视图增加、删除、修改数据表中的数据,当然对视图
的更新操作实际上是对数据表进行操作
UPDATE stu_view SET name='公众号:霸道的程序猿' WHERE id =1;
当视图中包含以下内容时视图的更新操作不能被执行
视图中不包含基表中被定义为非空的列
在定义视图的 SELECT 语句后的字段列表中使用了数学表达式。
在定义视图的 SELECT 语句后的字段到表中使用了聚合函数。
在定义视图的 SELECT 语句中使用了 DISTINCT UNION TOP GROUP BY HAVING 子句
注意:虽然修改视图的方法有很多,但不建议对视图频繁修改,一般将视图作为虚拟表未完成查询操作
删除视图
DROP VIEW IF EXISTS stu_view;
Mysql 常用的运算符
算数运算符
CREATE TABLE test1(a INT);
INSERT INTO test1 VALUES(10);
SELECT a,a+10,a-1+2,a+10.5,a*2,a/2,a/3,a%3,a/0 FROM test1;
运行结果
10 20 11 20.5 20 5.0000 3.3333 1 NULL
比较运算符=
SELECT5=6,'8'=8,'0.02'=0,'badao'='badao',(1+6)=(2+5),NULL=NULL;
运行结果
0 1 0 1 1
-- 在进行数值比较时有以下规则
-- 若有一个或两个操作数为 NULL,则比较运算的结果为 NULL
-- 若同一个比较运算中的两个操作数都是字符串,则按照字符串进行比较。
-- 若两个操作数均为整数,则按照整数进行比较
-- 若一个字符串和一个数字进行相等判断,则 MySQL可以自动将字符串转换为数字。
安全等于运算符<=>
具有=运算符的所有功能,不同的是<=>可以用来判断 NULL 值。当两个操作数均为
NULL 其返回值为1,而不为 NULL; 当其中一个操作数为 NULL 时,其返回值为0,而不为 NULL
SELECT5<=>6,'8'<=>8,'0.02'<=>0,'badao'<=>'badao',(1+6)<=>(2+5),NULL<=>NULL;
运行结果
0 1 0 1 1 1
不等于运算符<> 或者!=
用来判断左边的操作数是否小于等于右边的操作数,如果小于或等于,返回值为1 ,否则返回值0
注意<=不能用于判断空值
SELECT'badao'<='badao',5<=6,8<=8,8.8<=8,(1+2)<=(1+3),NULL<= NULL;
运行结果
1 1 1 0 1 NULL
小于运算符<
SELECT 'badao'<'badao',5<6,8<8,8.8<8,(1+2)<(1+3),NULL<NULL;
运行结果
0 1 0 0 1 NULL
大于或等于运算符>=
SELECT'badao'>='badao',5>=6,8>=8,8.8>=8,(1+2)>=(1+3),NULL>=NULL;
运行结果
1 0 1 1 0 NULL
大于运算符>
SELECT 'badao'>'badao',5>6,8>8,8.8>8,(1+2)>(1+3),NULL>NULL;
运行结果
0 0 0 1 0 NULL
IS NULL 、IS NOT NULL 运算符
SELECT NULL IS NULL,ISNULL(NULL),ISNULL(2),6 IS NOT NULL,NULL IS NOT NULL;
运行结果
1 1 0 1 0
BETWEEN AND 运算符
SELECT 6 BETWEEN 1 AND 10,10 BETWEEN 1 AND 5;
运行结果
1 0
LEAST运算符
返回最小值 假如任意一个自变量为 NULL ,返回值为 NULL。
SELECT LEAST(1,2,3),LEAST('a','b','c'),LEAST(100,NULL);
运行结果
1 a NULL
GREATEST 运算符
返回最大值,假如任意1个变量为NULL,返回值为 NULL
SELECT GREATEST(1,2,3),GREATEST('a','b','c'),GREATEST(100,NULL);
运行结果
3 c NULL
IN NOT IN 运算符
IN 运算符用来判断操作数是否为 IN 列表中的-个值,如果是,返回值为 1,否则返回值为0
NOT IN 运算符用来判断操作数是否为 IN 列表中的一个值,如果不是,返回值为1 否则返回值为0
SELECT 2 IN (2,4,'AA'),'A' IN (3,'DD');
-- 1 0
SELECT 2 NOT IN (2,4,'AA'),'A' NOT IN (3,'DD');
-- 0 1
LIKE 运算符
LIKE 运算符用来匹配字符串, 其语法格式为 expr LIKE 匹配条件 。如果 expr 足匹配条件,
返回值 TRUE 如果不匹配 返回 FALSE。若 expr 或匹配条件中 的任何一个为 NULL ,则为NULL
%配任何字符, 甚至包括零字符。
_只能匹配一个字符。
SELECT 'BADAO' LIKE 'BADAO','BADAO' LIKE 'BADA_','BADAO' LIKE '%O','BADAO' LIKE 'B____','B' LIKE NULL;
-- 1 1 1 1 NULL
REGEEXP 运算符
-- REGEXP 算符用来匹配字符串,其语法格式为“expr REGEXP 匹配条件”。如果 expr 满足匹配条件,
-- 返回1:如果不满足, 返回0。若 expr 或匹配条件中的任意个为 NULl 结果为 NULL
-- REGEXP 算符在进行匹配时常用下面几种通配符。
-- (1)^:匹配以该字符后面的字符开头的字符串
-- (2)$:匹配以该字符前面的字符结尾的字符串
-- (3).:匹配任何一个单字符
-- (4)[...]:匹配方括号内的任何字符 例如[abc]匹配a、b、c。 为了指定字符的范围,使用[-]例如
-- [a-z]匹配任意字母,而[0-9]匹配任意数字
-- (5)*:匹配零个或多个在它前面的字符 例如,"x*"匹配任意数量'x'字符,"[0-9]*"匹配任意数量
-- 的数字,而".*"匹配任意数量的任意字符
SELECT 'BADAO' REGEXP '^B','BADAO' REGEXP 'O$','BADAO' REGEXP '.DAO','BADAO' REGEXP '[AB]'
-- 1 1 1 1
逻辑运算符
逻辑非运算符NOT 或者 !
逻辑非运算符 NOT 或者 ! 当操作数为0时返回值为1, 当操作数为1时返回值为0,当操作数NULL 时返回值为 NULL
SELECT NOT 6,NOT(6-6),NOT -6,NOT NULL,NOT 6+6;
-- 0 1 0 NULL 0
SELECT !6,!(6-6),!-6,!NULL,!6+6;
-- 0 1 0 NULL 6
NOT 和 !的优先级不同,NOT的优先级低于+,!的优先级高于+
逻辑与运算符AND 或者 &&
SELECT 6 AND -6,6 AND 0,6 AND NULL,0 AND NULL;
-- 1 0 NULL 0
SELECT 6 && -6,6 && 0,6 && NULL,0 && NULL;
-- 1 0 NULL 0
逻辑或运算符OR 或者 ||
SELECT 6 OR -6,6 OR 0,6 OR NULL,0 OR NULL;
-- 1 1 1 NULL
SELECT 6 || -6,6 || 0,6 || NULL,0 || NULL;
-- 1 1 1 NULL
XOR 逻辑异或运算符
当任意一个操作符为NULL 时返回值为NULL;对于非NULL的操作数,如果两个操作数都是非零值或者都是零值,则返回0
如果一个为零值,一个为非零值,则返回1
SELECT 6 XOR 6,0 XOR 0,6 XOR 0,6 XOR NULL,6 XOR 6 XOR 6;
-- 0 0 1 NULL 1
位运算符
按位或运算符 |
按位或运算符实际是将参与运算的两个数据接对应的二进制数进行逻辑或运算,对应的二进制位有一个或两个为1 ,
则该位的运算结果为1 ,否则为0
SELECT 8|12,6|4|1;
-- 12 7
-- 10 的二进制数为 1000, 12 二进制数为 1100 在接位或之后结果为 1100 ,即整数 12;
-- 6的二进制数0110, 4的二进制数为 0100, 1的二进制数为 0001 ,在按位或之后结果为 0111 ,即整数7
按位与运算 &
按位与运算符实际是将参与运算的两个操作数接对应的二进制数逐位进行逻辑与运算 对应的二进制
位都为1,则该位的运算结果为1,否则为0
SELECT 8&12,6&4&1;
-- 8 0
按位异或运算符^
接位异或运算符实际是将两个数据按对应的二进制数逐位进行逻辑异或运算,
当对应的二进制数不同时对应位的结果才为1, 如果两个对应位数都为0或都为l,则对应位的运算结果为0
SELECT 8^12,6^4^1;
-- 4 3
按位左移运算符<<
按位左移运算符<<的功能是让指定二进制数的所有位都左移指定的位数。在左移指定位数之后 左边
高位的数值将被移出并丢弃,右边低位空出的位置用0补齐
语法格式为a<<n,这里的n指定值a移动的位置。
SELECT 6<<2,8<<1;
-- 24 16
-- 6的二进制数为 00000110 ,左移两位之后变成 00011000 ,即十进制数24; 8的二进制数为 00001000,
-- 左移一位之后变成 00010000 ,即十进制16
按位右移运算符>>
按位右移运算符>>的功能是让指定二进制数的所有位都右移指定的位数。
在右移指定位数之后,右边低位的数值将被移出并丢弃,左边高位空出的位置用0补齐。
其语法格式为a>>n,这里的n指定值a要移动的位置。
SELECT 6>>2,8>>2;
-- 1 2
-- 6的二进制数为 00000110 ,右移一位之后变成 00000011 ,即十进制数3;8的二进制数为 00001000,
-- 右移两位之后变成 00000010 即十进制数2
按位取反运算符~
按位取反运算符实际是将参与运算的数据接对应的二进制数逐位反转, 1取反后变为0, 0取反后变1
SELECT 6&~2;
-- 4
-- 对于逻辑运算 由于按位取反运算符“~”的级别高于接位运算符“&”, 因此先对2进行取
-- 反操作,取反的结果为 1101;然后再与十进制数6进行运算,结果为 0100 即整数4
Mysql中运算符的优先级
按照优先级从低到高
-- 1、== :=
-- 2、|| OR
-- 3、XOR
-- 4、&&、AND
-- 5、NOT
-- 6、BETWEEN CASE WHEN THEN ELSE
-- 7、= <=> >= > <= < <> != IS LIKE REGEXP IN
-- 8、|
-- 9、&
-- 10、<< >>
-- 11、- +
-- 12、* / %
-- 13、^
-- 14、-(负号) ~
-- 15、!