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 TABLE 或 ALTER TABLE 语句中定义。
alter table 表名 add primary key (字段); (赋予某个字段主键属性)
alter table 表名 add id int primary key; (增添一个主键字段)
复合主键
就是一张表中有多个主键
唯一键(unique)
定义:一个表中可以有多个唯一键,只保证该表中某个字段数据的唯一性,可以为空,可在 CREATE TABLE 或 ALTER TABLE 语句中定义。(与主键类似)
例:
alter table 表名 drop index 字段; (删除某个字段的唯一键属性)
**注:**主键和唯一键的区别
主键不可为空,可以与其他表有联系
唯一键可为空,作用范围仅限该表
复合唯一键
就是一张表中有多个唯一键
外键(foreign key)
与其他表关联的字段,可在 CREATE TABLE 或 ALTER 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第三范式
消除传递依赖