MySQL学习

这篇博客详细介绍了MySQL的基础知识,包括SQL语言的概念、MySQL数据库的特点,以及如何使用MySQL进行数据检索、排序、过滤、计算字段和分组。还涵盖了创建与操纵表的基本命令,如主键设置、自动增量、指定默认值等。

1、了解SQL&MySQL

SQL

1、MySql面向所有主要的数据管理系统(DBMS),数据库是通过DBMS创建和操纵的容器

2、数据库存储层级:字段-->数据表--->数据库

3、表名唯一性,在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。

4、SQL是结构化查询语言(Structured QueryLanguage)的缩写。SQL是一种专门用来与数据库通信的语言。

5、主键(primary key)一一列(或一组列),其值能够唯一区分表中每个行。

        主键条件:

        任意两行都不具有相同的主键值;

        每个行都必须具有一个主键值(主键列不允许NULL值)。

        在使用多列作为主键时,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。

MySQL

1、数据的所有存储、检索、管理和处理实际上是由数据库软件——DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件。

命令输入在mysql>之后;

命令用;或\g结束,换句话说,仅按Enter不执行命令;

输入help或\h获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入help select获得使用SELECT语句的帮助);

输入quit或exit退出命令行实用程序。

2、基本命令

use 数据库名;

database changed;

show databases;

show tables;

 show columns from 表名=describe 表名;

SHOW STATUS,用于显示广泛的服务器状态信息;

SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;

SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;

SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。

检索数据

(1)检索单个列:select 列名 from 表名;

(2)检索多个列:select 列名1,列名2,列名3,列名4,列名5 from 表名;

(3)检索所有列:select * from 表名;

(4)检索不同的行(distinct ):select distinct 列名 from 表名;

        DISTINCT关键字应用于所有列而不仅是前置它的列。

(5)限制行数(limit ):select 列名1,列名2,列名3,列名4,列名5 from 表名 limit 行数;

        可指定要检索的开始行和行数:select 列名1,列名2 from 表名 limit 5:5;

        第一个数为开始位置,第二个数为要检索的行数;

        检索出来的第一行为行0而不是行1。因此,LIMIT 1, 1将检索出第二行而不是第一行。

       MySQL 5支持LIMIT的另一种替代语法, LIMIT 4 OFFSET  3 意为从行3开始取4行,

3、order 排序子句

        (1)select 列名1,列名2,列名3,列名4,列名5 from 表名

                order by 列名1,列名2;----默认以asc升序

        (2)select 列名1,列名2,列名3,列名4,列名5 from 表名

                order by 列名1,列名2 desc;----以列名2降序

        (3)select 列名1,列名2,列名3,列名4,列名5 from 表名

                order by 列名1desc,列名2;----以列名1降序

        (4)select 列名1,列名2,列名3,列名4,列名5 from 表名

                order by 列名1desc,列名2 desc;----以列名1,列名2降序,降序方向从左到右

4、where过滤子句

        在同时使用ORDER BY和WHERE子句时,应该让ORDER BY位于WHERE之后;

为什么要使用IN操作符?其优点具体如下:

在使用长的合法选项清单时,IN操作符的语法更清楚且更直观。

在使用IN时,计算的次序更容易管理(因为使用的操作符更少)。

IN操作符一般比OR操作符清单执行更快。

IN的最大优点是可以包含其他SELECT语句,使得能够更动态地建立WHERE子句

5、用通配符进行过滤

(1)百分号(%)通配符

找出所有以词jet起头的产品:

搜索模式'%anvil%'表示匹配任何位置包含文本anvil的值,而不论它之前或之后出现什么字符:

找出以s起头以e结尾的所有产品:

 

注意尾空格尾空格可能会干扰通配符匹配;

注意NULL虽然似乎%通配符可以匹配任何东西,但有一个例外,即NULL。即使是WHERE prod_name LIKE '%'也不能匹配用值NULL作为产品名的行。

(2)下划线(_)通配符

         下划线只匹配单个字符而不是多个字符,eg:

 

                                        VS

 5、正则表达式

文本1000的所有行:

.是正则表达式语言中一个特殊的字符。它表示匹配任意一个字符

可使用BINARY关键字区分大小写,eg:

 WHERE prod_name REGEXP BINARY 'JetPack .000'

 使用|为搜索两个串之一,|为正则表达式的OR操作符:

 匹配任何单一字符,可通过指定一组用[和]括起来的字符来完成:

        这里,使用了正则表达式[123] Ton。[123]定义一组字符,它的意思是匹配1或2或3

        

 字符集合也可以被否定,即,它们将匹配除指定字符外的任何东西。为否定一个字符集,在集合的开始处放置一个^即可。eg:[^123]

 范围不限于完整的集合,[1-3]和[6-9]也是合法的范围。

 为了匹配特殊字符,必须用\\为前导。\\-表示查找-,\\.表示查找.

 

 匹配\为了匹配反斜杠(\)字符本身,需要使用\\\

 

 

等同一下语句

 

 

 

 6、计算字段

(1)拼接字段Concat()

 (2)删除数据左/右侧多余的空格

        LTrim()函数:去掉串左边的空格

        RTrim()函数:去掉串右边的空格

 (3)使用别名

        别名(alias)是一个字段或值的替换名。别名用AS关键字赋予,别名有时也称为导出列

    

 

  7、函数

(1)文本处理函数

 

 

 (2)日期和时间处理函数

  (3)数值处理函数

 

 (3)聚集函数

 AVG()函数:

        只用于单个列,为了获得多个列的平均值,必须使用多个AVG()函数

        忽略列值为NULL的行      

COUNT()函数   :

             使用COUNT(*)对表中行的数目进行计数

             使用COUNT(column)对特定列中具有值的行进行计数,忽略NULL值        

          VS 

 MAX()函数 VS MIN()函数:

        在用于文本数据时,如果数据按相应的列排序,则MAX()返回最后一行,而MIN()返回最前面的行。

        MAX()和MIN()函数忽略列值为NULL的行。

 SUM()函数:

        SUM()函数忽略列值为NULL的行。

  • ALL为默认ALL参数不需要指定,因为它是默认行为。如果不指定DISTINCT,则假定为ALL
  • 如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT不能用于COUNT(*),因此不允许使用COUNT(DISTINCT),否则会产生错误。

(4)组合聚集函数

  8、分组数据

 (1)创建分组---GROUP BY子句

如果列中有多行NULL值,它们将分为一组。

GROUP BY子句必须出现在WHERE子句之后,ORDER BY子句之前。

 使用WITH ROLLUP关键字,可以得到每个分组以及每个分组汇总级别(针对每个分组)的值

 (2)过滤分组----HAVING子句

        WHERE VS HAVING:

        WHERE过滤行,而HAVING过滤分组;

        WHERE在数据分组前进行过滤,HAVING在数据分组后进行过滤;

        WHERE排除的行不包括在分组中。这可能会改变计算值,从而影响HAVING子句中基于这些值过滤掉的分组;

        

(3)分组和排序

一般在使用GROUP BY子句时,应该也给出ORDER BY子句。这是保证数据正确排序的唯一方法

 9、联结表

外键(foreign key):某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系。

笛卡儿积(cartesian product):由没有联结条件的表关系返回的结果为笛卡儿积。检索出的行的数目将是第一个表中的行数乘以第二个表中的行数。

INNER JOIN:内连接

LEFT JOIN:左连接

RIGHT JOIN:右连接

组合查询----UNION

  • UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔;
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数,各个列不需要以相同的次序列出;
  • 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型;
  • UNION从查询结果集中自动去除了重复的行,如果想返回所有匹配行,可使用UNION ALL;
  • 在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

 10、创建和操纵表

(1)创建表

主键 PRIMARY KEY

  • 主键值必须唯一,表中的每个行必须具有唯一的主键值。
  • 如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。
  • 主键中只能使用不允许NULL值的列。允许NULL值的列不能作为唯一标识。

 自动增量AUTO_INCREMENT

  • AUTO_INCREMENT指本列每当增加一行时自动增量。每次执行一个INSERT操作时,MySQL自动对该列增量,适用作主键值。

指定默认值DEFAULT

  • 不允许使用函数作为默认值,它只支持常量。
  • 使用默认值而不是NULL值。

引擎类型

  • InnoDB是一个可靠的事务处理引擎;
  • MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
  • 外键不能跨引擎,使用一个引擎的表不能引用具有使用不同引擎的表的外键。

(2)操纵表

建议在进行改动前做一个完整的备份(模式和数据的备份)。数据库表的更改不能撤销。

更新表:ALTER TABLE

删除表:DROP TABLE

重命名表:RENAME TABLE

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值