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)。下面两张图是同一个数据的两种表现形式。
表对列中的数据类型有所限制。
- 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以后的版本了,再次吐槽,这种很底层的语言,竟然也胡乱改来改去,稳定第一不懂么)。
父表被链接属性不存在。
子表链接的属性同父表被链接的属性不完全相同,包括数据类型、长度、完整性约束等等。
- 父表被链接属性不是主键,或者没有建立索引。
劳资也不是那么蠢的要全部从头到尾看一遍,搜搜看别人的食用方法吧先。