【笔记】MySQL必知必会
目录 ▼
😀 最近重读了一遍《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 <口令>
- 本地连接 如果是命令行是mysql所在的本机,而且用默认的端口 3306 时,可以简化语句为:
mysql -u root -p
- 远程连接 注意: 使用远程连接时,使用的连接用户和该用户现在的ip地址应该是远程数据库中允许的用户和允许的ip,否则是不允许连接的.
mysql -P 3306 -h 192.168.1.104 -u root -p
3.2 选择数据库
use <database-name>;
使用USE关键字
3.3 了解数据库和表
- 查看所有数据库
show databases;
- 创建数据库
create database db_eachen;
- 使用数据库
use db_eachen;
- 显示数据库中所有表
show tables;
- 查看表结构
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子句操作符