发布时间:2025-12-10 11:31:32 浏览次数:3
目录
-p表示使用密码登录
或
mysql> DESCRIBE 表名;该命令将会输出指定表的每个字段的字段名、数据类型、非空约束、是否是主键和默认值等信息。
或
mysql> SHOW WARNINGS;通常SQL语句不区分大小写,但建议将关键字大写,变量和数据小写。
注意最后一个列名后面不加逗号”,”。
| INT | 4 | 整数 | - |
| FLOAT | 4 | 单精度浮点数 | - |
| DOUBLE | 4 | 双精度浮点数 | - |
| ENUM | - | 单选 | ENUM(‘a’,’b’,’c’) |
| SET | - | 多选 | SET(‘1’,’2’,’3’) |
| DATE | 3 | 日期 | YYYY-MM-DD |
| TIME | 3 | 时间点或持续时间 | HH:MM:SS |
| YEAR | 1 | 年份值 | YYYY |
| CHAR | 0~255 | 定长字符串 | - |
| VARCHAR | 0~255 | 变长字符串 | - |
| TEXT | 0~65535 | 长文本数据 | - |
CHAR的长度是固定的,而VARCHAR的长度是可以变化的。
比如,存储字符串"abc",对于CHAR (10),表示存储的字符将占10个字节(包括7个空字符),
而同样的VARCHAR(12)则只占用3个字节的长度,12只是最大值,
当你存储的字符小于12时,按实际长度存储。
VALUES中的值为对应列属性的值,其中CHAR,VARCHAR,TEXT,DATE,TIME,ENUM等类型的数据需要单引号修饰。
或
CONSTRAINT 主键名 PRIMARY KEY (列名a,列名b,...)一个表中可以有多个主键。
每个表可以由多个外键,每个外键必须参考另一个表中的主键,被外键约束的列的取值必须在它参考的主键的列中有对应的值。
MySQL中违反非空约束只会警告不会报错。
字符类型默认值使用单引号括起。
该表中该列值不可重复。
必须通过LIKE使用通配符。
通配符不能用于检索NULL。
使用通配符搜索相对于其他搜索方式通常要花费更长的时间。
将通配符放在搜索模式的开头处,搜索起来是最慢的,尽量避免这样做。
WHERE子句操作符
| = | 等于 |
| != | 不等于 |
| <> | 不等于 |
| < | 小于 |
| > | 大于 |
| <= | 小于等于 |
| <= | 大于等于 |
| BETWEEN … AND | 在两个值之间 |
| AND | 需要同时满足的条件 |
| OR | 满足其一即可的条件 |
| IN | 指定条件范围 |
| NOT | 否定其后的任何条件 |
| IS NULL | 空值检查 |
| LIKE | 使用通配符 |
AND的优先级大于OR,当同时使用AND和OR时,使用括号来避免因筛选顺序不同造成错误。
IN操作符的范围参数放在圆括号中,以逗号分隔。
使用IN通常比使用OR执行速度更快,而且语义更清楚,能够更动态的建立WHERE子句。
在进行匹配过滤和不匹配过滤时都不会对NULL值进行匹配。
NULL表示不含值,它不同于0、空字符串和空格。
使用单引号限定字符串。
匹配字符串时默认不区分大小写。
例如:
SELECT 列名a,列名b,... FROM 表名 WHERE 列名a>x1 AND/OR 列名a<x2 AND/OR 列名b='x3';SELECT 列名a,列名b,... FROM 表名 WHERE 列名a IN/NOT IN ('范围列名a','范围列名b',...);SELECT 列名a,列名b,... FROM 表名 WHERE 列名a LIKE 'xx_xx%';ORDER BY 默认升序排列,使用ASC指定升序排序,使用DESC指定降序排序。
DESC/ASC只能直接作用于直接位于其前面的列名,如果想在多个列上进行降序排序,必须对每个列指定DESC关键字。
DISTINCT关键字作用于所有列而不是仅作用于前置它的列。
或
mysql> SELECT 列名... FROM 表名 LIMIT 最大输出行数 OFFSET 检索起始行; # MySQL 5若不指定起始行,则从第0行开始检索,注意MySQL中表行从0开始。
若语句中含有ORDER BY,则LIMIT应该位于ORDER BY之后。
例句:
SELECT 列名,... FROM 表名 ORDER BY 列名 ASC/DESC;| COUNT() | 计数 | 任意类型 |
| SUM() | 求和 | 数字类数据 |
| AVG() | 平均值 | 数字类数据 |
| MAX() | 最大值 | 数字类数据 |
| MIN() | 最小值 | 数字类数据 |
| AS | 重命名 | 不适用 |
例如:
SELECT COUNT/SUM/AVG/MAX/MIN(列名) AS 新的列名,函数2,函数3,... FROM 表名;会将函数的结果作为新的列的值。处理多个表且处理结果来自一个表时使用子查询,子查询可以扩展多层。
或
mysql> SELECT 列名1,列名2,...-> FROM 表名1 JOIN 表名2-> ON 表名1.列名1 = 表名2.列名2;使用连接查询显示多个表中的数据。
或
mysql-> ALTER TABLE 原数据表名 RENAME 新数据表名;或
mysql-> ALTER TABLE 原数据表名 RENAME TO 新数据表名;或
mysql-> ALTER TABLE 数据表名-> ADD 新增列名 数据类型(数据长度) 约束-> 插入的位置;插入的位置:
新增列默认放在表的最右边,使用 FIRST 将新列插入到第一列,使用 AFTER 指定列名 将新列插入到指定列后面。或
mysql-> ALTER TABLE 表名-> DROP 列名;数据类型不可省略。修改数据类型可能导致数据丢失,慎用!
一定要加限制条件!
一定要加限制条件!
或
mysql-> CREATE INDEX 索引名-> ON 表名 (列名);在SELECT中使用子查询或连接查询可以将视图建立在多张表上。
或
mysql-> CREATE DATABASE 新建数据库名;mysql-> quit/exit;$ mysql -u root 新建的数据库名 < 备份文件名;REGEXP的返回值
使用.在正则表达式中匹配任意一个字符
???LIKE和REGEXP所匹配的部分(列值、列名)
v3.23.4以后,MySQL中正则表达式默认不区分大小写
要区分大小写,需要在REGEXP之后、表达式之前加BINARY关键字
搜索多个字符串之一
搜索多个字符中的一个字符
‘[1|2|3] sth.’ 将会匹配1 sht.或2 sth.或3 sth.
‘1|2|3 sth.’ 将会匹配1或2或3 sth.
MySQL中的正则表达式使用双反斜杠(\)来表示转义
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表 |
| \v | 垂直制表 |
| [:alnum:] | 任意字符和数字(同[a-zA-Z0-9]) |
| [:alpha:] | 任意字符(同[a-zA-Z]) |
| [:blank:] | 空格和水平制表(同[\t]) |
| [:cntrl:] | ASCII控制字符(ASCII 0到31和127) |
| [:digit:] | 任意数字(同[0-9]) |
| [:graph:] | 与[:print:]相同,但不包含空格 |
| [:lower:] | 任意小写字母(同[a-z]) |
| [:print:] | 任意可打印字符 |
| [:punct:] | 既不在[:alnum:]又不在[:cntrl:]中的任意字符 |
| [:space:] | 包括空格在内的任意空白字符(同[\f\n\r\t\v]) |
| [:upper:] | 任意大写字母(同[A-Z]) |
| [:xdigit:] | 任意十六进制数(同[a-fA-F0-9]) |
| * | 0个或多个匹配 |
| + | 1个或多个匹配(同{1,}) |
| ? | 0个或1个匹配(同{0,1) |
| {n} | 指定数目的匹配 |
| {n,} | 不少于指定数目的匹配 |
| {n,m} | 匹配数目的范围(m不超过255) |
重复元字符对它前边的字符或表达式生效
| ^ | 只匹配文本的开始处 |
| $ | 只匹配文本的结尾处 |
| [[:<:]] | 只匹配词的开始处 |
| [[:>:]] | 只匹配词的结尾处 |
定位元字符对它后边的字符或表达式生效
各个参数之间使用逗号分隔
多数DBMS使用 || 或者 + 来实现拼接,但MySQL使用 Concat()函数
在进行SQL语句转换时需要留意这一区别
MySQL函数可以嵌套使用
使用 Trim()函数来去除查询结果中两边的所有空格
| + | 加 |
| - | 减 |
| * | 乘 |
| / | 除 |
可以使用圆括号区分运算优先顺序
| Left() | 返回串左边的字符 |
| Length() | 返回串的长度 |
| Locate() | 找出串的一个子串 |
| Lower() | 将串转换为小写 |
| LTrim() | 去掉串左边的空格 |
| Rigit() | 返回串右边的字符 |
| RTrim() | 去掉串右边的空格 |
| Soundex() | 返回串的SOUNDEX值 |
| SubString() | 返回子串的字符 |
| Upper() | 将串转换为大写 |
Soundex是将文本串转换为描述其语音表示的字母数字模式的算法,使得能够对串进行发音比较而不是字母比较
例如搜索发音类似 Lie 的子串:
该搜索可以匹配到发音与 Lie 类似的 Lee 、 Li 等
| AddDate() | 增加一个日期(天、周等) |
| AddTime() | 增加一个时间(时、分等) |
| CurDate() | 返回当前日期 |
| CurTime() | 返回当前时间 |
| Date() | 返回日期时间的日期部分 v4.1.1 |
| DateDiff() | 计算两个日期之差 |
| Date_Add() | 高度灵活的日期计算函数? |
| Date_Format() | 返回一个格式化的日期或时间串 |
| Day() | 返回一个日期的天数部分 |
| DayOfWeek() | 返回一个日期对应的星期 |
| Hour() | 返回一个时间的小时部分 |
| Minute() | 返回一个时间的分钟部分 |
| Now() | 返回当前日期时间 |
| Second() | 返回一个时间的秒部分 |
| Time() | 返回一个日期的时间部分 v4.1.1 |
| Year() | 返回一个日期的年份部分 |
MySQL日期格式使用 yyyy-mm-dd 格式
检索日期时应该使用Date()函数,直接比较可能检测不到结果
MySQL会将00-69处理为2000-2069,将70-99处理为1970-1999,为避免歧义,使用标准格式
| Abs() | 返回一个数的绝对值 |
| Cos() | 返回一个角度的余弦 |
| Exp() | 返回一个数的指数值 |
| Mod() | 返回除操作的余数 |
| Pi() | 返回圆周率 |
| Rand() | 返回一个随机数 |
| Sin() | 返回一个角度的正弦 |
| Sqrt() | 返回一个数的平方根 |
| Tan() | 返回一个角度的正切 |
| AVG() | 返回某列的平均值 |
| COUNT() | 返回某行的平均值 |
| MAX() | 返回某列的最大值 |
| MIN() | 返回某列的最小值 |
| SUM() | 返回某列之和 |
在多个列上进行计算
NULL处理
AVG()函数
COUNT()函数
MAX()/MIN()函数
聚集不同的值,忽略重复值
组合聚集函数
GROUP BY 子句指示MySQL分组数据,然后对每个组而不是整个结果集进行聚集。
使用GROUP BY的一些规定:
+ GROUP BY 子句可以包好任意数目的列,这使得能够对分组进行嵌套+ 如果在 GROUP BY 中嵌套了分组,数据将在最后规定的分组上进行汇总,即在建立分组时,指定的所有列都一起计算,不能从个别的列取回数据。+ GROUP BY 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。如果在 SELECT 中使用表达式,则必须在 GROUP BY 子句中使用相同的表达式。不能使用别名。+ 除聚集计算语句外,SELECT 语句中的每个列都必须在 GROUP BY 子句中给出。+ 如果分组列具有 NULL 值,则 NULL 作为一个分组返回。如果列中有多行 NULL 值,它们将分为一组。+ GROUP BY子句必须出现在 WHERE 子句之后、ORDER BY 子句之前。使用 ROLLUP 使用 WITH ROLLUP 关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值。
| 排序产生的输出 | 分组行,但输出可能不是分组的数据 |
| 任意列都可以使用(甚至非选择的列) | 只能使用选择的列或表达式,而且必须使用每个选择列表达式 |
| 不一定需要 | 如果与聚集函数一起使用列(或表达式),则必须使用 |
一般在使用 GROUP BY 子句时,应该也给出 ORDER BY 子句,这是保证数据正确排序的唯一方法。
| SELECT | 要返回的列或表达式 | 是 |
| FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
| WHERE | 行级过滤 | 否 |
| GROUP BY | 分组说明 | 尽在按组计算聚集时使用 |
| HAVING | 组级过滤 | 否 |
| ORDER BY | 输出排序顺序 | 否 |
| LIMIT | 要检索的行数 | 否 |
MySQL 4.1引入了对子查询的支持。
查询 任何SQL语句都是查询,但此术语一般指 SELECT 语句。
子查询 即嵌套在其他查询中的查询。
在 WHERE 子句中使用子查询,应该保证 SELECT 语句具有与 WHERE 相同数据的列。通常,子查询将返回单个列并且与单个列匹配,但如果需要,也可以使用多个列。
子查询一般与 IN 操作符结合使用,但也可以用于测试等于(=)、不等于(<>)等。
相关子查询 涉及外部查询的子查询。
当列名可能有多义性的时候要使用完全限定列名来避免歧义。