列属性的完整性 关于主键(primary key)
定义:主键可以是多个字段,它是不可重复且不可为空的,唯一标识了数据库表中的一组数据,可以作为多张表中的联系要素,可在 CREATE TABLE 或 ALTER TABLE 语句中定义。
alter table 表名 add primary key (字段); (赋予某个字段主键属性)
alter table 表名 add id int primary key; (增添一个主键字段)
复合主键
就是一张表中有多个主键
[唯一键]2
定义:一个表中可以有多个唯一键,只保证该表中某个字段数据的唯一性,可以为空,可在 CREATE TABLE 或 ALTER TABLE 语句中定义。(与主键类似)
例:
alter table 表名 drop index 字段; (删除某个字段的唯一键属性)
注:主键和唯一键的区别
主键不可为空,可以与其他表有联系
唯一键可为空,作用范围仅限该表
复合唯一键
就是一张表中有多个唯一键
[外键]4
与其他表关联的字段,可在 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第三范式
消除传递依赖
数据的备份与恢复 备份
mysqldump -uroot -p 备份的数据库 >备份数据库的文件的路径
恢复
mysql -uroot -p 空数据库