Mysql数据操作语句整理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wyy626562203/article/details/83445249

文章目录

Mysql数据操作语句整理

1.用户管理操作

新建用户:

CREATE USER yourname IDENTIFIED BY 'yourpasswd';

更改密码:

SET PASSWORD FOR yourname=PASSWORD('newpasswd');

权限管理:

SHOW GRANTS FOR yourname;   		  	 --查看yourname用户权限
GRANT SELECT ON db_name.* TO yourname; 	--给yourname用户db_name数据库的所有权限
REVOKE SELECT ON db_name.* TO yourname;  --GRANT的反操作,去除权限;

2.数据库操作

2.1 查看数据库

SHOW DATABASES;

2.2 创建数据库

CREATE DATABASE db_name;  --db_name为数据库名

2.3 使用数据库

USE db_name;

2.4 删除数据库

DROP DATABASE db_name;

3.表操作

表的存储引擎,一般常用InnoDB和MyISAM;InnoDB可靠,支持事务。MyISAM高效不支持全文检索。设置默认的编码,防止数据库中文乱码。

3.1 创建表

CREATE TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,无符号、非空、递增——唯一性,可做主键。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --设置默认列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

有时创建的表在数据库中已经存在了,使用条件判断来创建数据表

CREATE TABLE IF NOT EXISTS tb_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,无符号、非空、递增——唯一性,可做主键。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --设置默认列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

3.2 复制表

CREATE TABLE tb_name2 SELECT * FROM tb_name;

部分复制:

CREATE TABLE tb_name2 SELECT id,name FROM tb_name;

3.3 创建临时表

CREATE TEMPORARY TABLE table_name(
id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, --id值,无符号、非空、递增——唯一性,可做主键。
name VARCHAR(60) NOT NULL
score TINYINT UNSIGNED NOT NULL DEFAULT 0,  --设置默认列值
PRIMARY KEY(id)
)ENGINE=InnoDB DEFAULT charset=utf8;

3.4 查看数据库中可用的表

SHOW TABLES;

3.5 查看表的结构

DESCRIBE tb_name;

也可以使用:

SHOW COLUMNS in tb_name;
SHOW COLUMNS from tb_name;

3.6 删除表

DROP [ TEMPORARY ] TABLE [ IF EXISTS ] tb_name[ ,tb_name2……];
DROP TABLE IF EXISTS tb_name;

3.7 表重命名

RENAME TABLE name_old TO name_new;
ALTER TABLE name_old RENAME name_new;

3.8 更改表结构

ALTER TABLE tb_name ADD[CHANGE,RENAME,DROP] change_content
ALTER TABLE tb_name ADD COLUMN address varchar(80) NOT NULL;
ALTER TABLE tb_name DROP address;
ALTER TABLE tb_name CHANGE score score SMALLINT(4) NOT NULL;
ALTER TABLE tb_name MODIFY score CHAR(10);

4.插入数据

4.1 插入数据

INSERT INTO tb_name(id,name,score) VALUES(NULL,'张三',140),(NULL,'张四',178),(NULL,'张五',134);

这里的插入多条数据直接在后边加上逗号,直接写入插入的数据即可;主键id是自增的列,可以不用写。

4.2 插入检索出来的数据

INSERT INTO tb_name(name,score) SELECT name,score FROM tb_name2;

5.更新数据

5.1 指定更新数据

UPDATE tablename SET columnName=NewValue [ WHERE condition ]
UPDATE tb_name SET score=189 WHERE id=2;

6.删除数据

6.1 删除数据

DELETE FROM tb_name WHERE id=3;

7.条件控制

  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等号 =。
  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE…LIKE 子句来指定条件。

7.1 WHERE 语句

SELECT * FROM tb_name WHERE id=3;

7.2 HAVING 语句

SELECT * FROM tb_name GROUP BY score HAVING count(*)>2

7.3 模糊查找

SELECT * from tb_name  WHERE author LIKE '%COM';

7.3 相关条件控制符

=><<>IN(1,2,3……)BETWEEN a AND b、NOT
ANDOR
Linke()用法中 % 为匹配任意、_ 匹配一个字符(可以是汉字)
IS NULL 空值检测

8.MySQL的正则表达式

8.1 REGEXP正则表达式

SELECT * FROM tb_name WHERE name REGEXP^[A-D]--找出以A-D 为开头的name

9.MySQL的一些函数

9.1 字符串链接

函数 描述 实例
ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码。 返回 CustomerName 字段第一个字母的 ASCII 码: SELECT ASCII(CustomerName) AS NumCodeOfFirstChar FROM Customers;
CHAR_LENGTH(s) 返回字符串 s 的字符数 返回字符串 RUNOOB 的字符数 SELECT CHAR_LENGTH("RUNOOB") AS LengthOfString;
CHARACTER_LENGTH(s) 返回字符串 s 的字符数 返回字符串 RUNOOB 的字符数 SELECT CHARACTER_LENGTH("RUNOOB") AS LengthOfString;
CONCAT(s1,s2…sn) 字符串 s1,s2 等多个字符串合并为一个字符串 合并多个字符串 SELECT CONCAT("SQL ", "Runoob ", "Gooogle ", "Facebook") AS ConcatenatedString;
CONCAT_WS(x, s1,s2…sn) 同 CONCAT(s1,s2,…) 函数,但是每个字符串直接要加上 x,x 可以是分隔符 合并多个字符串,并添加分隔符: SELECT CONCAT_WS("-", "SQL", "Tutorial", "is", "fun!")AS ConcatenatedString;
FIELD(s,s1,s2…) 返回第一个字符串 s 在字符串列表(s1,s2…)中的位置 返回字符串 c 在列表值中的位置: SELECT FIELD("c", "a", "b", "c", "d", "e");
FIND_IN_SET(s1,s2) 返回在字符串s2中与s1匹配的字符串的位置 返回字符串 c 在指定字符串中的位置: SELECT FIND_IN_SET("c", "a,b,c,d,e");
FORMAT(x,n) 函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入。 格式化数字 “#,###.##” 形式: SELECT FORMAT(250500.5634, 2); -- 输出 250,500.56
INSERT(s1,x,len,s2) 字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串 从字符串第一个位置开始的 6 个字符替换为 runoob: SELECT INSERT("google.com", 1, 6, "runnob"); -- 输出:runoob.com
LOCATE(s1,s) 从字符串 s 中获取 s1 的开始位置 获取 b 在字符串 abc 中的位置: SELECT LOCATE('st','myteststring'); -- 5
LCASE(s) 将字符串 s 的所有字母变成小写字母 字符串 RUNOOB 转换为小写: SELECT LOWER('RUNOOB') -- runoob
LEFT(s,n) 返回字符串 s 的前 n 个字符 返回字符串 runoob 中的前两个字符: SELECT LEFT('runoob',2) -- ru
LEFT(s,n) 返回字符串 s 的前 n 个字符 返回字符串 abcde 的前两个字符: SELECT LEFT('abcde',2) -- ab
LOCATE(s1,s) 从字符串 s 中获取 s1 的开始位置 返回字符串 abc 中 b 的位置: SELECT LOCATE('b', 'abc') -- 2
LOWER(s) 将字符串 s 的所有字母变成小写字母 字符串 RUNOOB 转换为小写: SELECT LOWER('RUNOOB') -- runoob
LPAD(s1,len,s2) 在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len 将字符串 xx 填充到 abc 字符串的开始处: SELECT LPAD('abc',5,'xx') -- xxabc
LTRIM(s) 去掉字符串 s 开始处的空格 去掉字符串 RUNOOB开始处的空格: SELECT LTRIM(" RUNOOB") AS LeftTrimmedString;-- RUNOOB
MID(s,n,len) 从字符串 s 的 start 位置截取长度为 length 的子字符串,同 SUBSTRING(s,n,len) 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符: SELECT MID("RUNOOB", 2, 3) AS ExtractString; -- UNO
POSITION(s1 IN s) 从字符串 s 中获取 s1 的开始位置 返回字符串 abc 中 b 的位置: SELECT POSITION('b' in 'abc') -- 2
REPEAT(s,n) 将字符串 s 重复 n 次 将字符串 runoob 重复三次: SELECT REPEAT('runoob',3) -- runoobrunoobrunoob
REPLACE(s,s1,s2) 将字符串 s2 替代字符串 s 中的字符串 s1 将字符串 abc 中的字符 a 替换为字符 x: SELECT REPLACE('abc','a','x') --xbc
REVERSE(s) 将字符串s的顺序反过来 将字符串 abc 的顺序反过来: SELECT REVERSE('abc') -- cba
RIGHT(s,n) 返回字符串 s 的后 n 个字符 返回字符串 runoob 的后两个字符: SELECT RIGHT('runoob',2) -- ob
RPAD(s1,len,s2) 在字符串 s1 的结尾处添加字符串 s1,使字符串的长度达到 len 将字符串 xx 填充到 abc 字符串的结尾处: SELECT RPAD('abc',5,'xx') -- abcxx
RTRIM(s) 去掉字符串 s 结尾处的空格 去掉字符串 RUNOOB 的末尾空格: SELECT RTRIM("RUNOOB ") AS RightTrimmedString; -- RUNOOB
SPACE(n) 返回 n 个空格 返回 10 个空格: SELECT SPACE(10);
STRCMP(s1,s2) 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1 比较字符串: SELECT STRCMP("runoob", "runoob"); -- 0
SUBSTR(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符: SELECT SUBSTR("RUNOOB", 2, 3) AS ExtractString; -- UNO
SUBSTRING(s, start, length) 从字符串 s 的 start 位置截取长度为 length 的子字符串 从字符串 RUNOOB 中的第 2 个位置截取 3个 字符: SELECT SUBSTRING("RUNOOB", 2, 3) AS ExtractString; -- UNO
SUBSTRING_INDEX(s, delimiter, number) 返回从字符串 s 的第 number 个出现的分隔符 delimiter 之后的子串。 如果 number 是正数,返回第 number 个字符左边的字符串。 如果 number 是负数,返回第(number 的绝对值(从右边数))个字符右边的字符串。 SELECT SUBSTRING_INDEX('a*b','*',1) -- a SELECT SUBSTRING_INDEX('a*b','*',-1) -- b SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('a*b*c*d*e','*',3),'*',-1) -- c
TRIM(s) 去掉字符串 s 开始和结尾处的空格 去掉字符串 RUNOOB 的首尾空格: SELECT TRIM(' RUNOOB ') AS TrimmedString;
UCASE(s) 将字符串转换为大写 将字符串 runoob 转换为大写: SELECT UCASE("runoob"); -- RUNOOB
UPPER(s) 将字符串转换为大写 将字符串 runoob 转换为大写: SELECT UPPER("runoob"); -- RUNOOB

9.2 数学函数

AVG、SUM、MAX、MIN、COUNT;
函数名 描述 实例
ABS(x) 返回 x 的绝对值 返回 -1 的绝对值: SELECT ABS(-1) -- 返回1
ACOS(x) 求 x 的反余弦值(参数是弧度) SELECT ACOS(0.25);
ASIN(x) 求反正弦值(参数是弧度) SELECT ASIN(0.25);
ATAN(x) 求反正切值(参数是弧度) SELECT ATAN(2.5);
ATAN2(n, m) 求反正切值(参数是弧度) SELECT ATAN2(-0.8, 2);
AVG(expression) 返回一个表达式的平均值,expression 是一个字段 返回 Products 表中Price 字段的平均值: SELECT AVG(Price) AS AveragePrice FROM Products;
CEIL(x) 返回大于或等于 x 的最小整数 SELECT CEIL(1.5) -- 返回2
CEILING(x) 返回大于或等于 x 的最小整数 SELECT CEIL(1.5) -- 返回2
COS(x) 求余弦值(参数是弧度) SELECT COS(2);
COT(x) 求余切值(参数是弧度) SELECT COT(6);
COUNT(expression) 返回查询的记录总数,expression 参数是一个字段或者 * 号 返回 Products 表中 products 字段总共有多少条记录: SELECT COUNT(ProductID) AS NumberOfProducts FROM Products;
DEGREES(x) 将弧度转换为角度 SELECT DEGREES(3.1415926535898) -- 180
n DIV m 整除,n 为被除数,m 为除数 计算 10 除于 5: SELECT 10 DIV 5; -- 2
EXP(x) 返回 e 的 x 次方 计算 e 的三次方: SELECT EXP(3) -- 20.085536923188
FLOOR(x) 返回小于或等于 x 的最大整数 小于或等于 1.5 的整数: SELECT FLOOR(1.5) -- 返回1
GREATEST(expr1, expr2, expr3, …) 返回列表中的最大值 返回以下数字列表中的最大值: SELECT GREATEST(3, 12, 34, 8, 25); -- 34 返回以下字符串列表中的最大值:SELECT GREATEST("Google", "Runoob", "Apple"); -- Runoob
LEAST(expr1, expr2, expr3, …) 返回列表中的最小值 返回以下数字列表中的最小值: SELECT LEAST(3, 12, 34, 8, 25); -- 3 返回以下字符串列表中的最小值:SELECT LEAST("Google", "Runoob", "Apple"); -- Apple
LN 返回数字的自然对数 返回 2 的自然对数: SELECT LN(2); -- 0.6931471805599453
LOG(x) 返回自然对数(以 e 为底的对数) SELECT LOG(20.085536923188) -- 3
LOG10(x) 返回以 10 为底的对数 SELECT LOG10(100) -- 2
LOG2(x) 返回以 2 为底的对数 返回以 2 为底 6 的对数: SELECT LOG2(6); -- 2.584962500721156
MAX(expression) 返回字段 expression 中的最大值 返回数据表 Products 中字段 Price 的最大值: SELECT MAX(Price) AS LargestPrice FROM Products;
MIN(expression) 返回字段 expression 中的最小值 返回数据表 Products 中字段 Price 的最小值: SELECT MIN(Price) AS LargestPrice FROM Products;
MOD(x,y) 返回 x 除以 y 以后的余数 5 除于 2 的余数: SELECT MOD(5,2) -- 1
PI() 返回圆周率(3.141593) SELECT PI() --3.141593
POW(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POW(2,3) -- 8
POWER(x,y) 返回 x 的 y 次方 2 的 3 次方: SELECT POWER(2,3) -- 8
RADIANS(x) 将角度转换为弧度 180 度转换为弧度: SELECT RADIANS(180) -- 3.1415926535898
RAND() 返回 0 到 1 的随机数 SELECT RAND() --0.93099315644334
ROUND(x) 返回离 x 最近的整数 SELECT ROUND(1.23456) --1
SIGN(x) 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1 SELECT SIGN(-10) -- (-1)
SIN(x) 求正弦值(参数是弧度) SELECT SIN(RADIANS(30)) -- 0.5
SQRT(x) 返回x的平方根 25 的平方根: SELECT SQRT(25) -- 5
SUM(expression) 返回指定字段的总和 计算 OrderDetails 表中字段 Quantity 的总和: SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
TAN(x) 求正切值(参数是弧度) SELECT TAN(1.75); -- -5.52037992250933
TRUNCATE(x,y) 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入) SELECT TRUNCATE(1.23456,3) -- 1.234

9.3 高级函数

函数名 描述 实例
BIN(x) 返回 x 的二进制编码 15 的 2 进制编码: SELECT BIN(15); -- 1111
BINARY(s) 将字符串 s 转换为二进制字符串 SELECT BINARY "RUNOOB"; -> RUNOOB
CASE expression WHEN condition1 THEN result1 WHEN condition2 THEN result2 ... WHEN conditionN THEN resultN ELSE result END CASE 表示函数开始,END 表示函数结束。如果 condition1 成立,则返回 result1, 如果 condition2 成立,则返回 result2,当全部不成立则返回 result,而当有一个成立之后,后面的就不执行了。 SELECT CASE   WHEN 1 > 0   THEN '1 > 0'   WHEN 2 > 0   THEN '2 > 0'   ELSE '3 > 0'   END ->1 > 0
CAST(x AS type) 转换数据类型 字符串日期转换为日期: SELECT CAST("2017-08-29" AS DATE); -> 2017-08-29
COALESCE(expr1, expr2, …, expr_n) 返回参数中的第一个非空表达式(从左向右) SELECT COALESCE(NULL, NULL, NULL, 'runoob.com', NULL, 'google.com'); -> runoob.com
CONNECTION_ID() 返回服务器的连接数 SELECT CONNECTION_ID(); -> 4292835
CONV(x,f1,f2) 返回 f1 进制数变成 f2 进制数 SELECT CONV(15, 10, 2); -> 1111
CONVERT(s USING cs) 函数将字符串 s 的字符集变成 cs SELECT CHARSET('ABC') ->utf-8 SELECT CHARSET(CONVERT('ABC' USING gbk)) ->gbk
CURRENT_USER() 返回当前用户 SELECT CURRENT_USER(); -> guest@%
DATABASE() 返回当前数据库名 SELECT DATABASE(); -> runoob
IF(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。 SELECT IF(1 > 0,'正确','错误') ->正确
IFNULL(v1,v2) 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 SELECT IFNULL(null,'Hello Word') ->Hello Word
ISNULL(expression) 判断表达式是否为 NULL SELECT ISNULL(NULL); ->1
LAST_INSERT_ID() 返回最近生成的 AUTO_INCREMENT 值 SELECT LAST_INSERT_ID(); ->6
NULLIF(expr1, expr2) 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1 SELECT NULLIF(25, 25); ->
SESSION_USER() 返回当前用户 SELECT SESSION_USER(); -> guest@%
SYSTEM_USER() 返回当前用户 SELECT SYSTEM_USER(); -> guest@%
USER() 返回当前用户 SELECT USER(); -> guest@%
VERSION() 返回数据库的版本号 SELECT VERSION() -> 5.6.34

9.4 运算符

+、-、*、\

9.5 时间函数

函数名 描述 实例
ADDDATE(d,n) 计算其实日期 d 加上 n 天的日期 SELECT ADDDATE("2017-06-15", INTERVAL 10 DAY); ->2017-06-25
ADDTIME(t,n) 时间 t 加上 n 秒的时间 SELECT ADDTIME('2011-11-11 11:11:11', 5) ->2011-11-11 11:11:16 (秒)
CURDATE() 返回当前日期 SELECT CURDATE(); -> 2018-09-19
CURRENT_DATE() 返回当前日期 SELECT CURRENT_DATE(); -> 2018-09-19
CURRENT_TIME 返回当前时间 SELECT CURRENT_TIME(); -> 19:59:02
CURRENT_TIMESTAMP() 返回当前日期和时间 SELECT CURRENT_TIMESTAMP() -> 2018-09-19 20:57:43
CURTIME() 返回当前时间 SELECT CURTIME(); -> 19:59:02
DATE() 从日期或日期时间表达式中提取日期值 SELECT DATE("2017-06-15"); -> 2017-06-15
DATEDIFF(d1,d2) 计算日期 d1->d2 之间相隔的天数 SELECT DATEDIFF('2001-01-01','2001-02-02') -> -32
DATE_ADD(d,INTERVAL expr type) 计算起始日期 d 加上一个时间段后的日期 SELECT ADDDATE('2011-11-11 11:11:11',1) -> 2011-11-12 11:11:11 (默认是天) SELECT ADDDATE('2011-11-11 11:11:11', INTERVAL 5 MINUTE) -> 2011-11-11 11:16:11 (TYPE的取值与上面那个列出来的函数类似)
DATE_FORMAT(d,f) 按表达式 f的要求显示日期 d SELECT DATE_FORMAT('2011-11-11 11:11:11','%Y-%m-%d %r') -> 2011-11-11 11:11:11 AM
DATE_SUB(date,INTERVAL expr type) 函数从日期减去指定的时间间隔。 Orders 表中 OrderDate 字段减去 2 天: SELECT OrderId,DATE_SUB(OrderDate,INTERVAL 2 DAY) AS OrderPayDate FROM Orders
DAY(d) 返回日期值 d 的日期部分 SELECT DAY("2017-06-15"); -> 15
DAYNAME(d) 返回日期 d 是星期几,如 Monday,Tuesday SELECT DAYNAME('2011-11-11 11:11:11') ->Friday
DAYOFMONTH(d) 计算日期 d 是本月的第几天 SELECT DAYOFMONTH('2011-11-11 11:11:11') ->11
DAYOFWEEK(d) 日期 d 今天是星期几,1 星期日,2 星期一,以此类推 SELECT DAYOFWEEK('2011-11-11 11:11:11') ->6
DAYOFYEAR(d) 计算日期 d 是本年的第几天 SELECT DAYOFYEAR('2011-11-11 11:11:11') ->315
EXTRACT(type FROM d) 从日期 d 中获取指定的值,type 指定返回的值。 type可取值为: 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 SELECT EXTRACT(MINUTE FROM '2011-11-11 11:11:11') -> 11
FROM_DAYS(n) 计算从 0000 年 1 月 1 日开始 n 天后的日期 SELECT FROM_DAYS(1111) -> 0003-01-16
HOUR(t) 返回 t 中的小时值 SELECT HOUR('1:2:3') -> 1
LAST_DAY(d) 返回给给定日期的那一月份的最后一天 SELECT LAST_DAY("2017-06-20"); -> 2017-06-30
LOCALTIME() 返回当前日期和时间 SELECT LOCALTIME() -> 2018-09-19 20:57:43
LOCALTIMESTAMP() 返回当前日期和时间 SELECT LOCALTIMESTAMP() -> 2018-09-19 20:57:43
MAKEDATE(year, day-of-year) 基于给定参数年份 year 和所在年中的天数序号 day-of-year 返回一个日期 SELECT MAKEDATE(2017, 3); -> 2017-01-03
MAKETIME(hour, minute, second) 组合时间,参数分别为小时、分钟、秒 SELECT MAKETIME(11, 35, 4); -> 11:35:04
MICROSECOND(date) 返回日期参数所对应的毫秒数 SELECT MICROSECOND("2017-06-20 09:34:00.000023"); -> 23
MINUTE(t) 返回 t 中的分钟值 SELECT MINUTE('1:2:3') -> 2
MONTHNAME(d) 返回日期当中的月份名称,如 Janyary SELECT MONTHNAME('2011-11-11 11:11:11') -> November
MONTH(d) 返回日期d中的月份值,1 到 12 SELECT MONTH('2011-11-11 11:11:11') ->11
NOW() 返回当前日期和时间 SELECT NOW() -> 2018-09-19 20:57:43
PERIOD_ADD(period, number) 为 年-月 组合日期添加一个时段 SELECT PERIOD_ADD(201703, 5); -> 201708
PERIOD_DIFF(period1, period2) 返回两个时段之间的月份差值 SELECT PERIOD_DIFF(201710, 201703); -> 7
QUARTER(d) 返回日期d是第几季节,返回 1 到 4 SELECT QUARTER('2011-11-11 11:11:11') -> 4
SECOND(t) 返回 t 中的秒钟值 SELECT SECOND('1:2:3') -> 3
SEC_TO_TIME(s) 将以秒为单位的时间 s 转换为时分秒的格式 SELECT SEC_TO_TIME(4320) -> 01:12:00
STR_TO_DATE(string, format_mask) 将字符串转变为日期 SELECT STR_TO_DATE("August 10 2017", "%M %d %Y"); -> 2017-08-10
SUBDATE(d,n) 日期 d 减去 n 天后的日期 SELECT SUBDATE('2011-11-11 11:11:11', 1) ->2011-11-10 11:11:11 (默认是天)
SUBTIME(t,n) 时间 t 减去 n 秒的时间 SELECT SUBTIME('2011-11-11 11:11:11', 5) ->2011-11-11 11:11:06 (秒)
SYSDATE() 返回当前日期和时间 SELECT SYSDATE() -> 2018-09-19 20:57:43
TIME(expression) 提取传入表达式的时间部分 SELECT TIME("19:30:10"); -> 19:30:10
TIME_FORMAT(t,f) 按表达式 f 的要求显示时间 t SELECT TIME_FORMAT('11:11:11','%r') 11:11:11 AM
TIME_TO_SEC(t) 将时间 t 转换为秒 SELECT TIME_TO_SEC('1:12:00') -> 4320
TIMEDIFF(time1, time2) 计算时间差值 SELECT TIMEDIFF("13:10:11", "13:10:10"); -> 00:00:01
TIMESTAMP(expression, interval) 单个参数时,函数返回日期或日期时间表达式;有2个参数时,将参数加和 SELECT TIMESTAMP("2017-07-23", "13:10:11"); -> 2017-07-23 13:10:11
TO_DAYS(d) 计算日期 d 距离 0000 年 1 月 1 日的天数 SELECT TO_DAYS('0001-01-01 01:01:01') -> 366
WEEK(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53 SELECT WEEK('2011-11-11 11:11:11') -> 45
WEEKDAY(d) 日期 d 是星期几,0 表示星期一,1 表示星期二 SELECT WEEKDAY("2017-06-15"); -> 3
WEEKOFYEAR(d) 计算日期 d 是本年的第几个星期,范围是 0 到 53 SELECT WEEKOFYEAR('2011-11-11 11:11:11') -> 45
YEAR(d) 返回年份 SELECT YEAR("2017-06-15"); -> 2017
YEARWEEK(date, mode) 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一,以此类推 SELECT YEARWEEK("2017-06-15"); -> 201724

10.分组查询

10.1 指定列进行分组

SELECT COUNT(*) FROM tb_name GROUP BY score HAVING COUNT(*)>1;

10.2 条件使用Having

分组后的条件使用 HAVING 来限定,WHERE 是对原始数据进行条件限制。几个关键字的使用顺序为 where 、group by 、having、order by

扫描二维码关注公众号,回复: 3890344 查看本文章
SELECT name ,sum(*)  FROM tb_name WHERE id<>1 GROUP BY name  HAVING sum(*)>5 ORDER BY sum(*) DESC;

10.3 ORDER BY 排序

SELECT name, COUNT(*) FROM tb_name GROUP BY name DESC; --DESC|ASC=>降序和升序排列

11.UNION规则

11.1 UNION 语句

用于将不同表中相同列中查询的数据展示出来(不包括重复数据)

SELECT country FROM Websites
UNION
SELECT country FROM apps
ORDER BY country; 

11.2 UNION ALL 语句

用于将不同表中相同列中查询的数据展示出来(包括重复数据)

SELECT country FROM Websites
UNION ALL
SELECT country FROM apps
ORDER BY country; 

12.全文检索

SELECT MATCH(note_text)AGAINST('PICASO') FROM tb_name;

InnoDB引擎不支持全文检索,MyISAM可以。

13.视图

视图只是用来查询数据并不能用来存储数据信息。对视图中的数据进行增加或删除操作和基本表操作是一样的。

13.1 创建视图

CREATE VIEW name AS SELECT * FROM tb_name WHERE [...] ORDER BY [...];

13.2 修改视图

CREATE OR REPLACE VIEW name AS SELECT [...] FROM [...];

13.3 查看视图

SHOW TABLES;
DESC VIEW_NAME;
SHOW FIELDS FROM VIEW_NAME;
show table status like VIEW_NAME;
show create view VIEW_NAME;

13.2 视图的特殊作用

  1. 简化表之间的联结(把联结写在select中);

  2. 重新格式化输出检索的数据(TRIM,CONCAT等函数);

  3. 过滤不想要的数据(select部分)

  4. 使用视图计算字段值,如汇总这样的值。

14.使用存储过程

存储过程就是一个自定义函数,有局部变量参数,可传入参数,可以返回值。

14.1 创建存储过程

CREATE PROCEDURE pro(IN num INT,OUT total INT)
BEGIN
	SELECT SUM(score) INTO total FROM tb_name WHERE id=num;
END;

这里的 IN (传递一个值给存储过程),OUT(从存储过程传出一个值),INOUT(对存储过程传入、传出),INTO(保存变量)

14.2 调用存储过程:

CALL pro(13,@total)	 --这里的OUT也是需要写上的,不写会出错
SELECT @total  		--这里就可以看到结果了

14.3 存储过程其他操作

SHOW PROCEDURE STATUS;      --显示当期的存储过程
DROP PROCEDURE pro;        --删除指定存储过程

15.游标的操作

CREATE PROCEDURE pro()
BEGIN 
	DECLARE ordername CURSOR FOR
	SELECT order_num FROM orders;
END;

OPEN ordername;    --打开游标
CLOSE ordername;   --关闭游标

16.触发器

触发器是指在进行某项指定操作时,触发触发器内指定的操作。支持触发器的语句有DELETE、INSERT、UPDATE,其他均不支持

16.1 创建触发器

CREATE TRIGGER trig AFTER INSERT ON ORDERS FOR EACH ROW SELECT NEW.orser_name;

INSERT语句的时候,触发语句,返回一个值

16.2 删除触发器

DROP TRIGGER trig;

17.事务

17.1 事务控制语句

  • BEGIN或START TRANSACTION;显式地开启一个事务;
  • COMMIT:也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;
  • ROLLBACK:有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
  • SAVEPOINT identifier:SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;
  • RELEASE SAVEPOINT identifier:删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
  • ROLLBACK TO identifie:把事务回滚到标记点;
  • SET TRANSACTION:用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

17.2 事务处理主要有两种方法

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

18.索引

18.1 普通索引

18.1.1 创建索引

CREATE INDEX indexName ON mytable(username(length)); 

如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length。

18.1.2 添加索引

ALTER table tableName ADD INDEX indexName(columnName);

18.1.3 创建表的时候直接指定

CREATE TABLE mytable(  
    ID INT NOT NULL,   
    username VARCHAR(16) NOT NULL,  
    INDEX [indexName] (username(length))  
);  

18.1.4 删除索引

DROP INDEX [indexName] ON tableName; 

18.2 唯一索引

18.2.1 创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length));

18.2.2 添加索引

ALTER table mytable ADD UNIQUE [indexName] (username(length));

18.2.3 创建表的时候直接指定

CREATE TABLE mytable(  
    ID INT NOT NULL,   
    username VARCHAR(16) NOT NULL,  
    UNIQUE [indexName] (username(length))  
);  

18.3 使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引

--该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list);

--这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list);

--添加普通索引,索引值可出现多次
ALTER TABLE tbl_name ADD INDEX index_name (column_list);

--该语句指定了索引为 FULLTEXT ,用于全文索引
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list);

在表中添加索引

ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引

ALTER TABLE testalter_tbl DROP INDEX c;

18.4 使用ALTER添加和删除主键

主键只能作用于一个列上,添加主键索引时,你需要确保该主键默认不为空(NOT NULL)

ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名

ALTER TABLE testalter_tbl DROP PRIMARY KEY;

18.5 显示索引信息

SHOW INDEX FROM table_name; \G --\G来格式化输出信息

19.备份和恢复

19.1 备份

备份命令mysqldump格式

mysqldump -h主机名  -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

mysqldump  --add-drop-table -uuser_name -p -database databasename > backupfile.sql

直接将MySQL数据库压缩备份

mysqldump -hhostname -uuser_name -ppassword -database databasename | gzip > backupfile.sql.gz

备份MySQL数据库某个(些)表

mysqldump -hhostname -uuser_name -p databasename specific_table1 specific_table2 > backupfile.sql

同时备份多个MySQL数据库

mysqldump -hhostname -uuser_name -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

仅备份份数据库结构

mysqldump –no-datadatabases databasename1 databasename2 databasename3 > structurebackupfile.sql

备份服务器上所有数据库

mysqldump –all-databases > allbackupfile.sql

将数据库转移到新服务器

mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

查看binlog日志

mysqlbinlog  binlog日志名称|more

19.2 恢复

还原MySQL数据库的命令

mysql -hhostname -uuser_name -ppassword databasename < backupfile.sql

可以在mysql命令行下面用source导入

mysql -u root -p
mysql>use dbname
mysql>source d:/dbname.sql

还原压缩的MySQL数据库

gunzip < backupfile.sql.gz | mysql -uuser_name -ppassword databasename

恢复bin-log.000002

mysqlbinlog bin-log.000002 | mysql -h10.6.208.183 -utest2 -p123  -P3310  

猜你喜欢

转载自blog.csdn.net/wyy626562203/article/details/83445249