【笔记】MySQL必知必会
学习笔记

【笔记】MySQL必知必会

· 约 3,895 字 · 阅读约 20 分钟
目录

😀 最近重读了一遍《MySQL必知必会》,然后对重要的部分摘抄了一些笔记,希望能够作重温下经典的基础上,巩固下自己对于MySQL的理解。篇幅可能有点长,可以通过目录快速查看。

第一章 了解数据库

1.1 数据库基础

1.1.1 数据库

数据库(database) :保存有组织的数据的容器(通常是一个文件或一组文件)

DBMS(Database Manager System,数据库管理系统),确切地说,数据库软件应称为DBMS

数据库 是通过DBMS创建和操纵的容器。数据库可以是保存在硬设备 上的文件,但也可以不是。在很大程度上说,数据库究竟是 文件还是别的什么东西并不重要,因为你并不直接访问数据 库;你使用的是DBMS,它替你访问数据库。

1.1.2 表

表(table) :某种特定类型数据的结构化清单

关于表名的唯一性

表名: 表名的唯一性取决于多个因素,如数据库名和表名等的 结合。这表示,虽然在相同数据库中不能两次使用相同的表名, 但在不同的数据库中却可以使用相同的表名。

=> 同一个数据库中的表不可重复,不同数据库中的表可以重名

模式(schema) :关于数据库和表的布局及特性的信息。

表具有一些特性,这些特性定义了数据在表中如何存储,如可以存 储什么样的数据,数据如何分解,各部分信息如何命名,等等。描述表的这组信息就是所谓的模式,模式可以用来描述数据库中特定的表以及 整个数据库(和其中表的关系)。

1.1.3 列和数据类型

列(column): 表中的一个字段。所有表都是由一个或多个列组 成的。

数据类型(datatype) :所容许的数据的类型。每个表列都有相 应的数据类型,它限制(或容许)该列中存储的数据。

不同的数据库类型有着不同的数据类型,大体含有 int、float、double、date、text等

1.1.4 行

行(row): 表中的一个记录。

表中的数据是按行存储的,所保存的每个记录存储在自己的行内。

1.1.5 主键

注:也叫主码

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

主键用来表示 一个特定的行。没有主键,更新或删除表中特定行很困难,因为没有安 全的方法保证只涉及相关的行。

表中的任何列都可以作为主键,只要它满足以下条件:

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

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

主键的最好习惯

除MySQL强制实施的规则外,应该坚持的 几个普遍认可的最好习惯为:

  • 不更新主键列中的值;

  • 不重用主键列的值;

  • 不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)

1.2 什么是SQL

SQL(发音为字母S-Q-L或sequel)是结构化查询语言(Structured Query Language)的缩写。SQL是一种专门用来与数据库通信的语言。

SQL有如下的优点。

  • SQL不是某个特定数据库供应商专有的语言。几乎所有重要的 DBMS都支持SQL,所以,学习此语言使你几乎能与所有数据库 打交道。

  • SQL简单易学。它的语句全都是由描述性很强的英语单词组成, 而且这些单词的数目不多。

  • SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活 使用其语言元素,可以进行非常复杂和高级的数据库操作。

第二章 MySQL简介

MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机-服务器的数据库。客户机-服务器应用分为两个不同的部分。

  • 服务器部分(Server)是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。

  • 客户机部分(Client)是与用户打交道的软件。

服务器软件为MySQL DBMS。你可以在本地安装的副本上运行, 也可以连接到运行在你具有访问权的远程服务器上的一个副本。

客户机可以是MySQL提供的工具、脚本语言(如Perl)、Web应用 开发语言(如ASP、ColdFusion、JSP和PHP)、程序设计语言(如 C、C++、Java)等。

第三章 使用MySQL

3.1 连接

  • 主机名

  • 端口

  • 用户名

  • 用户口令

连接数据库通用格式:mysql -P <端口号> -h <mysql主机名或ip地址> -u <用户名> -p <口令>

  1. 本地连接 如果是命令行是mysql所在的本机,而且用默认的端口 3306 时,可以简化语句为:
 mysql -u root -p
  1. 远程连接 注意: 使用远程连接时,使用的连接用户和该用户现在的ip地址应该是远程数据库中允许的用户和允许的ip,否则是不允许连接的.
 mysql -P 3306 -h 192.168.1.104 -u root -p

3.2 选择数据库

 use <database-name>;

使用USE关键字

3.3 了解数据库和表

  1. 查看所有数据库
 show databases;
  1. 创建数据库
 create database db_eachen;
  1. 使用数据库
 use db_eachen;
  1. 显示数据库中所有表
 show tables;
  1. 查看表结构
 show columns from customers;

或者使用快捷方式:

 DESCRIBE customers;

DESCRIBE语句 MySQL支持用DESCRIBE作为SHOW COLUMNS FROM的一种快捷方式。换句话说,DESCRIBE customers;是 SHOW COLUMNS FROM customers;的一种快捷方式。

其他关于SHOW的语句

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

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

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

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

第四章 检索数据

需要注意的tips:

SQL 是不区分大小写的【不过,一定要认识到虽然SQL是不区分大小写的,但有些标识 符(如数据库名、表名、列名)可能不同:在MySQL 4.1及之 前的版本中,这些标识符默认是区分大小写的;在MySQL 4.1.1 版本中,这些标识符默认是不区分大小写的。】建议还是区分大小写,对于SQL关键字大写,对于所有列和表明使用小写,这样做使代码更易于阅读和调试。使用空格 在处理SQL语句时,其中所有空格都被忽略。SQL 语句可以在一行上给出,也可以分成许多行。多数SQL开发人 员认为将SQL语句分成多行更容易阅读和调试。

注意1:

如果没有 明确排序查询结果(下一章介绍),则返回的数据的顺序没有 特殊意义。返回数据的顺序可能是数据被添加到表中的顺序, 也可能不是。只要返回相同数目的行,就是正常的。

使用方法:

 # 检索一个字段
 SELECT <field> FROM <table>;
 # 检索多个字段
 SELECT <field1>, <field1> FROM <table>;
 # 检索所有字段
 SELECT * FROM <table>;
 # 检索去重 (见注意2)
 SELECT distinct <field> FROM <table>;
 # 限制结果 (见注意3)
 SELECT * FROM <table> LIMIT 5;

注意2:

不能部分使用DISTINCT DISTINCT关键字应用于所有列而 不仅是前置它的列。如果给出SELECT DISTINCT vend_id, prod_price,除非指定的两个列都不同,否则所有行都将被 检索出来。

注意3:

LIMIT 关键字使用方式

第五章 排序检索数据

ORDER BY

默认升序 ASC(可不写),降序使用 DESC 关键字

 # 可以指定多个字段进行排序
 # 如果想在多个列上进行降序排序,必须 对每个列指定DESC关键字。
 SELECT * FROM <table> ORDER BY <field>;
 SELECT * FROM <table> ORDER BY <field1>, <field2>;
 SELECT * FROM <table> ORDER BY <field1> DESC, <field2>;

注意1:

区分大小写和排序顺序 在对文本性的数据进行排序时,A与 a相同吗?a位于B之前还是位于Z之后?这些问题不是理论问 题,其答案取决于数据库如何设置。

 # 找出最贵的物品的价格
 select prod_price from products order by prod_price DESC LIMIT 1;

第六章 过滤数据

WHERE

WHERE子句操作符

相关文章