데이터 베이스 MySQL 튜토리얼 MySQL权威指南读书笔记(一)_MySQL

MySQL权威指南读书笔记(一)_MySQL

Jun 01, 2016 pm 01:59 PM
가이드 독서 노트

MySQL权威指南读书笔记

用Mysql N年了,这是当年写的,某些网站上转载过。。

第一章,MySQL和SQL入门(一,对数据库的理解)

这一章共78页,我看了两周。

很少有技术类书籍一开篇就讨论SELECT语句的,这是此书给我的第一个印象,本章把这个语句讲解得十分详细。我觉得第一章主要是讨论两个问题:1,通过两个样板数据库讲解对数据库理论的理解;2,基本命令的使用。比较高深的东西好像不多。

一,对数据库的理解

为什么要使用数据库呢,我们都看过许多说法,不外于其提供了强大的数据处理能力,如果仅仅是简单的数据列表,电子表格就完全胜任了。在数据的世界里,MySQL被划分为关系数据库管理系统的范畴内,我们可以把这个短语划分为以下几个部分:
数据库:存放信息的的资料库,其构造既简单又遵守一定的规律
数据库内的数据都存放在数据表(table)里
数据表是由数据行(row)和数据列(colume)构成的
一个数据行就是数据表内的一条记录(record)
一个记录一般包含多个信息,数据表中的每一个数据列都对应着一个信息
关系:把存放在某个数据表内的信息和存放在另一个数据表内的信息通过某种方式关联起来,而这种关联就是通过查找两个数据表有无共同的元素来实现的。

先看一个简单的例子:

你的站点上有大量的广告,每当客户浏览你的网页时,一旦点击你的广告,你就需要做记录来计算自己得到了多少广告费。从数据库的角度来说,你应该建立三个数据表。

1,各个广告的来源company表
-------------------------------------------------
Company  Company_num        Address        phone
SONY         13             马家沟        0451-21
CANON        14             新阳路        0451-22

2,各个广告的数据ad表
----------------------------------------
Company_num        Ad_num        Hit_fee
12                  48             001
13                  49             003
14                  50             004

3,每个广告的点击率hit表
------------------------
Ad_num        Date
48             3.12
49             3.14
48             3.12
50             3.14

看看我们能通过这三个数据表查询到什么信息?

1,你为多少家公司做广告?
查一查company表有多少行就知道了
2,你一共有多少个广告?
查一查ad表有多少行就知道了
3,在3.12这一天,你一共显示了多少个广告?
查一查hit表里面Date数据列的值是3.12的数据行共有多少?
4,在3.14这一天,CANON的广告被点击了几次?
首先在company表中找到CANON公司的公司代码(14),根据这个代码在ad数据表中找到CANON公司的广告代码(50实际上可能是很多个),然后分别在hit表中找到3.12日这个代码的点击率。

看到这里我们就能明白,为什么要费力气地把数据“分散”到多个表里面,而不是放到一个大表格中,数据库的非凡能力就表现在这里,把分散在多个数据表中的数据用一种相互匹配的方式迅速地搜集到一起得出结果,这就是数据库式的思维方式。我们必须慢慢习惯,然后自觉运用。是不是很简单?

如何让读者更好地理解这种“关系”的概念,书中给了两个样板数据库,听我慢慢道来:
1,你现在是美国历史研究会的秘书,这个协会是由一些对美国历史感兴趣的人自发地组织起来的,由于各人的爱好,他们将定期地交纳一定的会费来维持其会员资格,交上来的会费主要用于支付研究会的各种开支,如印刷会员刊物等。这个研究会目前建有一个小型的互联网站点,但这个站点还没有得到充分的开发利用,如果你的主要工作是用字处理来打印会员名录的话,数据库就没有必要的,但是许多的工作要求很复杂的操作:如,你希望能够根据不同的情况把会员名录输出为其它格式的资料;根据特定的条件来查询会员;能够根据某种限制得到统计数字,等等,如果把研究会的会员资料放到网站上,那么对会员自己来说,以在线方式修改自己的资料,查询其他人的资料就会容易得多。甚至会员们可以互相发布消息,写电子邮件,等等。
2,你是一名教师,在每学期中,你负责考试和测验,记录各种分数,期末时,你要对学生们的成绩进行总评。并把学生们的总评成绩和出勤情况上报给校方,如果不使用数据库,你就必须每学期都手工完成这些工作。

如果用传统方法,手工来统计考试积分表,你的表格可能就会是这样:

学生
-----------------------------------------------
ID   姓名        分数
            Q    Q     T    Q    Q     T
           9/3  9/6  9/9  9/16  9/23  10/1 …
1   李寻欢 14   10    90    15   26    80  
2   荆无命 17   10    90    12   28    82
3   吕奉先 15   10    92    15   26    80  
4   王怜花 14   10    90    15   26    80  
…    …     

毫无疑问,从关系的角度来说,这样的表格是无法直接放到数据库里面的。我们必须对其进行分解。当然,分数表(score表 )是最先必须建立的。最简单的模型可能是这样:

Name        Date        Score
李寻欢        9.3        14
荆无命        9.3        17
吕奉先        9.3        15
王怜花        9.3        14
李寻欢        9.6        10
荆无命        9.6        10
吕奉先        9.6        10
王怜花        9.6        10
我们很快就能发现这个表的问题:它丢失了一些数据,我们不能知道当天进行的是考试还是测验。看来需要加入一个数据列:
Name        Date        Score        Type
李寻欢        9.3        14        Q
荆无命        9.3        17        Q
吕奉先        9.3        15        Q
王怜花        9.3        14        Q
李寻欢        9.6        10        T
荆无命        9.6        10        T
吕奉先        9.6        10        T
王怜花        9.6        10        T
我们又发现了一个问题,那就是本表的多余数据太多了,同一天里面的Type数据列的值是相同的,这种数据冗余是完全没有必要的。把表拆分一下如何:
score表                                       
Name        Date        Score
李寻欢        9.3        14
荆无命        9.3        17
吕奉先        9.3        15
王怜花        9.3        14
李寻欢        9.6        10

荆无命        9.6        10
吕奉先        9.6        10
王怜花        9.6        10
event表
date        Type
9.3        Q
9/6        Q
9/9        Q
9/16        T
9/23        T
10/1        T
看起来好多了,虽然数据表的数据多了一个,但对数据库来说完全不是问题,我们可以继续考虑我们的成绩表:如果一天内有两场考试怎么办?我们需要在同一天内记录两组分数!既然如此,可以为每一次考试或者测验分配一个独一无二的编号,用这个编号来关联两个表,这样就避开了日期重复的问题了。
score表                                       
Name        Event_id        Score
李寻欢        1        14
荆无命        1        17
吕奉先        1        15
王怜花        1        14
李寻欢        2        10

荆无命        2        10
吕奉先        2        10
王怜花        2        10
event表
Event_id        date        Type
1        9.3        Q
2        9/6        Q
3        9/9        Q
4        9/16        T
5        9/23        T
6        10/1        T
这样就完成了数据表的规划吗?好像还不行,考虑一下,如果有重名的学生如何处理呢?看来,用学号来解决这个问题就行了。
1,student表
Name        Sex        Student_id
李寻欢        F        1
荆无命        F        2
吕奉先        F        3
王怜花        F        4
2,score表
Student_id        Event_id        Score
1        1        14
2        1        17
3        1        15
4        1        14
1        2        10
2        2        10
3        2        10
4        2        10
3,event表
Event_id        Date
9.3        Q
9/6        Q
9/9        Q
9/16        T
9/23        T
10/1        T

终于完成了考试积分表的规划!我们学到了什么呢?数据库应该是什么样子,它应该包含哪些数据表,各个数据表应该有什么内容以及数据应该如何表示?我们看到的许多理论性很强的教材,就在讲述“数据库的分析与设计”,“实体关系图”,“规范化过程”,“第三范式”等等很枯燥的概念。至少在本章中作者没有提到这些东西,而是用一种比较自然,直观的途径让我们了解了一些数据库的基本知识,我觉得这一点很值得推崇。

数据库上
1最常见的操作是对现有数据进行检索;
2比较常见的操作是插入新数据;
3比较不常见的操作是创建数据表;
4最不常见的操作是创建数据库。
我们学习的步骤是从4到1,
①先看看如何建立我们的样板数据库,一个命令就行了
CREATE DATABASE sampdb;
②建立各个数据表
1建立“美国历史研究会”里面的总统表
CREATE TABLE president
(
        last_name        VARCHAR(15) NOT NULL,
        first_name        VARCHAR(15) NOT NULL,
        suffix                VARCHAR(5) NULL,
        city                VARCHAR(20) NOT NULL,
        state                VARCHAR(2) NOT NULL,
        birth                DATE NOT NULL,
        death                DATE NULL
);
2建立“美国历史研究会”里面的会员表
CREATE TABLE member
(
        member_id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (member_id),
        last_name        VARCHAR(20) NOT NULL,
        first_name        VARCHAR(20) NOT NULL,
        suffix                VARCHAR(5) NULL,
        expiration        DATE NULL DEFAULT '0000-00-00',
        email                VARCHAR(100) NULL,
        street                VARCHAR(50) NULL,
        city                VARCHAR(50) NULL,
        state                VARCHAR(2) NULL,
        zip                        VARCHAR(10) NULL,
        phone                VARCHAR(20) NULL,
        interests        VARCHAR(255) NULL
);
3,建立记分系统中的student表
CREATE TABLE student
(
        name                VARCHAR(20) NOT NULL,
        sex                        ENUM('F','M') NOT NULL,
        student_id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (student_id)
);
4,建立记分系统中的score表
CREATE TABLE score
(
        student_id        INT UNSIGNED NOT NULL,
        event_id        INT UNSIGNED NOT NULL,
        PRIMARY KEY (event_id, student_id),
        score                INT NOT NULL
);
5,建立记分系统中的event表
CREATE TABLE event
(
        date                DATE NOT NULL,
        type                ENUM('T','Q') NOT NULL,
        event_id        INT UNSIGNED NOT NULL AUTO_INCREMENT,
        PRIMARY KEY (event_id)
);
③插入新数据,操作命令可以有多种格式,我们用最简单的student表举个例子
INSERT INTO student VALUES ('Megan','F',1);
INSERT INTO student VALUES ('Joseph','M',2);
INSERT INTO student VALUES ('Kyle','M',3);
INSERT INTO student VALUES ('Katie','F',4);
INSERT INTO student VALUES ('Abby','F',5);

需要详细介绍的是数据的检索,本章中,作者列举了10种情况,我将在下次贴出,并对本章作个总结。

To be continued…

时间仓促,水平有限,请大家指教,谢谢!

 

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에서 VBS를 끄는 방법 안내 Windows 11에서 VBS를 끄는 방법 안내 Mar 08, 2024 pm 01:03 PM

Windows 11 출시와 함께 Microsoft는 VBS(Virtualization-basedSecurity)라는 보안 기능을 포함하여 몇 가지 새로운 기능과 업데이트를 도입했습니다. VBS는 가상화 기술을 활용하여 운영 체제와 중요한 데이터를 보호함으로써 시스템 보안을 향상시킵니다. 그러나 일부 사용자의 경우 VBS는 필수 기능이 아니며 시스템 성능에 영향을 미칠 수도 있습니다. 따라서 이 기사에서는 Windows 11에서 VBS를 끄는 방법을 소개합니다.

VSCode를 사용하여 중국어 설정: 전체 가이드 VSCode를 사용하여 중국어 설정: 전체 가이드 Mar 25, 2024 am 11:18 AM

중국어 VSCode 설정: 전체 가이드 소프트웨어 개발에서 Visual Studio Code(줄여서 VSCode)는 일반적으로 사용되는 통합 개발 환경입니다. 중국어를 사용하는 개발자의 경우 VSCode를 중국어 인터페이스로 설정하면 작업 효율성이 향상될 수 있습니다. 이 기사에서는 VSCode를 중국어 인터페이스로 설정하는 방법을 자세히 설명하고 특정 코드 예제를 제공하는 완전한 가이드를 제공합니다. 1단계: 언어 팩을 다운로드하고 설치합니다. VSCode를 연 후 왼쪽을 클릭합니다.

태블릿에 Deepin Linux를 설치하십시오. 태블릿에 Deepin Linux를 설치하십시오. Feb 13, 2024 pm 11:18 PM

지속적인 기술 발전으로 인해 Linux 운영 체제는 다양한 분야에서 널리 사용되고 있습니다. 태블릿에 Deepin Linux 시스템을 설치하면 Linux의 매력을 더욱 편리하게 경험할 수 있습니다. Linux의 구체적인 설치 단계를 살펴보겠습니다. 준비 작업 태블릿에 Deepin Linux를 설치하기 전에 몇 가지 준비가 필요합니다. 설치 과정에서 데이터 손실을 방지하기 위해 태블릿에 중요한 데이터를 백업해야 합니다. 설치 과정에서 사용할 수 있도록 USB 플래시 드라이브나 SD 카드에 저장하세요. 다음으로 설치 프로세스를 시작할 수 있습니다. U 디스크 또는 SD에서 시작하도록 태블릿을 설정해야 합니다.

jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 Feb 27, 2024 pm 06:45 PM

jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery는 웹 사이트 개발에 널리 사용되는 JavaScript 라이브러리로, JavaScript 프로그래밍을 단순화하고 개발자에게 풍부한 기능을 제공합니다. 이 기사에서는 jQuery의 참조 방법을 자세히 소개하고 독자가 빠르게 시작할 수 있도록 구체적인 코드 예제를 제공합니다. jQuery 소개 먼저 HTML 파일에 jQuery 라이브러리를 도입해야 합니다. CDN 링크를 통해 소개하거나 다운로드할 수 있습니다.

Tomcat의 문자 깨짐 문제를 효과적으로 해결하기 위한 실용적인 매뉴얼 Tomcat의 문자 깨짐 문제를 효과적으로 해결하기 위한 실용적인 매뉴얼 Dec 27, 2023 am 10:17 AM

Tomcat 문자 깨짐 문제 해결을 위한 실용 가이드 소개: 웹 개발에서 Tomcat 문자 깨짐 문제에 자주 직면합니다. 문자가 깨져 사용자가 데이터를 올바르게 표시하거나 처리할 수 없게 되어 사용자 경험에 불편을 초래할 수 있습니다. 따라서 Tomcat 왜곡 문제를 해결하는 것은 매우 중요한 단계입니다. 이 기사에서는 Tomcat 잘못된 코드를 해결하기 위한 몇 가지 실용적인 지침을 제공하고 이 문제를 쉽게 처리하는 데 도움이 되는 특정 코드 예제를 첨부합니다. 1. Tomcat 문자 깨짐의 원인을 이해합니다. Tomcat 문자 깨짐의 주요 원인은 문자입니다.

Conda 사용 가이드: Python 버전을 쉽게 업그레이드 Conda 사용 가이드: Python 버전을 쉽게 업그레이드 Feb 22, 2024 pm 01:00 PM

Conda 사용 가이드: Python 버전을 쉽게 업그레이드하려면 특정 코드 예제가 필요합니다. 소개: Python 개발 프로세스 중에 새로운 기능을 얻거나 알려진 버그를 수정하기 위해 Python 버전을 업그레이드해야 하는 경우가 많습니다. 그러나 Python 버전을 수동으로 업그레이드하는 것은 문제가 될 수 있습니다. 특히 프로젝트와 종속 패키지가 상대적으로 복잡한 경우에는 더욱 그렇습니다. 다행스럽게도 뛰어난 패키지 관리자이자 환경 관리 도구인 Conda는 Python 버전을 쉽게 업그레이드하는 데 도움이 될 수 있습니다. 이 기사에서는 사용 방법을 소개합니다.

PHP7 설치 디렉터리 구성 가이드 PHP7 설치 디렉터리 구성 가이드 Mar 11, 2024 pm 12:18 PM

PHP7 설치 디렉토리 구성 안내서 PHP는 동적 웹 페이지를 개발하는 데 사용되는 널리 사용되는 서버측 스크립팅 언어입니다. 현재 PHP의 최신 버전은 PHP7입니다. 이 버전은 많은 새로운 기능과 성능 최적화를 도입했으며 많은 웹사이트와 애플리케이션에서 선호되는 버전입니다. PHP7을 설치할 때 설치 디렉터리를 올바르게 구성하는 것이 매우 중요합니다. 이 문서에서는 특정 코드 예제와 함께 PHP7 설치 디렉터리 구성에 대한 자세한 가이드를 제공합니다. PHP7을 먼저 다운로드하려면 PHP 공식 홈페이지(https://www.php7.kr)에서 다운로드해야 합니다.

Java 설치 방법을 단계별로 가르쳐 드립니다. 자세한 가이드를 통해 설치를 쉽게 완료할 수 있습니다. Java 설치 방법을 단계별로 가르쳐 드립니다. 자세한 가이드를 통해 설치를 쉽게 완료할 수 있습니다. Dec 28, 2023 am 09:41 AM

Java 설치 가이드: 설치 프로세스를 단계별로 안내하며 특정 코드 예제가 필요합니다. 소개: Java는 널리 사용되는 컴퓨터 프로그래밍 언어이며 Java 설치는 개발자와 일반 사용자의 첫 번째 단계입니다. 이 기사에서는 단계별 지침과 특정 코드 예제를 통해 설치 프로세스를 성공적으로 완료하는 데 도움이 되는 Java 설치 가이드를 제공합니다. 1. Java 설치 패키지 다운로드: 먼저 Oracle 공식 웹사이트에서 Java 설치 패키지를 다운로드해야 합니다. Ja의 최신 버전은 다음에서 찾을 수 있습니다.

See all articles