1.运算符的使用
2.数学函数库
3.字符串函数库
4.日期时间函数
5.条件判断函数、系统函数及其他常用函数
6.索引的使用
索引是对数据库表中一列或多列的值进行处理后的一种结构,使用索引可快速访问数据库表中的特定信息。分为Hash索引和B+tree索引。
7.图形化工具管理数据库
############################DAY04########################################
-- 数字函数库
SELECT NOW(); #返回现在的时间
SELECT VERSION(); #返回mysql的版本信息
SELECT CEIL(1.2),CEILING(1.21); #返回2,2 进一取整,把浮点数有小数的加一取整
SELECT FLOOR(3.14); #返回3 舍一取整
SELECT MOD(3,8); #取余数
SELECT POWER(2,3),POW(2,3); #返回:8,8 幂运算
SELECT ROUND(3.146666,2); #返回:3.15 四舍五入
SELECT TRUNCATE(3.146666,2) #返回:3.14 截取
SELECT ABS(-5.2); #返回5.2 取绝对值
SELECT PI(); #返回圆周率
SELECT RAND(); #返回随机数, RAND(x)可以加标志,使得每次返回的值是固定的
SELECT SIGN(9),SIGN(0),SIGN(-9); #返回:1,0,-1 正数是1,负数是-1,零返回0
SELECT EXP(2); #返回e的2次方
-- 运算符
SELECT 1+1,2*3,5-9,9/3; #返回:2,6,-4,3
SELECT 8/2,8 DIV 2; #返回:4,4
SELECT 3%8,3 MOD 8; #返回3,3
SELECT 1+NULL,5*NULL; #对 NULL 的所有运算都是 NULL
SELECT 1=1,1='1',1=2; #返回1,1,0
SELECT username,username!='king' FROM user13; # != 不等于
SELECT id,username,age,email,age<=>NULL FROM user13; # 与 NULL 相关的等于用 <=>
SELECT id,username,score,score>=70 FROM student;
SELECT id,username,age,age IS NULL FROM user13;
SELECT id,username,age,age IS NOT NULL FROM user13;
SELECT id,username,score,score BETWEEN 70 AND 90 FROM student;
SELECT id,username,score,score in(50,60,95) FROM student; # in 或 not in
SELECT 's' LIKE '_'; #返回1
SELECT 'ss' LIKE '_'; #返回0
SELECT id,username,username LIKE '___' FROM user13;
SELECT id,username,username REGEXP '^k' FROM user13; # 正则运算,以k开头
SELECT 2&&2,2&&0,2&&NULL,1||1,1||0,1||NULL,0||NULL,NULL&&1; #返回:1,0,NULL,1,1,1,NULL,NULL
SELECT 1 XOR 1,1 XOR 0, 0 XOR 1,0 XOR 0; #返回:0,1,1,0 异或,相异为1
-- 字符串函数
SELECT CHAR_LENGTH('maizi'),LENGTH('maizi'); #返回:5,5 返回字符串中字符数,返回字符串长度
SELECT CHAR_LENGTH('啊'),LENGTH('啊'); #返回:1,3
SELECT CONCAT('hello','world'); # 返回helloworld
SELECT id,CONCAT(username,'-','*')FROM student; # 所有名字后加 -*
SELECT CONCAT('a','b',NULL); # 有 NULL 时返回null
SELECT CONCAT_WS('-','a','b','c'); #返回:a-b-c
SELECT UPPER('this is a test'),UCASE('this is a test'); #返回大写
SELECT LOWER('THIS IS A TEST'),LCASE('THIS IS A TEST'); #返回小写
SELECT LEFT('ABCDEF',2),RIGHT('ABCDEF',2); #AB,EF 返回前两个,返回后两个
SELECT LPAD('A',5,'?'),RPAD('A',5,'!'); #????A,A!!!! 前填充5个,后填充5个
SELECT ' ABC ', #' ABC '
CONCAT('_',TRIM(' ABC '),'_'), #'_ABC_' 去掉所有空格
CONCAT('_',LTRIM(' ABC '),'_'), #'_ABC _' 去掉左端空格
CONCAT('_',RTRIM(' ABC '),'_'); #'_ ABC_' 去掉右端空格
SELECT TRIM('A' FROM 'ABCA'); #返回:BC 去掉A
SELECT REPEAT('H',5); #HHHHH 重复5次
SELECT CONCAT('_',SPACE(5),'_'); #'_ _' SPACE(N) 表示N 个空格
SELECT REPLACE('ABCDA','A','_'); #'_BCD_' REPLACE(str,from_str,to_str)函数区分大小写
SELECT STRCMP('a',' a'); # 比较字符串,不区分大小写
SELECT SUBSTRING('ABCDEF',2,2); #'BC' 从第2个位置开始数2个返回
SELECT REVERSE('ABC'); #'CBA' 颠倒顺序
SELECT ELT(2,'a','b','c','d'); #'b' 返回起始从1开始数
-- 日期时间函数
SELECT CURTIME(),CURRENT_TIME() #获取当前时间
SELECT NOW(); #获取当前年月日 时分秒
SELECT MONTH('2022-04-26'); #返回:4 返回日期中的月份值
SELECT MONTH(NOW()); #返回日期中的月份值
SELECT MONTHNAME(NOW()); #返回月份:April
SELECT DAYNAME(NOW()); #返回星期几
SELECT WEEK(NOW()); #返回一年中的第几个星期
SELECT YEAR(NOW()),HOUR(NOW()),MINUTE(NOW()),SECOND(NOW());
SELECT DATEDIFF(NOW(),'1992-4-26'); #返回两个日期之间相隔的天数
-- 条件判断函数/系统函数
SELECT id,username,score,IF(score>=80,'优秀','合格') FROM student;
SELECT id,username,score,IFNULL(score,100) FROM student; #把 NULL 替换为100
SELECT id,username,score, CASE WHEN score>60 THEN '继续努力' WHEN score=60 THEN '刚及格' ELSE '未及格' END FROM student;
SELECT id,username,score, CASE WHEN score>90 THEN '不错' WHEN score<90&&score>60 THEN '及格' ELSE '未及格' END FROM student;
SELECT VERSION(); #当前版本号
SELECT CONNECTION_ID(); #服务器连接数
SELECT DATABASE(),SCHEMA(); #当前数据库名称
SELECT USER(),SYSTEM_USER(); #当前用户
SELECT CURRENT_USER(),CURRENT_USER; #当前用户
SELECT CHARSET('AAA'); #返回:utf8 返回字符串的字符集
SELECT COLLATION('AAA');#返回:utf8_general_ci 返回字符串的校验字符集
SELECT LAST_INSERT_ID();#得到最近生成的插入记录的 auto_increment 自增长值
-- 加密函数及其他函数
-- MD5(str)
SELECT MD5('ADMIN'); #返回:73acd9a5972130b75066c82595a1fae3
SELECT LENGTH(MD5('admin')); #返回:32
SELECT PASSWORD('king'); #加密算法
SELECT FORMAT(3.14567,2); #返回3.15 将数字格式化,并返回保留2位小数的值
SELECT ASCII('abc'); #返回第一个字母的ascii码
SELECT BIN(5),HEX(5),OCT(5); #二进制 十六进制 十进制
SELECT CONV(5,10,2); # 把 5 从 10进制转换为2进制
SELECT INET_ATON('127.0.0.1'); #返回:2130706433 把IP地址转换为数字
SELECT INET_NTOA(2130706433); #返回:127.0.0.1 把数字转换为IP
SELECT GET_LOCK('king',10); #定义锁,创建新锁,之前的锁会被删掉
SELECT IS_FREE_LOCK('king'); #判断锁是否存在
SELECT RELEASE_LOCK('king');#解锁
-- 索引的使用
-- 创建普通索引
CREATE TABLE test4(
id TINYINT UNSIGNED,
username VARCHAR(20),
INDEX in_id(id), #给哪个字段添加索引
KEY in_username(username) #索引名称
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 删除普通索引
DROP INDEX in_id ON test4;
DROP INDEX in_username ON test4;
-- 创建普通索引
CREATE INDEX in_id ON test4(id);
ALTER TABLE test4 ADD INDEX in_username(username);
-- 创建唯一索引
CREATE TABLE test5(
id TINYINT UNSIGNED auto_increment KEY,
username VARCHAR(20) NOT NULL UNIQUE,
card CHAR(18) NOT NULL,
UNIQUE KEY uni_card(card)
);
-- 删除唯一索引
ALTER TABLE test5 DROP INDEX uni_card;
DROP INDEX username ON test5;
-- 添加唯一索引
CREATE UNIQUE INDEX uni_username ON test5(username);
ALTER TABLE test5 ADD UNIQUE INDEX uni_card(card);
-- 创建全文索引
CREATE TABLE test6(
id TINYINT UNSIGNED auto_increment KEY,
username VARCHAR(20) NOT NULL UNIQUE,
userDesc VARCHAR(20) NOT NULL,
FULLTEXT INDEX full_userDesc(userDesc)
);
-- 删除全文索引
DROP INDEX full_userDesc ON test6;
-- 创建全文索引
CREATE FULLTEXT INDEX full_userDesc ON test6(userDesc);
ALTER TABLE test6 FULLTEXT UNIQUE INDEX full_userDesc(userDesc);
-- 创建单列索引
CREATE TABLE test7(
id TINYINT UNSIGNED auto_increment KEY,
test1 VARCHAR(20) NOT NULL,
test2 VARCHAR(20) NOT NULL,
test3 VARCHAR(20) NOT NULL,
test4 VARCHAR(20) NOT NULL,
test5 VARCHAR(20) NOT NULL,
INDEX in_test(test1)
);
-- 创建多列索引
CREATE TABLE test8(
id TINYINT UNSIGNED auto_increment KEY,
test1 VARCHAR(20) NOT NULL,
test2 VARCHAR(20) NOT NULL,
test3 VARCHAR(20) NOT NULL,
test4 VARCHAR(20) NOT NULL,
test5 VARCHAR(20) NOT NULL,
INDEX mul_t1_t2_t3(test1,test2,test3)
);
-- 删除多列索引
DROP INDEX mul_t1_t2_t3 ON test8;
ALTER TABLE test8 DROP INDEX mul_t1_t2_t3;
-- 添加多列索引
ALTER TABLE test8 ADD INDEX mul_t1_t2_t3(test1,test2,test3);
-- 创建空间索引
-- 数据类型必须为 MyISAM
CREATE TABLE test10(
id TINYINT UNSIGNED auto_increment KEY,
test geometry NOT NULL,
SPATIAL INDEX spa_test(test)
)ENGINE=MyISAM;
-- 删除空间索引
DROP INDEX spa_test ON test10;
-- 添加空间索引
CREATE SPATIAL INDEX spa_test ON test10(test);