zoukankan      html  css  js  c++  java
  • 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不会复制: 主键、外键和索引
  • 相关阅读:
    事务(进程 ID 133)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品的解决方案
    Waiting for cache lock
    Win11系统将软件安装在C盘后,打开软件会有无法正常读写C盘下文件的问题
    SharePoint 2010 微软学习教程
    Oracle 远程连接配置文件
    如何优化操作大数据量数据库(几十万以上数据)(二。改善SQL语句)
    SQL BI Microsoft MSDN
    Oracle 错误:ORA06413: Connection not open 解决办法
    2008R2Win7管理一创建域和加入域
    学生表 课程表 成绩表 教师表 50个常用sql语句
  • 原文地址:https://www.cnblogs.com/chengzige/p/11385844.html
Copyright © 2011-2022 走看看