ES('M'),('1'),('f'),(NULL);
mysql> select * from t;
+--------+
| gender |
+--------+
| M |
| M |
| F |
| NULL |
+--------+
4 rows in set (0.01 sec)
--4.SET 类型
Set 和 ENUM 除了存储之外,最主要的区别在于 Set 类型一次可以选取多个成员,而 ENUM则只能选一个.
SET 类型可以从允许值集合中选择任意 1 个或多个元素进行组合,所以对于输入的值只要是
在允许值的组合范围内,都可以正确地注入到 SET 类型的列中。对于超出允许值范围的值例
如( ' a,d,f ' )将不允许注入到上面例子中设置的 SET 类型列中,而对于( ' a,d,a ' )这样包含重
复成员的集合将只取一次,写入后的结果为“a,d”,这一点请注意。
example:
mysql> create table t(col set('a','b','c','d'));
mysql> insert into t values('a,b'),('a,d,a'),('a,b'),('a,c'),('a');
mysql> select * from t;
+------+
| col |
+------+
| a,b |
| a,d |
| a,b |
| a,c |
| a |
73
+------+
5 rows in set (0.00 sec)
-------------------MySQL中的运算符----------------------
--1.算术运算符
mysql> select 0.1+ 0.3333 ,0.1-0.3333, 0.1*0.3333, 1/2,1%2;
%:用一个数除以另一个数然后取余;效果等同于取模mod(a,b)。
--2.比较运算符
除了常规的<、>、>=外,还有以下几种:
<>或!= :不等于
<=> :NULL 安全的等于(NULL-safe)
BETWEEN :存在与指定范围
IN :存在于指定集合
IS NULL :为 NULL
IS NOT NULL :不为 NULL
LIKE :通配符匹配
REGEXP 或 RLIKE :正则表达式匹配
* NULL 不能用于“=”比较
* “IN”运算符的使用格式为“a IN (value1,value2,…)”
* “REGEXP”运算符的使用格式为“str REGEXP str_pat”,当 str 字符串中含有 str_pat相匹配的字符串时,
则返回值为 1,否则返回 0。
--3.逻辑运算符(布尔运算符)
MySQL 支持 4 种逻辑运算符
运算符 作用
NOT 或! 逻辑非
AND 或&& 逻辑与
OR 或 || 逻辑或
XOR 逻辑异或
* mysql> select not 0, not 1, not null ;
+-------+-------+----------+
| not 0 | not 1 | not null |
+-------+-------+----------+
| 1 | 0 | NULL |
+-------+-------+----------+
1 row in set (0.00 sec)
* “XOR”表示逻辑异或。当任意一个操作数为 NULL 时,返回值为 NULL。
对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1;否则返回 0。
mysql> select 1 xor 1 ,0 xor 0,1 xor 0,0 xor 1,null xor 1;
+---------+---------+---------+---------+------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 0 xor 1 | null xor 1 |
+---------+---------+---------+---------+------------+
| 0 | 0 | 1 | 1 | NULL |
+---------+---------+---------+---------+------------+
1 row in set (0.00 sec)
--4.位运算符
位运算符一般用于加密,或者提高程序的性能等
运算符 作用
& 位与(位 AND)
| 位或 (位 OR )
^ 位异或(位 XOR)
~ 位取反
>> 位右移
<< 位左移
* 十 二
2-> 10
& 3-> 11
--------
10 -> 十
--------
2 -> 二
* 异或^的规律之一: a = a^b^b;
* 位取反~:
mysql> select ~1,~18446744073709551614;
+----------------------+-----------------------+
| ~1 | ~18446744073709551614 |
+----------------------+-----------------------+
| 18446744073709551614 | 1 |
+----------------------+-----------------------+
1 row in set (0.00 sec)
在 MySQL 中,常量数字默认会以 8 个字节来表示,8 个字节就是 64 位,常量 1 的二进制表示为 63 个“0”
加1个“1”,位取反后就是63个“1”加一个“0”,转换为二进制后就是18446744073709551614。
mysql> select bin(18446744073709551614);
+------------------------------------------------------------------+
| bin(18446744073709551614) |
+------------------------------------------------------------------+
| 1111111111111111111111111111111111111111111111111111111111111110 |
+------------------------------------------------------------------+
1 row in set (0.00 sec)
--5.运算符的优先级
很多情况下我们都是用“()”来将需要优先的操作括起来,
这样既起到了优先的作用,又使得其他用户看起来更加易于理解。
优先级顺序 运算符
1 :=
2 ||, OR, XOR
3 &&, AND
4 NOT
5 BETWEEN, CASE, WHEN, THEN, ELSE
6 =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
7 |
8 &
9 <<, >>
10 -, +
11 *, /, DIV, %, MOD
12 ^
13 - (一元减号), ~ (一元比特反转)
14 !
-------------------MySQL的常用函数----------------------
--字符串函数(常用)
函数 功能
CANCAT(S1,S2,…Sn) 连接 S1,S2,…Sn 为一个字符串
INSERT(str,x,y,instr) 将字符