mysql必知必会学习笔记

本文介绍了MySQL数据库的基础知识,包括表、列、行和主键的概念,强调了主键在数据唯一标识中的重要性。此外,讲解了SQL语言的基础,如SELECT、WHERE、ORDER BY等,以及如何使用正则表达式进行搜索。还概述了MySQL客户机-服务器软件的结构,提及了不同版本的MySQL特性。最后,文章提到了使用存储过程、触发器、游标等高级特性,并讨论了事务处理和访问控制的重要性。
摘要由CSDN通过智能技术生成

数据库基础

数据库(database)是一个以某种有组织的方式存储的数据集合。

  • 数据库软件称为DBMS(数据库管理系统)。数据库是通过DBMS创建和操纵的容器。

表(table)

某种特定类型数据的结构化清单。数据库中的每个表都有一个名字,用来标识自己。此名字是唯一的。
表具有一些特性,这些特性定义了数据在表中如何存储。描述表的这组信息成为模式(schema),可用来描述数据库中特定的表以及整个数据库和其中表的关系。

列(column)

表中的一个字段,所有表都是由一个或多个列组成的。每个列都有相应的数据类型(datatype),它限制该列中存储的数据。

行(row)

表中的数据是按行存储的。
有时也被叫做数据库记录(record)。

主键(primary key)

表中每一行都应该有可以唯一标识自己的一列(或一组列),其值能够唯一区分表中的每个行。
没有主键,更新或删除表中特定行很困难。
表中的任何列都可作为主键,只要满足以下条件:

  • 任意两行都具有不相同的主键值。
  • 每个行都必须具有一个主键值,主键值不允许为NULL。
    多列作为主键时,所有列值组合必须是唯一的,但单个列的值可以不唯一。

主键的好习惯

  • 不更新主键列中的值;
  • 不重用主键列的值;
  • 不在主键列中使用可能会更改的值;

什么是SQL

SQL 是结构化查询语言(Structured Query Language),是专门与数据库通信的语言。

MySQL简介

客户机-服务器软件

DBMS分为两类:

  • 基于共享文件系统的DBMS,(Microsoft Access和FileMaker),用于砖面用途 ,通常不用于更高端或更关键应用。
  • 基于客户机-服务器的DBMS,MySQL、Oracle等。客户机-服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件,这个软件运行在称为数据库服务器的计算机上。增删改查所有请求都是由服务器软件完成,请求来自于客户机软件

MySQL版本(后续需补充)

当前位版本5

  • 4:InnoDB引擎,增加事务处理、并、改进行全文搜索等支持
  • 4.1:对函数库、子查询、集成帮助等的重要增加。
  • 5:存储过程、触发器、游标、视图等

使用MySQL

选择数据库

连接MySQL后,需要选择一个数据库来使用。
use crashcourse;

  1. 查看数据库和表

show DATABASES; – 查看数据库
show TABLES; – 查看表
show COLUMNS from TABLES;
describe TABLES;– 查看列

  • 自动增量: 在每个行添加到表中时,MySQL可以自动为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值。
    所支持的其他show语句:

show STATUS; – 用于显示广泛的服务器状态信息。
show create DATABASE;
show create TABLE; – 用来显示创建特定的数据库或表。
show GRANTS; – 显示授予用户的安全权限。
show errors;
show warnings; – 显示服务器错误或警告信息。
2. select语句
select column_name from TABLES; – 检索单个列,得到数据没有过滤,没有排序。
select column_id,column_name from TABLES; – 检索多个列。
select * from TABLES; – 检索所有列。

  • distinct关键字
    select distinct column_name from TABLE; --distinct只返回不同的column_name行,distinct关键字用于所有列。
  • limit关键字
    select column_name from TABLE limit 5; – 检索单个列,返回结果不多于5行。
    select column_name from TABLE limit 5,5; – limit 5,5 指返回从行5开始的5行。第一个数为开始位置,第二个数为药检索的行数。
    limit 4 offset 3 等于 limit 3,4
    select TABLE.column_name from TABLE; – 使用完全限定的列名。
    select TABLE.column_name from DATABASE.TABLE; – 使用完全限定的表名。
  1. 排序数据 order by关键字

select column_name from TABLE order by column_name; --返回对column_name列以字母顺序排序的列结果。
select column_id,column_name,column_price from TABLE order by column_name,column_price; – 按多个列排序。但具有多个相同column_name时才会对column_price排序,若column_name的值都是唯一的,则不会按column_price排序。

  1. 指定排序方向 desc asc

select column_id,column_price from TABLE order by column_price desc; – 按照column_price降序排序。
select column_id,column_price,column_name from TABLE order by column_price desc,column_name; --多个列排序时desc跟在需要降序的列后,先对column_price进行降序排序后在对column_name排序。

  • 在多个列上进行降序排序时,每个列都指定desc。
  • asc(ascending)与desc相反,升序排序可使用。但升序是默认的。
  1. 过滤数据 where

where 在 from 之后 ,搜索条件也叫过滤条件。
select column_id,column_name from TABLE where column_price=3.50;

  • SQL过滤与应用过滤:数据也可在应用层过滤,SQL的select语句为客户机应用检索出超过实际所需的数据行,然后客户机代码对返回数据进行循环,来得到所需行。这样会影响效率。
  1. where子句操作符
操作符 说明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between 在指定的两个值之间

select column_name,column_price from TABLE where column_name = ‘fuses’; – MySQL在执行匹配时默认不区分大小写。

  • 何时用引号 : 单引号用来限制字符串。
    select column_name,column_price from TABLE where column_price between 5 and 10; – 检索价格在5到10之间的行。
    select column_name,column_price from TABLE where column_price is NULL; – 检索值为NULL的行。
  1. 组合where子句 逻辑操作符

select column_id,column_price from TABLE where column_id = 1001 and column_price <= 10; – 返回满足两个条件的行。

  • 上述只有两个过滤条件,还可添加多个过滤条件,每添加一个条件就要使用一个and。
    select column_name,column_price from TABLE where column_name = ‘fuses’ or column_price <= 10; – 返回匹配任一条件的行。
  • 当or和and同时出现在一个子句中时,优先处理and操作符,应使用()分组操作符。
    select column_name,column_price from TABLE where column_id in (1002,1003) order by column_name; – 检索column_id为1002和1003的行,功能与or是一样的。column_id = i002 or column_id = 1003;
  • 为什么要使用in操作符呢?
  • in操作符语法更清楚和直观。
  • 使用in,计算次序容易管理。
  • in操作符一般比or操作符执行更快。
  • in可以包含其他的select语句。
    select column_name,column_price from TABLE where column_id not in (1002,1003) order by column_name; – not否定跟在它之后的条件,返回column_id不是1002或1003的行。
  • 支持使用not对in、between、exists子句取反。
  1. 用通配符过滤
  • 通配符:用来匹配值的一部分的特殊字符。
  • 搜索模式: 由字面值、通配符或两者组合构成的搜索条件。

1). like、%通配符

select column_id,column_price from TABLE where column_name like ‘jet%’; – 检索任意以jet起头的词,%表示接受jet后的任意字符,不管有多少个。这是区分大小写的。
select column_id,column_price from TABLE where column_name like ‘%anvil%’; – 匹配任何位置包含anvil的值,不管之前或之后出现什么字符。

  • %能够匹配一个或多个字符,还可匹配0个字符。
  • %不能匹配NULL。

2)._通配符
select column_id,column_price from TABLE where column_name like ‘_ton’; – _匹配一个字符,返回column_name为Xton的行。

  • 使用通配符技巧
  • 不要过度使用通配符,通配符搜索的处理一般要比其他搜索花的时间长。
  • 在确实需要时使用通配符,且最好不要放在搜索模式的开头,这样是最慢的。

用正则表达式搜索

  • MySQL仅支持多数正则表达式实现的一个很小的子集。(这句我不理解)
    select column_name from TABLE where column_name regexp ‘1000’ order by column_name; – regexp后所跟的东西作为正则表达式处理。
    select column_name from TABLE where column_name ragexp ‘.000’ order by column_name; – .在正则表达式中表示匹配任意一个字符。
  • 匹配不区分大小写。要区分使用binary,例where column_name regexp binary ‘Rose .000’。
    select column_name from TABLE where column_name regexp ‘1000|2000’ order by column_name; – |为正则表达式的or操作符,表示匹配其中之一。可有多个or。
    select c
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值