mysql数据库_关系的创建

一对多关系建立 

以部门表与员工表为例

create  table  dep(
    id int primary key auto_increment,    #创建主键非空且唯一
    dep_name varchar(128),
    dep_desc  varchar(128)
   );    

create  table  emp(
    id int primary key auto_increment,
    emp_name varchar(128),
    emp_gender enum('mail', 'femail', 'others') default 'mail'  #使用枚举选择性别,默认为mail
    dep_id int,                             #创建关联字段
    foreign key (dep_id) references dep(id) #创建与dep表关联的外键dep_id
    on update cascade              #级联更新
    on delete cascade                 #级联删除          #创建与dep表关联的外键,级联更新,级联删除
   );

插入部门数据

insert into dep(dep_name, dep_desc) values('销售部', '买卖'),('技术部','搞技术'),('财务部','管钱')

插入员工数据

insert into emp(emp_name, emp_gender, dep_id) values('张三', 18, 1),('李四',19,2),('王五', 20, 3),('马六', 21, 1)

 

注意:需要在创建关联表之前创建被关联表, 在多的一方去建立外键

 

 

多对多关系建立

在创建多对多关系的时候, 先把两个普通的表创建出来, 然后创建一个专门存放多对多关系的一个表(第三张表), 使用这张表去做关系绑定

以图书表和作者表为例

 

create  table  book(
    id int primary key auto_increment,
    title varchar(64),
    price int
    );


create  table  authors(
    id int primary key auto_increment,
    name varchar(64),
    age int
    );


create  table  book_authors(
    id int primary key auto_increment,
    book_id int,
    foreign key(book_id) references book(id)
    on update cascade
    on delete cascade,
    author_id int,
    foreign key(author_id) references authors(id)
    on update cascade
    on delete cascade
    );

 

插入书籍数据

insert into book(title, price) values('围城', 199),('', 187),('柒个我', 299)

插入作者数据

insert into authors(name, age) values('张三', 18),('李四', 19)

插入第三张表数据

insert into book_authors(book_id, author_id) values(1,1),(1,2),(2,1),(3,1),(3,2)

 

 

 

一对一关系建立

在创建一对一的关系时, 外键可以建立在任何一张表, 但是推荐建立在查询频率比较高的那一张表

以用户表为例

 

create  table  authordetail(
    id int primary key auto_increment,
    ipoh int,
    addr varchar(128)
    );


create  table  author(
    id int primary key auto_increment,
    name varchar(16),
    age int,
    authordetail_id int unique,          # 一对一关系id不能重复
    foreign key(authordetail) references authordetail(id)
    on update cascade
    on delete cascade
    );

 

 

 

 

修改表的语句

1. 修改表名
ALTER TABLE 表名
      RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…],
      ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…] FIRST; # 直接移到最前面
ALTER TABLE 表名
      ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; # 寻找插哪个字段的后面
3. 删除字段
ALTER TABLE 表名
      DROP 字段名;
4. 修改字段 # modify只能改字段数据类型完整约束,不能改字段名,但是change可以!
ALTER TABLE 表名
      MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
      CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

 

 

 

复制表

create  table 新表名  select * from 表名(要复制的表)    # 只会复制表结构,key不会复制: 主键、外键和索引

 

posted @ 2019-08-20 21:41  Key丶橙子哥  阅读(1316)  评论(0编辑  收藏  举报