MySql必知必会

数据库是一个以某种有组织的方式存储的数据集合.
表-某种特定类型数据的结构化清单.
模式-关于数据库和表的布局特性的信息.
列-表中的一个字段
数据类型-是列的一种属性
行-表中的数据是按照行存储的
主键-每一行都应该有唯一标识自己的列为主键
sql-专门用来与数据库通信的语言

1.什么是MySQL

服务器软件为MySQL DBMS。你可以在本地安装的副本上运行,也可以连接到运行在你具有访问权的远程服务器上的一个副本。

1.1.登录MySQL

mysql -uroot -p

1.2.了解数据库和表-常用的SQL

如何连接和登录MySQL,如何用USE选择数据库,如何用SHOW查看MySQL数据库、表和内部信息。

1
2
3
4
5
6
7
8
show databases; #展示所有的数据库
use <数据库名>; #操作某个数据库
show tables; #展示数据库中的表
show columns from customers; #展示customers表中的列
SHOW STATUS #用于显示广泛的服务器状态信息
SHOW CREATE DATABASE和SHOW CREATE TABLE #分别用来显示创建特定数据库或表的MySQL语句
SHOW GRANTS #用来显示授予用户(所有用户或特定用户)的安全权限
SHOW ERRORS和SHOW WARNINGS #用来显示服务器错误或警告消息

2.检索数据

学习如何使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。

1
2
3
4
5
6
7
8
SELECT prod_name FROM products; #查询products表中的prod_name列
SELECT prod_id, prod_name, prod_price FROM products; #查询products表中的3列数据
SELECT * FROM products; #查询所有的列
SELECT DISTINCT vend_id FROM products; #查询并去重distinct关键字应用于所以列
SELECT prod_name FROM products LIMIT 5; #只查不多余5条的数据(从第一行开始)
SELECT prod_name FROM products LIMIT 5; #从行5开始的5行。第一个为开始,第二为行数。
SELECT products.prod_name FROM products; #完全限定列名
SELECT products.prod_name FROM crashcourse.products; #完全限定表名

3.排序检索数据

DESC-降序(大的在前)
ASC-升序(小的在前)默认

1
2
3
4
5
SELECT prod_name FROM products ORDER BY prod_name; #单列排序
SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price, prod_name; #多个行具有相同的prod_price值时才对产品按prod_name进行排序
SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price DESC; #降序排序产品(最贵的在最前面)
SELECT prod_id, prod_name, prod_price FROM products ORDER BY prod_price DESC, prod_name; #降序排序产品(最贵的在最前面),然后再对产品名排序
SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 1; #排完序后取一条(LIMIT必须在ORDER BY 之后)

4.过滤数据

WHERE + 条件

WHERE子句操作符

1
2
SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10; #查询价格在5-10之间的数据
SELECT prod_name FROM products WHERE prod_price IS NULL; #prod_price字段为空的数据

5.数据过滤

MySQL允许给出多个WHERE子句。这些子句可以两种方式使用:以AND子句的方式或OR子句的方式使用。
SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。

1
2
3
SELECT prod_name, prod_price FROM products WHERE vend_id = 1002 OR vend id = 1003 ORDER BY prod name;
SELECT prod_name, prod_price FROM products WHERE vend_id IN (1002,1003);
SELECT prod_name, prod_price FROM products WHERE vend_id NOT IN (1002,1003);

6.用通配符进行过滤

%-%表示任何字符出现任意次数
_-下划线的用途与%一样,但下划线只匹配单个字符而不是多个字符。

1
2
3
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%';
SELECT prod_name FROM products WHERE prod_name LIKE 's%e';
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet_';
  • 不要过度使用通配符。如果其他操作符能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
  • 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据。

7.用正则表达式进行搜索

REGEXP ‘表达式’-like匹配列,正则匹配列中的值,双斜杠==//==转义特殊字符

1
SELECT prod_name FROM products WHERE prod_name REGEXP '表达式';

8.创建计算字段

拼接-concatenate
Trim函数 MySQL除了支持RTrim(),还支持LTrim()(去掉串左边的空格)以及Trim()(去掉串左右两边的空格)。