1. 模式: 数据库整套表格的完整设计(不包括数据),可以使用实体关系图描述,或者文本格式表示。
文本格式表示: Customers( CustomerID, Name, City, Address)
Orders ( OrderID, CustomerID, Amount, Date )
下划线表示主键,斜体表示外键。
2. 数据库设计:
避免保存冗余数据(1.首先是空间浪费 2.多个地方保存同一个数据,会导致数据更新不一致,包含修改、插入、删除的不规则)。
使用原子列,每一行的每个属性只存一个数据。
避免多个空属性的设计
数据库的表类型有两种: 一种是描述现实世界对象的简单表(可能也包含其他简单对象的键,他们之间有一对一或者一对多的关系)
一种是现实世界的多对多关系的关联表。
3. 特殊类型
mysql中获取char类型与存储varchar数据的时候,将过滤多余空格。 当然这里说的空格都是后边的空格,前边的不会去掉。
我测试了一下 如果varchar类型的列存入'hello ',注意后边有三个空格,存到数据库中的时候点击查看依然是三个空格,但是我用where col = 'hello'依然可以匹配,后边加上空格同样匹配,不管你加了几个空格。
对于char的类型,存储的时候会自动去掉多余的空格,查询的是偶和varchar类型一样,无论后边有没有空格,有多少个空格,都依然可以匹配。
对于int型 select 12=00012 返回1,加0和不加0一样。
text用于长文本,而blob用于大二进制数据,称为大二进制对象。 text区分大小写,而blob不区分。
set类型和enum类型。 set类型可以来自集合中的一个值,或者多个值,或者null,这个集合最大包含64个元素。
enum类型可以来自集合中的一个值,或者null。集合最大可以有65535个元素。
4. insert
insert语句还可以这样用 insert into tablea set name='myname', address='locatoin a ';
insert 后边可以添加low priority 或者delayed ,第一种意味着当有其他非读操作时,系统必须等待并稍后插入。 第二种意味着插入的数据将被缓存。当服务器繁忙时,我们可以继续运行其他查询而非等待这个insert 的完成。
执行更新或者删除操作时,可以使用limit限制受影响的行,也可以是order by后的limit。