MYSql

394 阅读6分钟

查看最大连接数

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;1583304832438

结果返回有两行小于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';1583310310748

结果只显示匹配搜索模式的行:第一行中下划线匹配1,第二行中匹配2。 .ton anvil 产品没有匹配,因为搜索模式要求匹配两个通配符而不是一个。

==通配符使用技巧==

通配符的搜多处理一般要比前面讨论的其他搜索所花时间更长。

  • 不要过度使用通配符,如果其他操作符也能达到相同的目的,应该使用其他操作符。
  • 在确实需要使用通配符时,除非绝对有必要,否则不要把它们用在搜索模式的开始处,搜索速度较慢。

正则表达式进行搜索

正则表达式是用来匹配文本的特殊的串(字符集合);

  1. SELECT name FROM products WHERE name ==REGEXP== '1000' ORDER BY name;(检索name中包含1000中的所有行,可以被LIKE替代,实际没带来多少好处,有可能会降低性能);
  2. SELECT name FROM products REGEXP '.000' ORDER BY name;(这里使用了正则表达式 .000。表示匹配任意一个字符,因此1000 和 2000 都匹配且返回)
  3. 匹配不区分大小写 为区分大小写,可使用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;

1583393954918

正如所见,[] 是另外一种形式的OR语句,也可以使用==[1|2|3]Ton==的缩写。

2、select name from products where name regexp '1|2|3 Ton' order by name;

1583395429866

这并不是期望的输出。是由于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)