Mysql 数据类型

布尔类型(boolean)

true 为 1; false 为 0

枚举类型(enum)

例:

sex enum(‘man’, ‘woman’, ‘?’, ‘nothing’)

insert into 表名 values(必须从其中选一个**(单选)**,不可取列表之外的数据)

**注:**存储时可以直接存编号(1/2/3/4…)

set类型

例:

hobby set(‘哲学’,‘经济学’,‘文学’,‘IT’,‘数学’)

insert into 表名 values(必须从中选一个或多个**(多选)**)

**注:**存储时可以存编号(20/21/2^2…)

日期和时间类型

datetime

例:

Time datetime

insert into 表名 values(2020-8-21 15:16);

列属性的完整性

关于主键(primary key)

定义:主键可以是多个字段,它是不可重复不可为空的,唯一标识了数据库表中的一组数据,可以作为多张表中的联系要素,可在 CREATE TABLEALTER TABLE 语句中定义。

alter table 表名 add primary key (字段); (赋予某个字段主键属性)

alter table 表名 add id int primary key; (增添一个主键字段)

复合主键

就是一张表中有多个主键

唯一键(unique)

定义:一个表中可以有多个唯一键,只保证该表中某个字段数据的唯一性可以为空,可在 CREATE TABLEALTER TABLE 语句中定义。(与主键类似)

例:

alter table 表名 drop index 字段; (删除某个字段的唯一键属性)

**注:**主键和唯一键的区别

主键不可为空,可以与其他表有联系

唯一键可为空,作用范围仅限该表

复合唯一键

就是一张表中有多个唯一键

外键(foreign key)

与其他表关联的字段,可在 CREATE TABLEALTER TABLE 语句中定义。

create table 表名**(**

。。。

。。。

foreign key(字段) references 关联表名(关联字段名) on delete set null on update cascade

**)**engine=innodb; (注:设置外键 并设置删除数据时为置空操作,更新数据时为级联操作)

alter table 表名 add foreign key (本表中一个字段) references 关联表名(关联字段)

**注:**在一些并发项目中,是杜绝用外键的

删除外键

show create table 表名; (获取外键名)

alter table 表名 drop foreign key 外键名;

外键的数据操作

置空

主表删除对应数据,从表对应数据置空(null),一般用于外键删除数据。

级联

主表删除或更新数据,从表对应的数据也会删除或更新,一般用于外键更新数据。

外键创建失败原因

1、字段类型与大小不一致

2、索引类型不一致

3、其中一个表或两个表为MylSAM引擎(必须都为InnoDB引擎)

4、为外键设置了默认值

5、你可能设置了on delete set null, 但是相关的键的字段又设置成了nots null 值。你可能通过修改cascade 的属性值或者把字段属性设置成allow null来搞定这个bug.

6、Charset 和 Collate 选项在表级和字段级上不一致。

7、在这个关系里面,其中的一个字段是一个混合键值中的一个,它没有自己独立的索引,这时,你必须为它创建一个独立的索引。

注释

单行用‘#’,多行‘/* */

sql内注释: comment

设计数据库要点

1.要有主键

2.注意使用正确的数据类型

3.设置字段是否为空(not null

4.必要时设置default默认(例:缺考、暂时未知)

5.考虑该表字段与外部的联系

数据库设计思维

codd第一范式

确保每列原子性(不可再分)

codd第二范式

非键字段必须依赖键字段(表中不该有的字段不能有)

codd第三范式

消除传递依赖