A First Course in Database Systems

CS基础之SQL学习Flag。

劳资为什么要学SQL

有用呗!

在我这种野路子出生的状况下,第一年熟悉了一点点一点点的Computer Skill的情况下,还是趁早再学习一些Computer Science Skill吧。。。不然会死的很难看的(男人的直觉)。

最近两天被这个SQL折磨的不轻。早点会早点完事,就像一开始觉得学点python足够搞research了,最后兜兜转转一年过去发现还是得会C++(不然搞不出有用的东西);现在觉得学点SQL基本的查询语言就够了,谁知道会不会几年以后发现还是这种情况。

磨刀不误砍柴功。

A First Course in Database Systems

  • 大部分网站中是会应用数据库的。

  • The term database refers to a collection of data that is managed by a DBMS(data base manage system)。

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

  • The “schema” in database means “logical structure of the data”.

  • 早期数据库从文件系统演变过来的。有层次型、网状、关系型数据库。

  • Ted Codd搞了第一个关系数据库。

  • SQL stands for “Structured Query Language”.

  • XML stands for “eXtensible Modeling Language”.

  • 数据库关心的一个基本问题是“Information Intergration”。解决办法有“data ware houses”和”middleware”。

  • DBMS有两种命令:用户的查询和修改命令(DML—data-manipulation-language);数据库管理员关心的”schema”(DDL—data-definition-language)。

  • DML有两个子系统(Answering the Query; Transaction Processing(concurrency-control manager; logging and recovery manager)).

  • Transaction Processing 有三个任务:logging; concurrency control(用锁来保护数据,实现并发); deadlock resolution。

  • That’s all for chapter 1.

  • 主流的数据模型包括关系模型和半结构数据模型(XML)。下面两张图是同一个数据的两种表现形式。

    table

    XML

  • 表对列中的数据类型有所限制。

  • varchar表示变长字符串类型。

MySQL必知必会

  • 表:存储在表中的数据是一种类型的数据或一个清单。
  • 列:表中的一个字段。所有表都是由一个或多个列组成的。每个列都有相应的数据类型。
  • 行:表中的数据是按行存储的,所保存的每个记录存储在自己的行内。
  • 主键:表中每一行都应该有可以唯一标识自己的一列(或一组列)。MySQL强制要求作为主键的列满足:任意两行不同;主键列不允许NULL值。在使用多列作为主键时,上述条件必须应用到构成主键的所有列,所有列值的组合必须是唯一的(但单个列的值可以不唯一)。
  • 后面好几章都特别简单,就是安装程序上不能按照它的描述走(它给的链接不靠谱)。
  • 啥时候能看到外键的相关内容啊。
  • Mysql中,表/列能重命名,database不能重命名。
  • 一般一个database在电脑里就是一个文件夹,一张表就是一个.sql文件。
  • create table mytable charset utf8;指定了字符集。
  • truncat mytabel;清空了表(一下子可以删除所有的内容,相当于删表再重建)
  • delete *; 是删除了数据的某一行。
  • 1064是语法错误。

零零碎碎的经验

经过连续3天的踩坑,总结了4条不太成系统的经验(这4条坑了劳资3天),分别列举在这里:

SQL建表添加外键失败通常有以下4个原因:

  • 你语法写错了(通常是mysql安装的版本问题,比如python2.7自带的sitepackage里面写的sql外键语法就不适用于mysql5.7以后的版本了,再次吐槽,这种很底层的语言,竟然也胡乱改来改去,稳定第一不懂么)。
  • 父表被链接属性不存在。

  • 子表链接的属性同父表被链接的属性不完全相同,包括数据类型、长度、完整性约束等等。

  • 父表被链接属性不是主键,或者没有建立索引。

劳资也不是那么蠢的要全部从头到尾看一遍,搜搜看别人的食用方法吧先。