MySQL学习总结(四)数据的基本操作以及MySQL运算符和常用函数
数据库是存储数据库对象的仓库,数据库的基本对象是表,表用来存储数据。关于数据的操作也就是我们常说的CRUD,C指的是CREATE(插入数据记录)、R指的是READ(查询数据记录)、U指的是UPDATE(更新数据记录)、D指的是DELETE(删除数据记录)。
1、插入数据记录
1.1完整插入数据记录
SQL语法:INSET INTO table_name(filed1,filed2…,filedn) VALULES (value1,value2…,valuen),其中filed1,filed2…,filedn为表table_name 中的所有的字段,后面对应的每一个对应的值,valuen和filedn的数据类型必须一致否则会报错。filedn的顺序可以随意调整,只要保证后面的valuen和filedn一致即可。
例如:INSERT INTO t_dept(deptno,dname,address) VALUES (7,'SUN','Hebei');
当插入所有的数据字段的时候,也可以缩写。SQL语法:INSET INTO table_name VALULES (value1,value2…,valuen),这种方式使用起来更加简洁,但是value的值的顺序必须和表中字段的顺序一致才可以。
1.2、插入部分记录数据
可以插入指定字段的部分的记录数据,
例如:INSERT INTO t_dept(deptno,dname) VALUES (8,'SUN');
注意:如果设置类自动增加约束的字段是不需要插入值的,具有默认值约束的字段如果不插入值的时候会插入默认值。
1.3、插入多条数据记录
SQL语法:INSET INTO table_name(filed1,filed2…,filedn)
VALULES (value11,value12…,value1n),
VALULES (value21,value22…,value2n),
…
VALULES (valuem1,valuem2…,valuemn),
除此还有一种SQL语法:
INSET INTO table_name
VALULES (value11,value12…,value1n),
VALULES (value21,value22…,value2n),
…
VALULES (valuem1,valuem2…,valuemn),
同理类推,也可以插入多条部分数据记录。
1.4、插入查询结果
SQL语法:INSET INTO table_name(filed1,filed2…,filedn)
SELECT filed11,filed12…,filed1n FROM table_name2
WHERE CONDITION
在SQLyog软件界面中也可以插入数据,右键表——>打开表,
直接双击编辑,或者点击表格上方的按钮,新增数据行按钮,编辑完成后,点击保存按钮。成功保存数据。
刷新数据后,查看数据是否成功增加。
2、更新数据记录
SQL语法:UPDATE table_name SET filed1=value1,…,fieldn=valuen WHERE CONDITION; 更新满足条件的数据记录。
SQL语法:UPDATE table_name SET filed1=value1,…,fieldn=valuen ,更新所有的数据记录。
通过SQLyog软件,也可以更新数据记录,右键表——>打开表,
如果已经修改过数据后,在右下角会提示,“数据已修改但没有存储”,点击保存。
3、删除数据记录
SQL语法:DELETE FROM table_name WHERE CONDITION,删除满足条件的数据记录。
SQL语法:DELETE FROM table_name ,删除所有的表数据记录。
通过SQLyog软件,删除数据记录,右键表——>打开表,选中要删除的行数据,点击删除按钮,确定后,成功删除数据。
4、MySQL的运算符
4.1、算数运算符
+、-、*、/、(DIV)、%、(MOD)
注意:/和DIV都是除法运算符,/ 结果默认保存四位小数结果,DIV 默认保存整数结果。
4.2、比较运算符
> 大于 < 小于 = <=> 等于 != <> 不等于 >= 大于等于 <= 小于等于 BETWEEN AND 在指定范围内 IS NULL 为空 IN 在指定的集合 LIKE 通配符匹配 REGEXP 正则表达式匹配
注意:比较运算符=不能操作NULL,而比较运算符<=>可以操作NULL,而!= 和<>都不可以操作NULL,
例如:SELECT 1<=>NULL,NULL<=>NULL,1=NULL,NULL=NULL,1!=NULL,NULL!=NULL,1<>NULL,NULL<>NULL
下面,我们详细的介绍一下正则表达式,通过模式去匹配一类字符串。
^ 匹配字符串的开始部分
$ 匹配字符串的结束部分
. 匹配字符串中的任意一个字符
[字符集合] 匹配字符集合中的任意一个字符
[^字符集合] 匹配字符集合外的任意一个字符
str1|str2|str3 匹配str1、str2、str3的任意一个字符串
* 匹配字符,包含0个和1个
+ 匹配字符,包含1个
字符串{N} 字符串N次
字符串{M,N} 字符串至少出现M次,最多出现N次
4.2.1、$可以比较是否是以特定的字符或者是字符串结尾的
SELECT 'sun' REGEXP 'n$' ,'sun' REGEXP 'sn$','sun' REGEXP 'un$',第一个判断是否是以字母n为结尾,第二个判断是否是以字母sn结尾,第三个判断是否是以字母un结尾。结果如下,1表示true,0表示false。
4.2.2、^可以比较是否是以特定的字符或者是字符串开头的
SELECT 'sun' REGEXP '^s' ,'sun' REGEXP '^sn','sun' REGEXP '^su'
4.2.3、. 比较是否包含一个字符
SELECT 'sun' REGEXP '^s.n$' ,'sun' REGEXP '^s..n'
4.2.4、[]、[^]可以实现比较是否包含指定字符串中的任意一个字符或者是指定字符串外的任意一个字符
SELECT 'sunying' REGEXP '[abs]' ,'sunying' REGEXP '[a-z]','sunying' REGEXP '[^abc]','sunying' REGEXP '[^a-z]'
解释一下,'sunying' REGEXP '[abs]' 表示sunying字符串中是否包含字符串abs中的任意一个,因为包含s返回1;同理a-z表示a到z的所有的字符串,返回1;
'sunying' REGEXP '[^abc]'表示sunying字符串是否包含abc三个以外的字符串,返回1;因为sunying都在a-z之间所以'sunying' REGEXP '[^a-z]'返回0;
4.2.5、*、+比较是否包含多个指定的字符
4.2.6、{m}、{m,n}比较是否包含多个指定的字符串
SELECT 'sunying' REGEXP 's{3}' ,'sunsunying' REGEXP 'sun{1,2}','sunsunying' REGEXP 'sun{3,4}'
4.3、逻辑运算符
&& AND 与、|| OR或、! NOT非、XOR异或
注意:与操作如果有一个操作数为0,则返回结果为0;如果一个操作数为NULL,另一个不为0,则返回NULL;
或操作如果有一个操作数不为0且不为NULL,返回1.如果有NULL值,且另一个操作数为0,返回NULL;
非操作,如果有NULL值返回NULL;
异或操作符,两个同时为真或者是同时为假的时候,返回0。否则返回1。如果有一个操作数为NULL,则返回为NULL;
4.5、位运算符
& 按位与 | 按位或 ~ 按位取反 ^ 按位异或 << 按位左移 >> 按位右移
SELECT 5&6,5|6,~4,4^5,5<<4,5>>2
5&6,5的二进制101,6的二进制110,5&6运算结果为100,也就是4。
5|6,5的二进制101,6的二进制110,5|6运算结果为111,也就是7。
~4,4的二进制100,按位取反,MySQL中用8个字节也即是64位表示。4的二进制真实是 61个0+100,按位取反的结果就是,61个1+011。
4^5,5的二进制101,4的二进制100,结果001,也即是1.
按位左移,5的二进制101,左移四位,右边补0,1010000,也就是80.
按位右移,5的二进制101,右移两位,左边补0,001,也就是1。
5、MySQL常用函数
MySQL的主要函数包含字符串函数、数值函数、日期时间函数、系统信息函数。
由于不同的数据库软件都有自己支持的特有的函数,所以,函数的移植性不强。
5.1、字符串函数
5.1.1、合并函数
CONCAT(s1,s2,…,sn)合并字符串,如果参数中有null,则返回null;
CONCAT_WS(SEP,s1,s2…,sn) 合并字符串,并且按照分隔符串联起来,如果参数中有NULL值,直接忽略该参数。
5.1.2、比较字符串大小
STRCMP(s1,s2),如果s1>s2,返回1。相等返回0,小于返回-1。
5.1.3、获取字符串长度
LENGTH() CHAR_LENGTH()
注意:LENGTH表示字符所占的字节长度,CHAR_LENGTH表示字符串的个数。
5.1.4、大小写转换函数
UPPER() UCASE() 将字符串转换成大写
LOWER() LCASE()将字符串转换成小写
5.1.5、截取字符串函数
LEFT(str,num)从左边截取num个字符,
RIGHT(str,num)从右变截取num个字符,
SUBSTRING(str,num,len)从地num个位置开始的len长度的字符串,MySQL下标是从1开始的。同MID(str,num,len)
5.1.6、去除首尾空格
LTRIM(str) 去除左边空格
RTRIM(str) 去除右边空格
TRIM(str) 去除左右两边空格
5.1.7、替换字符串
INSERT(str,pos,len,newstr)
REPLACE(str,oldstr,newstr)
5.2、数值函数
5.2.1、获取随机数
RAND()、RAND(x),其中RAND()是完全随机函数,RAND(x)随机数是相同的。
5.2.2、获取整数函数
CEIL(x) 返回大于或者等于x的最小整数。
FLOOR(x) 返回小于或者等于x的最大整数。
5.2.3、截取数值函数
TRUNCATE(x,y) 返回数值x的小数点后y位的值。如果y为负数,则表示小数点左边截取y位。
5.2.4、四舍五入函数
ROUND(x) 数值x经过四舍五入操作后的数值
ROUND(x,y)保留数值x小数点后y位的数值,四舍五入。同样如果y为负数,表示小数点左边。
5.3、日期时间函数
5.3.1、获取当前日期和时间的函数
NOW(),CURRENT_TIMESTAMP(),LOCALTIME(),SYSDATE()
5.3.2、获取当前日期
CURDATE(),CURRENT_DATE()
这两个函数只会返回日期部分数据
5.3.3、获取当前时间
CURTIME(),CURRENT_TIME()
这两个函数只会返回时间部分数据
5.3.4、不同方式显示日期和时间
UNIX_TIMESTAMP() 以UNIX格式显示当前时间
YEAR(), 获取年
QUARTER(), 季度
MONTH(),月 MONTHNAME() 显示月份的名字
WEEK(),星期
DAYOFMONTH(),该月第几天,DAYOFYEAR(),该年的第几天
HOUR(),小时
MINUTE(),分
SECOND()秒
上述函数还有一个通用的表达方式 EXTRACT(type FROM date)
例如:
SELECT EXTRACT(YEAR FROM NOW()),EXTRACT(QUARTER FROM NOW()),
EXTRACT(MONTH FROM NOW()),EXTRACT(WEEK FROM NOW()),
EXTRACT(HOUR FROM NOW()),EXTRACT(MINUTE FROM NOW()),
EXTRACT(SECOND FROM NOW())
5.3.5、与指定的日期时间操作
ADDDATE(),SUBDATE(),增加减少日期
ADDTIME(),SUBTIME(),增加减少时间
5.4、系统信息函数
VERSION(),获取数据库的版本信息
DATABASE(),获取数据库名
USER(),获取用户名
LAST_INSERT_ID()获取最后一条自动插入的ID
PASSWORD() 给字符串加密