7.数据库设计
数据类型
固定浮点类型
● decimal
● numeric
浮点类型
● float
● double
● 与decimal相比是不精确类型
日期时间类型
● TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
● timestamp和datatime日期时间类型可以被自动初始化和更新为当前的日期时间,默认指定current timestamp为默认值
字符类型
枚举类型
● ENUM('x-small', 'small', 'medium', 'large', 'x-large')
● 另外枚举类型的排序规则是按照存储顺序进行而不是按照本身排序的
● 如果想要按照一般的排序规则进行排序,需要使用field()函数显示指定排序规则
○ select size from shirts order by field(size,’large’,’medium’,’small’)
● 当插入数字到枚举类型字段时,数字会被当做枚举值的第几个值而插入
设置默认值
● Default默认值用来指定一个列的默认值,但不能指定函数或表达式作为默认值,比如now()和current_date,但唯一的例外是可以指定current_timestamp作为timestamp和datetime列的默认值
● Blob,text列不能指定默认值
自增长类型字段
● 整型和浮点型字段可以被指定为自增长类型字段,意味着当插入行数据时这列为NULL时,则按照此列最大值+1的方式插入数据
● 获取插入后的自增长列的值,可以用LAST_INSERT_ID()函数获取
● 一个表中只能有一个自增长字段,且不能含有默认值
● 自增长字段的数值从1开始递增,且不能插入负值
● 当你显视的插入一个数值到自增长字段时,则下一个是表中所有值的最大值+1
CREATE TABLE animals (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
设置字段的auto_increment属性,有两种方式
Create table的时候指定
Alter table的时候指定: mysql> ALTER TABLE tbl AUTO_INCREMENT = 100;
E-R模型
● E-R模型的构成成分是实体集,属性和联系集
○ 实体是把具有属性、性质和特征相同的实体,用所有实体名和他的属性名称的来用抽象的形式描述同种类的实体;一般实体用矩形符号表示,矩形框内标注实体的名称
○ 属性是实体特有的一些特性,一个实体有包含有许多个属性来进行描述。用椭圆形的符号来表示,用无向直线将属性的椭圆和其相对应的实体图形串联起来
○ 联系是ER模型中的联系是用来反映实体内部和实体之间的属性关系。用菱形符号表示,在菱形框内标注联系的名称,然后使用无向直线将有关系的实体属性串联起来,还需要在无向直线上标出实体和联系的类型(1 : 1,1 : n或m : n)
字段属性
● 表字段在设计时还需考虑字段属性
● NOT NULL代表表中此列的数据必须存在,默认是NULL容许为空
● 主键(primary key)代表此表的所有数据都可以被主键里的字段区分,创建完主键则默认会在对应字段上创建唯一性索引,且每个主键字段都需要是NOT NULL,一个表上只允许有一个主键
● 外键(foreign key)可以将两个表的数据建立映射关系,并定义不同的外键约束条件以保证数据的一致性,通常为一个父表一个子表,子表中的数据映射到父表对应的列
● 当创建好外键后,任何对子表的插入和修改操作如果对应的值没有在父表中有对应,都会被MySQL拒绝
● 当在父表上update和delete操作时,对子表中对应数据的操作依赖设置
○ Cascade代表子表中的数据也自动update和delete
○ Set null代表子表中的数据自动修改成null
○ Restrict(默认)代表如果子表中有对应的数据,则拒绝父表上的update和delete操作
○ No action在MySQL中的含义和restrict一样
○ Set default代表将子表中的数据自动修改成default值
FOREIGN KEY (product_category, product_id)
REFERENCES product(category, id)
•ON UPDATE CASCADE ON DELETE RESTRICT,