新版博客SEO优化基本完成,新老博客内容正在整合中,保证每篇文章高质量。 SiteMap RSS Github
Mysql关系模型及数据库操作
嘉美伯爵   2018年8月20日 09:46   数据库   MySQL   200  

重要

  • Mysql对应一对一、一对多、多对多三种关系模型
  • 删除数据库 drop database <数据库名>;
  • 删除数据表 drop table <表名>

一对一

  • 定义独生子家庭,一个爸爸只能有一个孩子,一个孩子也只能有一个爸爸
  • 按照生物学的角度来说,一个精子只能与一个卵子结合,所以其他情况不存在呐

一对多

  • 定义省份表,一个省有多个市,但是一个市只能对应一个省

多对多

  • 为了方便管理和理解,我们在创建多对多模式的时候,需要定义一个中间表
  • 一个学生有多门课程,一个课程同时也对应多个学生,那么这是中间表就相应拆分成了两个一对多的实体

数据表创建

  • 创建学生表
mysql> create table students(
    -> id int primary key auto_increment,
    -> sname varchar(32)
    -> );
Query OK, 0 rows affected (0.51 sec)
  • 创建学科表
mysql> create table subjects(
    -> id int primary key auto_increment,
    -> stitle varchar(32)
    -> );
Query OK, 0 rows affected (0.47 sec)
  • 根据拆分的中间表创建中间表
mysql> create table scores(
    -> id int primary key auto_increment,
    -> stuid int,
    -> subid int,
    -> score decimal(5, 2)
    -> );
Query OK, 0 rows affected (1.41 sec)
  • 关联学生表 (constraint是给已存在的表添加)
alter table scores add constraint FK_ID foreign key(stuid) references subjects(id);
alter table scores add constraint FK_ID foreign key(subid) references scores(id);
  • 以上分步操作定义的字段必须存在,我们可以一次性创建
create table scores(
id int primary key auto_increment,
stuid int,
subid int,
score decimal(5,2),
foreign key(stuid) references students(id),
foreign key(subid) references subjects(id)
);

数据表删除

  • 删除外键
## 查看表的创建最终形态
mysql> show create table scores;
| scores | CREATE TABLE `scores` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `stuid` int(11) DEFAULT NULL,
  `subid` int(11) DEFAULT NULL,
  `score` decimal(5,2) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `EK_ID` (`stuid`),
  KEY `K_ID` (`subid`),
  CONSTRAINT `EK_ID` FOREIGN KEY (`stuid`) REFERENCES `subjects` (`id`),
  CONSTRAINT `FK_ID` FOREIGN KEY (`subid`) REFERENCES `scores` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
## 找到CONSTRAINT后的别名进行删除
 alter table scores drop foreign key K_ID;

级联

  • restrict(限制):默认值,抛异常
  • cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
  • set null:将外键设置为空
  • no action:什么都不做
alter table scores add constraint K_ID foreign key(subid) references scores(id) on delete cascade;

修改字段

### 修改字段属性
alter table students modify age varchar(32) default null;
### 修改字段名和属性
alter table  students change age sex varchar(32) not null default "男";

增加字段

### 增加字段
alter table students add age int not null;
### 给属性添加默认值
alter table students alter sname set default "Gage";

删除字段

alter table students drop column sex;