- DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基
于客户机 — 服务器的DBMS。前者(包括诸如Microsoft Access和FileMaker)用于桌面用途,通常不用于高端或更关键的应用。
MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。 - MySQL语句中各关键字的顺序:
子 句 | 说 明 | 是否必须使用 |
---|---|---|
SELECT | 要返回的列或表达式 | 是 |
FROM | 从中检索数据的表 | 仅在从表选择数据时使用 |
WHERE | 行级过滤 | 否 |
GROUP BY | 分组说明 | 仅在按组计算聚集时使用 |
HAVING | 组级过滤 | 否 |
ORDER BY | 输出排序顺序 | 否 |
LIMIT | 要检索的行数 | 否 |
- 在匹配过滤或不匹配过滤时不返回具有
NULL
值的行。 - MySQL通配符:
(1)百分号:匹配0个、1个或多个字符
(2)下划线:只匹配单个字符而不是多个字符 - MySQL使用正则表达式过滤:
select ... from ... where 待过滤的列名 regexp '正则表达式'
- MySQL 支持的函数
函数名 | 意义 | 用法 |
---|---|---|
concat() | 将多个列的值连接到一起输出 | select concat(‘首都’, ‘(’, ‘国家’, ‘)’) from 表名 |
trim() | 去掉值两端的空格 | select trim(列名) from 表名 |
rtrim() | 去掉值右端的空格 | select rtrim(列名) from 表名 |
ltrim() | 去掉值左端的空格 | select ltrim(列名) from 表名 |
length() | 返回串的长度 | select length(列名) from 表名 |
left() | 返回串左边n个字符 | select left(列名, n) from 表名 |
right() | 返回串右边n个字符 | select right(列名, n) from 表名 |
lower() | 返回小写字符 | select lower(列名) from 表名 |
upper() | 返回大写字符 | select upper(列名) from 表名 |
此外MySQL也支持常见的数值处理函数:Abs() Cos() Exp() Mod() Pi() Rand() Sin() Sqrt() Tan()
它们的含义是显然的。
- 聚集函数在没有
group by
关键字时作用于所有行上, 有group by
时则会作用于每个分组。 - 在用
UNION
组合查询时,只能使用一条ORDER BY
子句,它必须出现在最后一条SELECT
语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY
子句。 - 用
auto_increment
声明的主键在插入新值时可以不给主键赋值,该列将由MySQL自动增量。 INSERT
插入多条数据:
insert into table_name(col_name_1, col_name_2, ...)
values(val_1_1, val_1_2, ...),
(val_2_1, val_2_2, ...),
...
(val_n_1, val_n_2, ...)
此技术可以提高数据库处理的性能,因为MySQL用单条INSERT
语句处理多个插入比使用多条INSERT
语句快。
11. 从另一张表导入数据:
insert into table_name(col_name_1, col_name_2, ...)
select new_col_1, new_col_2, ... from new_table
- 如果想从表中删除所有行,不要使用
DELETE
。可使用TRUNCATE TABLE
语句,它完成相同的工作,但速度更快(TRUNCATE
实际是删除原来的表并重新创建一个表,而不是逐行删除表中的数据)。 -
此语句返回最后一个AUTO_INCREMENT值,然后可以将它用于后续的MySQL语句。select last_insert_id()