查看最大连接数
mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 1000 |
+-----------------+-------+
1 row in set
DBMS(数据库管理系统)
mysql语句
show databases; //返回可用数据库的一个列表
use database_name; //使用某一个数据库
show tables; //获取数据库内可用表的列表
show columns from tb_user; //获取表中的字段属性(名称、类型、是否允许null、键信息、默认 //值、以及其他信息)
show status; //显示广泛的服务器状态信息 后面可以跟 like '% %',用于选择特定的 状态信息显示
show create table tb_user;//显示建表语句
show create database database_name; //显示建库语句
show grants; //显示授权用户(所有用户或特定用户)的安全权限;
数据检索
==通配符(*)== 虽然通配符可以使自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。
检索不同的行 distinct :
只返回唯一(不同)的行,且distinct必须放在列名前面
不能部分使用distinct,distinct关键字应用于所有列而不仅仅是前置它的列,如果给出 select distinct username, password from tb_user;意思是这两列加起来不会出现重复的。
限制结果 limit
为了返回第一行,或者前几行,可以使用limit子句;
select username from tb_user limit 5; /select username from tb_user limit 0,5; 表示返回不多余5行。
0表示开始位置,5表示要检索的行数
完全限定名
可以使用完全限定的名字来引用列(同时使用表名和列字) ==tb_user.username==
同样表名也可以是完全限定的。
排序检索数据
排序顺序 order by
通常,order by 子句中使用的列将是为显示所选择的列。但是,实际上并不一定要这样,==用非检索的列排序数据是完全合法的==。
对两个列的结果进行排序---首先按照价格,然后再按照名称排序 select id,price,name from tb_product order by price,name;----排序完全按照所规定的顺序进行。
==desc 降序==关键字 order by price desc,name;---->按照价格降序,名字升序进行排列,==desc关键字只应用到直接位于其前面的列名。==如果想对多个列进行降序排列,必须对每个列制定desc关键字
使用orderby 和limit 的组合,能够找出一个列中最高或者最低的值。
==ORDER BY 子句位置 :== 应该保证它位于FROM子句之后,如果使用了limit,它必须位于ORDER BY 之后。 这个子句必须放在select 语句中的最后一条子句。
过滤数据
只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)
==Mysql在执行匹配时默认不区分大小写==
使用between时,必须指定两个值,匹配范围中所有的值,包括指定的开始值和结束值
==OR== where子句中使用的关键字,用来表示检索匹配任一给定条件的行;
SELECT prod_name,price FROM products WHERE vend_id =1002 OR vend_id =1003 AND price>=10;
结果返回有两行小于10美元的。==SQL在处理OR操作符之前,优先处理AND操作符。== 所以上述语句被理解成1003制造的大于10美元的产品,或者1002 制造的任何产品,无论其价格。
正确方式是使用圆括号明确的分组相应的操作符。
==IN 操作符==
IN操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in操作符与OR相同的功能。
==NOT 操作符==
Where子句中的Not操作符有且只有一个功能,那就是否定它之后所跟的任何条件
select * from products where id not in (1002,1003) order by name;
Mysql 支持使用not 对IN,BETWEEN 和EXISTS子句取反。
用通配符(wildcard)进行过滤
==LIKE操作符==
==下划线(_)通配符==
下划线的用途与%一样,但下划线只匹配单个字符,而不是多个字符。
select id ,name from products where name like '_ ton anvil';
结果只显示匹配搜索模式的行:第一行中下划线匹配1,第二行中匹配2。 .ton anvil 产品没有匹配,因为搜索模式要求匹配两个通配符而不是一个。
==通配符使用技巧==
通配符的搜多处理一般要比前面讨论的其他搜索所花时间更长。
- 不要过度使用通配符,如果其他操作符也能达到相同的目的,应该使用其他操作符。
- 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处,搜索速度较慢。
正则表达式进行搜索
正则表达式是用来匹配文本的特殊的串(字符集合);
- SELECT name FROM products WHERE name ==REGEXP== '1000' ORDER BY name;(检索name中包含1000中的所有行,可以被LIKE替代,实际没带来多少好处,有可能会降低性能);
- SELECT name FROM products REGEXP '.000' ORDER BY name;(这里使用了正则表达式 .000。表示匹配任意一个字符,因此1000 和 2000 都匹配且返回)
- 匹配不区分大小写 为区分大小写,可使用BINARY关键字
进行OR匹配
为搜索两个串之一(或者为这个串、或者为另外一个串),使用 ==|==
select name from products where name regexp '1000|2000' order by name;
| name |
|---|
| jetpack 1000 |
| jetpack 2000 |
匹配几个字符串
可以通多指定的一组==[] 字符==来完成
1、SELECT name products where name regexp '[123] Ton' order by name;
正如所见,[] 是另外一种形式的OR语句,也可以使用==[1|2|3]Ton==的缩写。
2、select name from products where name regexp '1|2|3 Ton' order by name;
这并不是期望的输出。是由于Mysql 假定意思是‘1’或‘2’或‘3 ton’,除非把字符|括在一个集合中,否则它将应用于整个串。
==不匹配==
字符集也可以被否定,它们将匹配除了指定字符串外的任何东西。例如 [ ^123 ],表示不匹配1、2、3,匹配其他。
匹配范围
[0123456789] 可以转换为 [0-9], [a-z]表示匹配任意字母字符。
匹配特殊字符
为了匹配特殊字符,必须用\ \ 为前导,\ \ -表示查找-,\ \ . 表示查找 .
匹配多个实例
| 元字符 | 说明 |
|---|---|
| * | 0个或多个匹配 |
| + | 1个或多个匹配(等于{1,}) |
| ? | 0个或1个匹配(等于{0,1}) |
| {n} | 指定数目的匹配 |
| {n, } | 不少于指定书目的匹配 |
| {n,m} | 匹配书目的范围(m不超过255) |