第一章-第四章
第一章了解SQL
1.了解数据库
1.1数据库基础
1.1.1什么是数据库
数据库是一个以某种有组织的方式存储的数据集合,保存有组织的数据的容器(通常是一个文件或一组文件)。
1.1.2 表
表(table) 某种特定类型数据的结构化清单。
表名的唯一性取决于多个因素,如数据库名和表名等的结合。这表示,虽然在相同数据库中不能两次使用相同的表名,但在不同的数据库中却可以使用相同的表名。
1.1.5 主键
表中每一行都应该有可以唯一标识自己的一列(或一组列)。一个顾客表可以使用顾客编号列,而订单表可以使用订单ID,雇员表可以使用雇员ID或雇员社会保险号。
主键(primary key) 一列(或一组列),其值能够唯一区分表中每个行。
唯一标识表中每行的这个列(或这组别)称为主键。主键用来表示一个特定的行。没有主键,更新或者删除表中的特定行很困难,因为没有安全的方法保证只涉及相关的行。
主键的最好习惯:
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值。(例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)
1.2什么是SQL?
SQL是结构化查询语言(Structured Query Language))的缩写。
SQL是一种专门用来与数据库通信的语言。
设计SQL的目的是很好地完成一项任务,即提供一种从数据库中读写数据的简单有效的方法。
第二章MySQL简介
2.1什么是MySQL?
数据库的所有存储、检索、管理和处理实际上是由数据库软件-DBMS(数据库管理系统)完成的。MySQL是一种DBMS,即它是一种数据库软件。
2.1.1客户机—服务器软件
DBMS可分为两类:一类为基于共享文件系统的DBMS,另一类为基于客户机—服务器的DBMS。前者(包括诸如Microsoft Access和FileMaker)用于桌面用途,通常不用于高端或更关键的应用。
MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库。客户机—服务器应用分为两个不同的部分。服务器部分是负责所有数据访问和处理的一个软件。这个软件运行在称为数据库服务器的计算机上。
2.2MySQL工具
在操作系统命令提示符下输入mysql将出现一个如下的简单提示:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.20 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
请注意:
命令输入在mysql>之后;
命令用;或\g结束,换句话说,仅按Enter不执行命令;
输入help或\h获得帮助,也可以输入更多的文本获得特定命令的帮助(如,输入help select获
得使用SELECT语句的帮助);
输入quit或exit退出命令行实用程序。
2.2.2MySQL Administrator
MySQL Administrator(MySQL管理器)是一个图形交互客户机,用来简化MySQL服务器的管理。
MySQL Administrator提示输入服务器和登录信息(并且允许你保存服务器定义供以后选择),然后显示允许选择不同视图的图标。其中:
Server Information(服务器信息)显示客户机和被连接的服务器的状态和版本信息;
Service Control(服务控制)允许停止和启动MySQL以及指定服务器特性;
User Administration(用户管理)用来定义MySQL用户、登录和权限;
Catalogs(目录)列出可用的数据库并允许创建数据库和表。
第三章 使用MySQL
连接
在最初安装MySQL时,需要输入一个管理登录(通常为root)和一个口令。如果使用自己的本地服务器,只是为了简单实验一个MySQL,使用上述登录就可以。
但现实中,管理登录受到密切保护(因为对它的访问授予了创建表、删除整个数据库、更改登录和口令等完全的权限)。
需要的信息如下:
主机名(计算机名)——如果连接到本地MySQL服务器,为localhost;
端口(如果使用默认端口3306之外的端口);
一个合法的用户名;
用户口令(如果需要)。
3.2选择数据库
选择数据库,使用USE关键字。
输入
use mysql
输出
Database changed
记住,必须先使用USE打开数据库,才能读取其中的数据。
3.3了解数据库和表
数据库、表、列、用户、权限等的信息被存储在数据库和表中(MySQL使用MySQL来存储这些信息)。不过,内部的表一般不直接访问。可用MySQL的SHOW命令来显示这些信息(MySQL从内部表中提取这些信息)。
请看下面的例子
输入
show tables;
输出
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
为了获得一个数据库内的表的列表,使用SHOW TABLES;,如下所示:
输入
show tables;
输出
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| component |
| db |
| default_roles |
| engine_cost |
| func |
| general_log |
| global_grants |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| password_history |
| plugin |
| procs_priv |
| proxies_priv |
| role_edges |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
分析:SHOW TABLES;返回当前选择的数据库内可用表的列表。
SHOW也可以用来显示表列:
输入
show columns from mytable;
输出
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | char(10) | NO | PRI | NULL | |
| name | varchar(20) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| age | char(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
其他show语句:
SHOW STATUS,用于显示广泛的服务器状态信息;
SHOW CREATE DATABASE和SHOW CREATE TABLE,分别用来显示创建特定数据库或表的MySQL语句;
SHOW GRANTS,用来显示授予用户(所有用户或特定用户)的安全权限;
SHOW ERRORS和SHOW WARNINGS,用来显示服务器错误或警告消息。
第四章 检索数据
检索单个列
SELECT prod_name
FROM products;
检索多个列
SELECT prod_id,prod_name,prod_price
FROM products;
检索所有列
SELECT*
FROM products;
检索不同的行
SELECT vend_id
FROM products;
SELECT语句返回14行(即使表中只有4个供应商),因为products表中列出了14个产品。
如何检索出不同值得列表?
解决办法是使用DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值。
SELECT DISTINCT vend_id
FROM products;
分析:SELECT DISTINCT vend_id 告诉MySQL返回不同(唯一)的vend_id行,因此只返回4行,如上面输出结果。如果使用DISTINCT关键字,它必须放在列名前面。
限制结果
SELECT语句返回所有匹配的行,它们可能是指定表中的每个行。为了返回第一行或前几行,可使用LIMIT子句。
SELECT prod_name
FROM products
LIMIT 5;
SELECT prod_name
FROM products
LIMIT 5,5;
分析:LIMIT 5,5指示MySQL返回从行5开始的5行。第一个数为开始的位置,第二个数为要检索的行数。
所以,带一个值的LIMIT总是从第一行开始,给出的数为返回的行数。带两个值的LIMIT可以指定从行号为第一个值的位置开始。
本章小结:
本章学习了如何使用SQL的SELECT语句来检索单个表列、多个表列以及所有表列。下一章将讲授如何排序检索出来的数据。