day1-MySQL必知必会学习1
一、了解MySQL
1) 数据库软件,应称为DBMS(数据库管理系统)
2) 行:表中的数据是按照行存储的,是表中的一个记录
3) 主键:一列(或一组列),其值能够区分表中的每一行
- 任意两行都不具有相同的主键
- 每一行都必须有一个主键(主键列不能有NULL值)
使用主键的习惯
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值
4)SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。 SQL是一种专门用来与数据库通信的语言。
二、使用MySQL
1. 连接
1)连接MySQL需要:
a. 主机名(计算机名)——如果连接到本地MySQL服务器, 为localhost;
b. 端口(如果使用默认端口3306之外的端口);
c. 一个合法的用户名;
d. 用户口令(如果需要)。
2)选择数据库
1 USE databasetest;
三、检索数据
1. SELECT语句
1)检索products表中所有的字段
SELECT * from products;
2)检索不同的行,例如检索products表中vend_id值不同的行,使用 DISTINCT 关键字
SELECT DISTINCT vend_id FROM products;
3) 限制只显示5行
SELECT * FROM products LIMIT 5;
4) 限制只显示从行5开始的5行
SELECT * FROM products LIMIT 5,5;
四、过滤数据
1. WHERE 子句
1) where子句控制符
SELECT * FROM products WHERE prod_price BETWEEN 10 AND 20;

2. OR 操作符
SELECT * FROM products WHERE vend_id = 1001 OR vend_id = 1002;
3. IN 操作符
SELECT * FROM products WHERE vend_id IN(1001,1002);
4. NOT 操作符
SELECT * FROM products WHERE vend_id NOT IN(1001,1002);
五、用通配符进行过滤
1. LIKE 操作符
1) % 通配符 (通配一个或多个字符)
a. 为了找出所有以词jet起头的产品,可使用以下SELECT语句
mysql> SELECT * FROM products WHERE prod_name LIKE 'jet%'; +---------+---------+--------------+------------+---------------------------------------+ | prod_id | vend_id | prod_name | prod_price | prod_desc | +---------+---------+--------------+------------+---------------------------------------+ | JP1000 | 1005 | JetPack 1000 | 35 | JetPack 1000, intended for single use | | JP2000 | 1005 | JetPack 2000 | 55 | JetPack 2000, multi-use | +---------+---------+--------------+------------+---------------------------------------+ 2 rows in set
b. 通配符可以组合使用,如 '%pac%' 表示搜索字段中包含pac
mysql> SELECT * FROM products WHERE prod_name LIKE '%pac%'; +---------+---------+--------------+------------+---------------------------------------+ | prod_id | vend_id | prod_name | prod_price | prod_desc | +---------+---------+--------------+------------+---------------------------------------+ | JP1000 | 1005 | JetPack 1000 | 35 | JetPack 1000, intended for single use | | JP2000 | 1005 | JetPack 2000 | 55 | JetPack 2000, multi-use | +---------+---------+--------------+------------+---------------------------------------+ 2 rows in set
2) 下划线 _ 操作符(只通配1个字符)
3)使用通配符技巧
- 不要过度使用通配符。如果其他操作能达到同等目的,则应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起来是最慢的。
- 仔细注意通配符的位置。如果放错地方,可能不会返回想要的数据
五、用正则表达式搜索
1. 检索列prod_name包含文本1000的所有行:
mysql> select prod_name from products where prod_name regexp '1000' order by prod_name; +--------------+ | prod_name | +--------------+ | JetPack 1000 | +--------------+ 1 row in set
2. 小数点(.)在正则表达式中代表匹配任意一个字符
mysql> select prod_name from products where prod_name regexp '.000' order by prod_name; +--------------+ | prod_name | +--------------+ | JetPack 1000 | | JetPack 2000 | +--------------+ 2 rows in set
3. LIKE代表匹配整个字符串,REGEXP代表匹配子串
4. OR匹配(|), 代表搜索1000或2000子串
mysql> select prod_name from products where prod_name regexp '1000|2000' order by prod_name; +--------------+ | prod_name | +--------------+ | JetPack 1000 | | JetPack 2000 | +--------------+ 2 rows in set
5. 正如所见, []是另一种形式的OR语句。 事实上,正则表达式[123]Ton为[1|2|3]Ton的缩写
mysql> select prod_name from products where prod_name regexp '[1-5] ton' order by prod_name; +--------------+ | prod_name | +--------------+ | .5 ton anvil | | 1 ton anvil | | 2 ton anvil | +--------------+ 3 rows in set
6. [^1]却匹配除这些字符外的任何东西
mysql> select prod_name from products where prod_name regexp '[^1] ton' order by prod_name; +--------------+ | prod_name | +--------------+ | .5 ton anvil | | 2 ton anvil | +--------------+ 2 rows in set
7. 匹配特殊字符,如 \\(代表匹配 (

8. 匹配字符类


1) ?代表匹配之前的0或1个字符,下面代表匹配s或不匹配s
mysql> select * from products where prod_name regexp '\\([0-9] sticks?\\)'; +---------+---------+----------------+------------+-----------------------------+ | prod_id | vend_id | prod_name | prod_price | prod_desc | +---------+---------+----------------+------------+-----------------------------+ | TNT1 | 1003 | TNT (1 stick) | 2.5 | TNT, red, single stick | | TNT2 | 1003 | TNT (5 sticks) | 10 | TNT, red, pack of 10 sticks | +---------+---------+----------------+------------+-----------------------------+ 2 rows in set
2) 匹配包含连续4个数字的子串
mysql> select * from products where prod_name regexp '[[:digit:]]{4}'; +---------+---------+--------------+------------+---------------------------------------+ | prod_id | vend_id | prod_name | prod_price | prod_desc | +---------+---------+--------------+------------+---------------------------------------+ | JP1000 | 1005 | JetPack 1000 | 35 | JetPack 1000, intended for single use | | JP2000 | 1005 | JetPack 2000 | 55 | JetPack 2000, multi-use | +---------+---------+--------------+------------+---------------------------------------+ 2 rows in set
9. 定位字符

1) 匹配开始是数字或者 . 的串
mysql> select * from products where prod_name regexp '^[0-9\\.]'; +---------+---------+--------------+------------+----------------------------------------------------------------+ | prod_id | vend_id | prod_name | prod_price | prod_desc | +---------+---------+--------------+------------+----------------------------------------------------------------+ | ANV01 | 1001 | .5 ton anvil | 5.99 | .5 ton anvil, black, complete with handy hook | | ANV02 | 1001 | 1 ton anvil | 9.99 | 1 ton anvil, black, complete with handy hook and carrying case | | ANV03 | 1001 | 2 ton anvil | 14.99 | 2 ton anvil, black, complete with handy hook and carrying case | +---------+---------+--------------+------------+----------------------------------------------------------------+ 3 rows in set
2)^有两种用法。在集合中(用[和]定义),用它来否定该集合,否则,用来指串的开始处。
浙公网安备 33010602011771号