day1-MySQL必知必会学习1

一、了解MySQL

1) 数据库软件,应称为DBMS(数据库管理系统)

2) 行:表中的数据是按照行存储的,是表中的一个记录

3) 主键:一列(或一组列),其值能够区分表中的每一行

  • 任意两行都不具有相同的主键
  • 每一行都必须有一个主键(主键列不能有NULL值)

  使用主键的习惯

   不更新主键列中的值;

  不重用主键列的值;

  不在主键列中使用可能会更改的值

4)SQL(发音为字母S-Q-Lsequel)是结构化查询语言(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)^有两种用法。在集合中(用[]定义),用它来否定该集合,否则,用来指串的开始处。 

 

 

 

 

 

 

 

 

posted @ 2018-05-21 22:33  心随·风动  阅读(74)  评论(0)    收藏  举报