CS50 2016 Week9 学习笔记

来源:互联网 发布:php网页上传服务器 编辑:程序博客网 时间:2024/05/16 11:07

这节课讲到 SQL 了。

从视频中截取了MVC模式的示意图:

这里写图片描述

还有维基百科上关于MVC的介绍示意图:

这里写图片描述


这里不讲MVC模式和flask代码了。

直接来看数据库和SQL。


数据

数据是人们用于记录事物状况的物理符号。为了描述客观事物,用到的数字、字符以及所有能输入到计算机中并能被计算机处理的符号都可以看成数据。

数据有两种基本形式,即数值型数据和字符型数据。此外还有图形、图像、声音等多媒体数据。

注:这本 大学计算机基础 ,真的太有用了。


数据库

数据库是以文件形式按特定的组织方式将数据保存在存储介质中,具有一定结构、可共享的数据集合。

因此,在数据库中,不仅包括数据本身,也包含数据之间的关系。

数据库具有以下特点:

  1. 数据通过一定的数据模型进行组织,从而保证有最小冗余度。
  2. 数据对每个应用程序共享。
  3. 对数据的各种操作都由数据库管理系统统一进行。


数据库管理系统

数据库管理系统是建立、使用和维护数据库的软件系统。

每一个数据库管理系统必须是基于某种数据模型的(例如主流的关系模型),它不仅管理数据的值,还要按照数据模型对数据间的联系进行管理。

数据库管理系统需要使用特定的语言来管理数据(如关系型数据库中的SQL语言)。

常用的数据库管理系统有:Access、SQL Server、Oracle、Sysbase、Informix、DB2、MySQL等。


关系数据库

数据库中的数据是有结构的,这些结构反映了事物和事物之间的联系。而数据模型就是表示实体类型以及实体之间联系的模型,每一个数据库关系系统必须是基于某种数据模型的。

目前,数据库管理系统所支持的数据模型主要有三种,即层次模型、网状模型和关系模型。

目前,大多数数据库管理系统都是基于关系模型,即关系数据库。

(1) 关系
一个关系就是一张二维表,每个关系都有一个关系名。

(2)元组
在关系中,除表头外,每一行称为一个元组。

(3) 属性
表中的每一列称为一个属性(字段),列可以命名,称为属性名。

(4)主键
主键是表中的某个属性或属性组(一列或多列组成),用于唯一确定一个元组。

(5)域
描述属性的取值范围。

(6)关系模式
关系模式是对关系的描述,对应关系的表头。


SQL

SQL是一种语言,用来访问和操作数据库管理系统。

SQL中常用的操作有:

  1. CREATE
  2. INSERT
  3. SELECT
  4. UPDATE
  5. DELETE

作为语言,自然各种关系型数据库管理系统都通用,下面是基于MySQL的例子:

(1) Ubuntu 中安装mysql-server。

sudo apt-get install mysql-server libmysqlclient-dev

sudo 管理员身份运行;APT(Advanced Packaging Tool)高级软件工具;连起来就是使用apt-get来安装MySQL数据库管理系统。

(2) 连接MySQL数据库管理系统。

sudo mysql -u root -p

u for username,root是安装时设置的用户名; p for password,接着输入安装时设置的密码。

然后页面大概如下:

这里写图片描述

(3)新建一个数据库: CREATE DATABASE FLASKAPP;

(4)使用FLASKAPP数据库: USE FLASKAPP;

(5)在FLASKAPP数据库中新建一个users表:

CREATE TABLE users(id INT(11) AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100),email VARCHAR(100), username VARCHAR(30), password VARCHAR(100), register_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP);

这里几乎包含了上面关系模型、或者说关系数据库的大部分特点:

  1. 关系,一个关系就是一张关系表,这里关系表的名字为users
  2. 关系模式,users(id, name, email, username, password, register_date),即表头的部分,对关系的描述。
  3. 属性,表头的idname规定着这一列数据的属性。(注意关系表中不能出现相同的属性)
  4. 域,用来描述属性的取值范围,例如上面的name VARCHAR(100)规定name不能多于100个字节。
  5. 主键,用来唯一确定一个元组(一行数据)。上面id可以唯一确定一行数据。
  6. 除表头外,每一行称为一个元组,对应着一行数据。

这里写图片描述

(6)显示users表的结构: DESCRIBE users;

mysql> DESCRIBE users;+---------------+--------------+------+-----+-------------------+----------------+| Field         | Type         | Null | Key | Default           | Extra          |+---------------+--------------+------+-----+-------------------+----------------+| id            | int(11)      | NO   | PRI | NULL              | auto_increment || name          | varchar(100) | YES  |     | NULL              |                || email         | varchar(100) | YES  |     | NULL              |                || username      | varchar(30)  | YES  |     | NULL              |                || password      | varchar(100) | YES  |     | NULL              |                || register_date | timestamp    | NO   |     | CURRENT_TIMESTAMP |                |+---------------+--------------+------+-----+-------------------+----------------+6 rows in set (0.34 sec)

(7) 向users中写入数据:
INSERT INTO users(name, email, username, password) VALUES(FengWeilei, 18790166674@qq.com, F, somepassword);

这里写图片描述

(8)各种查询语句(核心功能):

SELECT * FROM users WHERE id<2;
SELECT * FROM users WHERE name=’FengWeilei’;
SELECT * FROM users WHERE email LIKE ‘%1879016%’;

(9)更新表中某条数据:UPDATE users SET username=’WeiLei’ WHERE id=1;

(10)删除表中的数据(和SELECT语句类似,删除之前用SELECT语句确认一下,别删错了):
DELETE FROM users WHERE id =1;

(11) 删除users表: DROP TABLE users;

(12) 删除FLASKAPP数据库: DROP DATABASE FLASKAPP;

(13) 退出MySQL数据库管理系统:QUIT;


网站开发时有些时候需要自己在代码中写这些SQL语句,有些时候SQL语句封装在了一些方法中。

总的来说,通过操作数据库,Web应用能向用户展示更多有用的数据,也能实现更多的功能了。