精华内容
下载资源
问答
  • 将上述一张表员工和部门两张表!#类似的关系学生与班级,也是如此,一张学生一张班级”””确立之间的关系 一定要换位思考(必须两方都考虑周全之后才能得出结论)以员工和部门为例...

    表与表之间的关系

    e534c632a0a6b65483d8a980e9270ba4.png

    """把所有数据都存放于一张表的弊端

    1.组织结构不清晰

    2.浪费硬盘空间

    3.扩展性极差"""

    #上述的弊端产生原因类似于把代码全部写在一个py文件中,你应该怎么做?>>>解耦合!将上述一张表拆成员工和部门两张表!#类似的表关系学生与班级,也是如此,一张学生表和一张班级表

    ”””

    确立表与表之间的关系 一定要换位思考(必须两方都考虑周全之后才能得出结论)

    以员工表和部门表为例

    先站在员工表看能否有多个员工对应一个部门

    翻译过来:

    一个部门能否有多个员工

    可以!!!(暂时只能确定员工单向多对一部门)

    再站在部门表看能否有多个部门对应一个员工

    翻译过来:

    一个员工能否属于多个部门

    不可以!!!

    结论:员工表和部门表之间仅仅是单向的多对一

    那么它们的表关系就是"一对多"表关系中没有多对一一说,只有一对多

    (无论是多对一还是一对多都叫"一对多")

    ””’

    外键

    """通过我们的分析我们可以得到把一张表拆成两张表之后它们概念上的联系,那么我们要如何让这两张表有在代码层面上的真正关联,那么就要用到外键。

    什么是外键?

    让表与表有硬性物理层面上的联系。

    foreign key

    外键约束

    1.在创建表的时候,必须先创建被关联表

    2.插入数据的时候,也必须先插入被关联表的数据"""

    一对多

    44bb2795e23a0ef70554e4bff1e01c8e.png

    #上代码来创建表#先建被关联表

    create table dep(

    id int primary key auto_increment,

    dep_name varchar(32),

    dep_desc varchar(128)

    );#再建关联表

    create table emp(

    id int primary key auto_increment,

    emp_name varchar(64),

    emp_gender enum('male','female','others') default 'male',

    dep_id int,

    foreign key(dep_id) references dep(id)

    );#插入数据#先插被关联表的数据

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),

    ('教学部','教书育人'),

    ('技术部','技术能力有限部门');#再插关联表的数据

    insert into emp(emp_name,dep_id) values('jason',1),

    ('egon',2),

    ('tank',2),

    ('kevin',3);

    b24fc9cac6a0295efeed4f6a81489373.png

    #修改表的数据

    update dep set id=200 where id = 1;

    update emp set dep_id= 300 where id = 1;

    deletefrom dep where id = 3;

    结果如下:

    617f004ada9096ce5b924c0d9a5bfffa.png

    外键虽然能够帮你强制建立表关系 但是也会给表之间增加数据相关的约束

    级联更新级联删除

    1.删除数据的时候 先删员工表的数据 再删部门表的数据

    deletefrom emp where id = 4;

    deletefrom dep where id = 3;#因为不影响关联的字段,所以会报错,但比较麻烦

    我们应该让这两关联的表在一张表进行修改时,另一张也跟着它修改,于是引入了级联删除级联更新的概念。

    #创建表#创建被关联表

    create table dep(

    id int primary key auto_increment,

    dep_name varchar(32),

    dep_desc varchar(128)

    );#创建关联表

    create table emp(

    id int primary key auto_increment,

    emp_name varchar(64),

    emp_gender enum('male','female','others') default 'male',

    dep_id int,

    foreign key(dep_id) references dep(id)

    on update cascade

    on delete cascade

    );#被关联表里插入

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),

    ('教学部','教书育人'),

    ('技术部','技术能力有限部门')

    ;#关联表里插入

    insert into emp(emp_name,dep_id) values('jason',1),

    ('egon',2),

    ('tank',2),

    ('kevin',3);

    fc287f33eea62692c2220c89a9eedb60.png

    建立级联更新和级联删除后,可以进行表修改操作并让两边同步。

    多对多

    """图书与作者表

    一定要换位思考

    先站在图书

    多本书能否有一个作者

    一个作者能否写多本书 可以!!!

    再站在作者

    多个作者能否和写一本书

    一本书能否有多个作者 可以!!!

    如果双方都是可以,那么就是多对多

    强调 foreign key只是用来帮你建表关系的 不是某个关系特有的方法"""

    根据我们上面一对多的推导,我们可以将两张表互相设为外键,那么这样写是不是对的呢?当然不是,最简单的一个判断就是,在一堆多里,被关联的表需要你先进行创建,如果你这样写了,那么你这两张表该先去创建谁呢?

    所以我们只能用另一个方法,就是创建第三张表来记录着两张表之间的关系

    #先建两种普通的表 不需要设置外键

    create table book(

    id int primary key auto_increment,

    title varchar(32),

    price int

    );

    create table author(

    id int primary key auto_increment,

    name varchar(32),

    age int

    );#在创建第三张表并让它关联前两张表

    create table book2author(

    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 author(id)

    on update cascade

    on delete cascade

    );

    insert into book(title,price) values('python从入门到入土',199),('程序员的自我修养之脊椎康复指南',299),('MySQL之删别人的库让别人跑路',25);

    insert into author(name,age) values('jason',18),('tank',38);

    insert into book2_author(book_id,author_id) values(4,3); #报错

    insert into book_author(book_id,author_id) values(1,1),(1,2),(2,1),(3,1),(3,2);

    b2aeee93f767dd2ff773c66e8907c527.png

    一对一

    客户表和学生表(学校的客户与学生之间,报名之前都是客户,只有报了名的才能是学生)

    #左表的一条记录唯一对应右表的一条记录,反之也一样

    create table customer(

    id int primary key auto_increment,

    name char(20) notnull,

    qq char(10) notnull,

    phone char(16) notnull

    );

    create table student(

    id int primary key auto_increment,

    class_name char(20) notnull,

    customer_id int unique,#该字段一定要是唯一的

    foreign key(customer_id) references customer(id) #外键的字段一定要保证unique

    on delete cascade

    on update cascade

    );#三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系

    5cb5497a9333d45d28f857fafea5d42c.png

    594608fb026dfda177b6583216c77fe6.png

    总结

    """判断表关系的最简单的语法

    图书与出版社

    一本书可不可以有多个出版社 不可以!!!

    一个出版社可不可以出版多本书 可以!!!

    一对多的关系"""图书与作者表

    一本书可不可以有多个作者 可以!!!

    一个作者可不可以写多本书 可以!!!

    多对多的关系"""作者与作者详情

    一个作者可不可以有多个详情 不可以!!!

    一个作者详情可不可以有多个作者 不可以!!!

    要么两者是一对一

    要么两者之间没任何关系"""

    修改表

    #mysql对大小写不敏感!!!

    语法: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 旧字段名 新字段名 旧数据类型 [完整性约束条件…];

    ALTER TABLE 表名

    CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    复制表

    #查询语句执行的结果也是一张表,可以看成虚拟表

    #复制表结构+记录 (key不会复制: 主键、外键和索引)

    create table new_service select * fromservice;#只复制表结构

    select * from service where 1=2; //条件为假,查不到任何记录

    create table new1_service select* from service where 1=2;

    create table t4 like employees;

    展开全文
  • 将上述一张表员工和部门两张表!4.分析表数据之间的关系:多个用户对应一个部门,一个部门对应多个用户。禁止一个用户对应多个部门这种情况是另外一张表关系5.如何确立之间的关系一...

    一、外键前戏

    1.定义一张部门员工表

    bf3e6c8080bb0283515d76ab20ccd769.png

    2.把所有数据都存放于一张表的弊端

    1.表的结构不清晰

    2.浪费硬盘空间

    3.表的扩展性极差(无法忽略的缺点)

    3.上述的弊端产生原因类似于把代码全部写在一个py文件中,你应该怎么做?

    解耦合!将上述一张表拆成员工和部门两张表!

    4.分析表数据之间的关系:

    多个用户对应一个部门,一个部门对应多个用户。禁止一个用户对应多个部门这种情况是另外一张表关系

    5.如何确立表与表之间的关系

    一定要换位思考(必须两方都考虑周全之后才能得出结论)

    以员工表和部门表为例:

    先站在员工表看能否有多个员工对应一个部门

    翻译过来:

    一个部门能否有多个员工

    可以!!!(暂时只能确定员工单向多对一部门)

    再站在部门表看能否有多个部门对应一个员工

    翻译过来:

    一个员工能否属于多个部门

    不可以!!!

    结论:员工表和部门表之间仅仅是单向的多对一

    那么它们的表关系就是"一对多"

    表关系中没有多对一这一说,只有一对多

    无论是多对一还是一对多都叫"一对多"

    33ad436552f8ca2cca7f6726058d6c99.png

    二、外键:foreign key

    如何让两种表有代码层面上真正的关联,就必须使用外键

    1.什么是外键?

    让表与表有硬性层面上的关系

    2.关键字:

    foreign key

    三、一对多外键建立

    1.建表

    b604d8ccc1bf81d5f4eef7f48ff20c94.png

    先创建被关联表,否则会报错

    create table dep(

    id int primary key auto_increment,

    dep_name varchar(32),

    dep_desc varchar(128)

    );

    create table emp(

    id int primary key auto_increment,

    emp_name varchar(64),

    emp_gender enum('male','female','others') default 'male',

    dep_id int,

    foreign key(dep_id) references dep(id)

    );

    再插入数据,也必须先插入被关联表的数据

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),

    ('教学部','教书育人'),

    ('技术部','技术能力有限部门');

    insert into emp(emp_name,dep_id) values('jason',1),

    ('egon',2),

    ('tank',2),

    ('kevin',3);

    外键约束:

    1.在创建表的时候,必须先创建被关联表

    2.插入数据的时候,也必须先插入被关联表的数据

    2.修改表数据

    update dep set id=200 where id = 1;  # 无法修改

    update emp set dep_id = 300 where id = 1;  # 也无法修改

    删除数据也同样不行

    外键虽然能够帮你强制建立表关系,但是也会给表之间增加数据相关的约束

    3.如何才能删除

    1.删除数据的时候,先删员工表的数据,再删部门表的数据

    delete from emp where id = 4;

    delete from dep where id = 3;

    2.级联更新:on update cascade,级联删除:on delete cascade

    更新部门后,对应员工表中的标示部门的字段同步更新

    删除部门后,对应的部门里面的员工表数据对应删除

    #先创建被关联表

    create table dep(

    id int primary key auto_increment,

    dep_name varchar(32),

    dep_desc varchar(128)

    );

    create table emp(

    id int primary key auto_increment,

    emp_name varchar(64),

    emp_gender enum('male','female','others') default 'male',

    dep_id int,

    foreign key(dep_id) references dep(id)

    on update cascade#级联更新

    on delete cascade #级联删除

    );#先插入被关联表的数据

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),

    ('教学部','教书育人'),

    ('技术部','技术能力有限部门');

    insert into emp(emp_name,dep_id) values('jason',1),

    ('egon',2),

    ('tank',2),

    ('kevin',3);

    update dep set id=200 where id = 3; #修改被关联表的数据成功

    delete from dep where id = 2; #删除被关联表的数据成功

    四、多对多关系的建立

    1.图书与作者表(一定要换位思考):

    02f1e0f32b3eadf764ea0746d41a07eb.png

    先站在图书

    多本书能否有一个作者

    一个作者能否写多本书,可以!!!

    再站在作者

    多个作者能否和写一本书

    一本书能否有多个作者,可以!!!

    如果双方都是可以,那么就是多对多

    强调:foreign key 只是用来帮你建表关系的,不是某个关系特有的方法

    2.多对多关系的建立

    必须手动创建第三张表,用来专门记录两张表之间的关系

    e9cdc52aec7f84f2ae9a5179ccef6982.png

    先建两张普通的表,不需要设置外键

    create table book(

    id int primary key auto_increment,

    title varchar(32),

    price int

    );

    create table author(

    id int primary key auto_increment,

    name varchar(32),

    age int

    );

    再创建第三张表,用来专门记录两张表之间的关系

    create table book2author(

    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 author(id)

    on update cascade

    on delete cascade

    );

    插入数据

    insert into book(title,price) values('西游记',199),('聊斋',299),('jason教你删别人的库,让别人跑路',1);

    insert into author(name,age) values('jason',18),('tank',38);

    insert into book2author(book_id,author_id) values(4,3); #报错,必须要在两张表的id范围里

    insert into book2author(book_id,author_id) values(1,1),(1,2),(2,1),(3,1),(3,2);

    五、一对一表关系的建立

    372df76ee93e8e7405eb55511e99988a.png

    1.一对一表关系

    1.一对一的场景:当你的表特别庞大的时候,你可以考虑拆分表

    2.联想老男孩的客户和学生(老男孩的客户与学生之间,报名之前都是客户,只有报了名的才能是学生)

    当你没有交学费之前,你是老男孩的客户

    当你交了学费之后,你就变成老男孩的学生

    是所有的客户都能变成学生吗?

    2.通常将关系字段,称之为:外键字段

    一对多的外键字段,建在多的一方

    多对多的外键字段,建在第三张表

    一对一的外键字段,建在任意一方都可以,但是推荐你建在查询频率较高的一方

    3.建立

    a6f38c23cc5aa36e013053275af971dd.png

    #先创建被关联表

    create table authordetail(

    id int primary key auto_increment,

    phone int,

    addr char(255)

    );

    create table author(

    id int primary key auto_increment,

    name char(4),

    age int,

    authordetail_id int unique,

    foreign key(authordetail_id) references authordetail(id)

    on update cascade

    on delete cascade

    );

    六、判断表关系的最简单的语法

    图书与出版社

    一本书可不可以有多个出版社  不可以!!!

    一个出版社可不可以出版多本书  可以!!!

    一对多的关系

    图书与作者

    一本书可不可以有多个作者  可以!!!

    一个作者可不可以写多本书  可以!!!

    多对多的关系

    作者与作者详情

    一个作者可不可以有多个详情  不可以!!!

    一个作者详情可不可以有多个作者  不可以!!!

    要么两者是一对一

    要么两者之间没任何关系

    七、了解知识点

    1.修改表的完整语句

    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 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    2d14333965ebd5fbe469b7e67a41c0a4.png

    2.复制表

    # 查询语句执行的结果也是一张表,可以看成虚拟表

    # 复制表结构+记录 (key不会复制: 主键、外键和索引)

    create table new_service select * from service;

    # 只复制表结构

    select * from service where 1=2;        //条件为假,查不到任何记录

    create table new1_service select * from service where 1=2;

    create table t4 like employees;

    展开全文
  • 大话数据结构

    2019-01-10 16:35:22
    你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1队列顺序存储的不足 112 4.12.2...
  • 大话数据结构 程杰

    2018-09-01 10:06:43
    你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1队列顺序存储的不足 112 4.12.2...
  • 学习笔记day36

    2019-10-05 03:48:18
    之间的关系 """ 所有数据都存放于一张表的弊端 ...将上述一张表员工和部门两张表! # 类似的关系学生与班级,也是如此,一张学生一张班级 ””” 确立之间的关系 一定要换位...

    表与表之间的关系

    """
    把所有数据都存放于一张表的弊端
    1.组织结构不清晰
    2.浪费硬盘空间
    3.扩展性极差
    """
    # 上述的弊端产生原因类似于把代码全部写在一个py文件中,你应该怎么做?>>>解耦合!将上述一张表拆成员工和部门两张表!
    # 类似的表关系学生与班级,也是如此,一张学生表和一张班级表
    ”””
    确立表与表之间的关系 一定要换位思考(必须两方都考虑周全之后才能得出结论)
    以员工表和部门表为例
        先站在员工表看能否有多个员工对应一个部门
            翻译过来:
                一个部门能否有多个员工
                可以!!!(暂时只能确定员工单向多对一部门)
        再站在部门表看能否有多个部门对应一个员工
            翻译过来:
                一个员工能否属于多个部门
                不可以!!!
    结论:员工表和部门表之间仅仅是单向的多对一
    那么它们的表关系就是"一对多"
    表关系中没有多对一一说,只有一对多
    (无论是多对一还是一对多都叫"一对多")
    
    ””’

    外键

    """
    通过我们的分析我们可以得到把一张表拆成两张表之后它们概念上的联系,那么我们要如何让这两张表有在代码层面上的真正关联,那么就要用到外键。
    
    什么是外键?
        让表与表有硬性物理层面上的联系。
    
    foreign key
            外键约束
                  1.在创建表的时候,必须先创建被关联表  
                  2.插入数据的时候,也必须先插入被关联表的数据 
    """

    一对多

    #上代码来创建表
    #先建被关联表
    create table dep(
            id int primary key auto_increment,
            dep_name varchar(32),
            dep_desc varchar(128)
        );
    #再建关联表
    create table emp(
            id int primary key auto_increment,
            emp_name varchar(64),
            emp_gender enum('male','female','others') default 'male',
            dep_id int,
            foreign key(dep_id) references dep(id)    
        );
    
    #插入数据
    #先插被关联表的数据
    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
        ('教学部','教书育人'),
        ('技术部','技术能力有限部门');
    
    #再插关联表的数据
    insert into emp(emp_name,dep_id) values('jason',1),
        ('egon',2),
        ('tank',2),
        ('kevin',3);

    #修改表的数据
    update dep set id=200 where id = 1;
        
    update emp set dep_id = 300 where id = 1;
    
    delete from dep where id = 3;

    结果如下:

    外键虽然能够帮你强制建立表关系 但是也会给表之间增加数据相关的约束

    级联更新级联删除

    1.删除数据的时候  先删员工表的数据 再删部门表的数据
            delete from emp where id = 4;
            delete from dep where id = 3;
    #因为不影响关联的字段,所以会报错,但比较麻烦

    我们应该让这两关联的表在一张表进行修改时,另一张也跟着它修改,于是引入了级联删除级联更新的概念。

    #创建表
    #创建被关联表
    create table dep(
                id int primary key auto_increment,
                dep_name varchar(32),
                dep_desc varchar(128)
            );
    
    #创建关联表
    create table emp(
                id int primary key auto_increment,
                emp_name varchar(64),
                emp_gender enum('male','female','others') default 'male',
                dep_id int,
                foreign key(dep_id) references dep(id) 
                on update cascade 
                on delete cascade
            );
    
    #被关联表里插入
    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
            ('教学部','教书育人'),
            ('技术部','技术能力有限部门')
            ;
    
    #关联表里插入
    insert into emp(emp_name,dep_id) values('jason',1),
            ('egon',2),
            ('tank',2),
            ('kevin',3);

    建立级联更新和级联删除后,可以进行表修改操作并让两边同步。

    多对多

    """
    图书与作者表
        一定要换位思考
            先站在图书
                多本书能否有一个作者
                    一个作者能否写多本书    可以!!!
            
            再站在作者
                多个作者能否和写一本书        
                    一本书能否有多个作者    可以!!!
    如果双方都是可以,那么就是多对多
    强调  foreign key只是用来帮你建表关系的 不是某个关系特有的方法
    """

    根据我们上面一对多的推导,我们可以将两张表互相设为外键,那么这样写是不是对的呢?当然不是,最简单的一个判断就是,在一堆多里,被关联的表需要你先进行创建,如果你这样写了,那么你这两张表该先去创建谁呢?

    所以我们只能用另一个方法,就是创建第三张表来记录着两张表之间的关系

    #先建两种普通的表  不需要设置外键
        create table book(
                id int primary key auto_increment,
                title varchar(32),
                price int
            );
        create table author(
                id int primary key auto_increment,
                name varchar(32),
                age int
            );
    
    #在创建第三张表并让它关联前两张表
        create table book2author(
                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 author(id)
                on update cascade
                on delete cascade
        );
    insert into book(title,price) values('python从入门到入土',199),('程序员的自我修养之脊椎康复指南',299),('MySQL之删别人的库让别人跑路',25);
    
    insert into author(name,age) values('jason',18),('tank',38);
    
    insert into book2_author(book_id,author_id) values(4,3);  # 报错
    insert into book_author(book_id,author_id) values(1,1),(1,2),(2,1),(3,1),(3,2); 

    一对一

    客户表和学生表(学校的客户与学生之间,报名之前都是客户,只有报了名的才能是学生)

    # 左表的一条记录唯一对应右表的一条记录,反之也一样
    
    create table customer(
        id int primary key auto_increment,
        name char(20) not null,
        qq char(10) not null,
        phone char(16) not null
    );
    
    create table student(
        id int primary key auto_increment,
        class_name char(20) not null,
        customer_id int unique, #该字段一定要是唯一的
        foreign key(customer_id) references customer(id) #外键的字段一定要保证unique
        on delete cascade
        on update cascade
    );
    # 三种外键关系都是用foreign key,区别在于如何使用以及其他条件限制即可做出三种关系 

     

    总结

    """判断表关系的最简单的语法
        图书与出版社
            一本书可不可以有多个出版社  不可以!!!
            一个出版社可不可以出版多本书  可以!!!
            一对多的关系
    """
    图书与作者表
            一本书可不可以有多个作者    可以!!!
            一个作者可不可以写多本书     可以!!!
            多对多的关系
    """
    作者与作者详情
            一个作者可不可以有多个详情  不可以!!!
            一个作者详情可不可以有多个作者  不可以!!!
             要么两者是一对一
             要么两者之间没任何关系
    """

     修改表

    # mysql对大小写不敏感!!!
    语法:
    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 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
          ALTER TABLE 表名 
                              CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    复制表

    # 查询语句执行的结果也是一张表,可以看成虚拟表
    
    # 复制表结构+记录 (key不会复制: 主键、外键和索引)
    create table new_service select * from service; 
    
    # 只复制表结构
    select * from service where 1=2;        //条件为假,查不到任何记录
    
    create table new1_service select * from service where 1=2;  
    
    create table t4 like employees;

    转载于:https://www.cnblogs.com/wangnanfei/p/11383857.html

    展开全文
  • 大话数据结构-程杰

    2014-07-13 23:45:52
    你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1 队列顺序存储的不足 112 ...
  • 你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1队列顺序存储的不足 112 4.12.2...
  • 8.20MySQL(三)外键

    2019-09-24 23:35:48
    一、外键前戏 1.定义一张部门员工 2.所有数据都存放于一张表的弊端 ...将上述一张表员工和部门两张表! 4.分析表数据之间的关系:  多个用户对应一个部门,一个部门对应多个用户。禁止一个...

    一、外键前戏

    1.定义一张部门员工表

    2.把所有数据都存放于一张表的弊端

      1.表的结构不清晰

      2.浪费硬盘空间

      3.表的扩展性极差(无法忽略的缺点)

    3.上述的弊端产生原因类似于把代码全部写在一个py文件中,你应该怎么做?

      解耦合!将上述一张表拆成员工和部门两张表!

    4.分析表数据之间的关系:

      多个用户对应一个部门,一个部门对应多个用户。禁止一个用户对应多个部门这种情况是另外一张表关系

    5.如何确立表与表之间的关系

      一定要换位思考(必须两方都考虑周全之后才能得出结论)

      以员工表和部门表为例:

    先站在员工表看能否有多个员工对应一个部门
        翻译过来:
            一个部门能否有多个员工
            可以!!!(暂时只能确定员工单向多对一部门)
    再站在部门表看能否有多个部门对应一个员工
        翻译过来:
            一个员工能否属于多个部门
            不可以!!!

      结论:员工表和部门表之间仅仅是单向的多对一

      那么它们的表关系就是"一对多"

      表关系中没有多对一这一说,只有一对多

      无论是多对一还是一对多都叫"一对多"

    二、外键:foreign key

      如何让两种表有代码层面上真正的关联,就必须使用外键

    1.什么是外键?

      让表与表有硬性层面上的关系

    2.关键字:

      foreign key

    三、一对多外键建立

    1.建表

      先创建被关联表,否则会报错

    create table dep(
        id int primary key auto_increment,
        dep_name varchar(32),
        dep_desc varchar(128)
    );
    create table emp(
        id int primary key auto_increment,
        emp_name varchar(64),
        emp_gender enum('male','female','others') default 'male',
        dep_id int,
        foreign key(dep_id) references dep(id)    
    );

      再插入数据,也必须先插入被关联表的数据

    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
    ('教学部','教书育人'),
    ('技术部','技术能力有限部门');
    insert into emp(emp_name,dep_id) values('jason',1),
    ('egon',2),
    ('tank',2),
    ('kevin',3);

      外键约束:

        1.在创建表的时候,必须先创建被关联表

        2.插入数据的时候,也必须先插入被关联表的数据

    2.修改表数据

      update dep set id=200 where id = 1;  # 无法修改

      update emp set dep_id = 300 where id = 1;  # 也无法修改

      删除数据也同样不行

      外键虽然能够帮你强制建立表关系,但是也会给表之间增加数据相关的约束

    3.如何才能删除

      1.删除数据的时候,先删员工表的数据,再删部门表的数据

        delete from emp where id = 4;

        delete from dep where id = 3;

      2.级联更新:on update cascade,级联删除:on delete cascade

        更新部门后,对应员工表中的标示部门的字段同步更新

        删除部门后,对应的部门里面的员工表数据对应删除

    # 先创建被关联表
    create table dep(
        id int primary key auto_increment,
        dep_name varchar(32),
        dep_desc varchar(128)
    );
    
    create table emp(
        id int primary key auto_increment,
        emp_name varchar(64),
        emp_gender enum('male','female','others') default 'male',
        dep_id int,
        foreign key(dep_id) references dep(id) 
        on update cascade  # 级联更新
        on delete cascade  # 级联删除
    );
    
    
    # 先插入被关联表的数据
    insert into dep(dep_name,dep_desc) values('外交部','搞外交'),
    ('教学部','教书育人'),
    ('技术部','技术能力有限部门');
    
    
    insert into emp(emp_name,dep_id) values('jason',1),
    ('egon',2),
    ('tank',2),
    ('kevin',3);
    
    
    update dep set id=200 where id = 3;  # 修改被关联表的数据成功
    delete from dep where id = 2;  # 删除被关联表的数据成功

    四、多对多关系的建立

    1.图书与作者表(一定要换位思考):

      先站在图书

        多本书能否有一个作者

          一个作者能否写多本书,可以!!!

      再站在作者

        多个作者能否和写一本书

          一本书能否有多个作者,可以!!!

    如果双方都是可以,那么就是多对多

    强调:foreign key 只是用来帮你建表关系的,不是某个关系特有的方法

    2.多对多关系的建立

      必须手动创建第三张表,用来专门记录两张表之间的关系

    先建两张普通的表,不需要设置外键

    create table book(
            id int primary key auto_increment,
            title varchar(32),
            price int
        );
    
    create table author(
            id int primary key auto_increment,
            name varchar(32),
            age int
        );

    再创建第三张表,用来专门记录两张表之间的关系

    create table book2author(
            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 author(id)
            on update cascade
            on delete cascade
       );

    插入数据

    insert into book(title,price) values('西游记',199),('聊斋',299),('jason教你删别人的库,让别人跑路',1);
    
    insert into author(name,age) values('jason',18),('tank',38);
    
    insert into book2author(book_id,author_id) values(4,3);  # 报错,必须要在两张表的id范围里
    insert into book2author(book_id,author_id) values(1,1),(1,2),(2,1),(3,1),(3,2); 

    五、一对一表关系的建立

    1.一对一表关系

      1.一对一的场景:当你的表特别庞大的时候,你可以考虑拆分表

      2.联想老男孩的客户和学生(老男孩的客户与学生之间,报名之前都是客户,只有报了名的才能是学生)

        当你没有交学费之前,你是老男孩的客户

        当你交了学费之后,你就变成老男孩的学生

        是所有的客户都能变成学生吗?

    2.通常将关系字段,称之为:外键字段

      一对多的外键字段,建在多的一方

      多对多的外键字段,建在第三张表

      一对一的外键字段,建在任意一方都可以,但是推荐你建在查询频率较高的一方

    3.建立

    # 先创建被关联表
    create table authordetail(
            id int primary key auto_increment,
            phone int,
            addr char(255)
    
    );
    
    
    create table author(
        id int primary key auto_increment,
        name char(4),
        age int,
        authordetail_id int unique,
        foreign key(authordetail_id) references authordetail(id)
        on update cascade
        on delete cascade
    );

    六、判断表关系的最简单的语法

      图书与出版社

        一本书可不可以有多个出版社  不可以!!!

        一个出版社可不可以出版多本书  可以!!!

        一对多的关系

     

      图书与作者

        一本书可不可以有多个作者  可以!!!

        一个作者可不可以写多本书  可以!!!

        多对多的关系

     

      作者与作者详情

        一个作者可不可以有多个详情  不可以!!!

        一个作者详情可不可以有多个作者  不可以!!!

        要么两者是一对一

        要么两者之间没任何关系

    七、了解知识点

    1.修改表的完整语句

      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 旧字段名 新字段名 新数据类型 [完整性约束条件…];

    2.复制表

    # 查询语句执行的结果也是一张表,可以看成虚拟表

    # 复制表结构+记录 (key不会复制: 主键、外键和索引)

    create table new_service select * from service;

    # 只复制表结构

    select * from service where 1=2;        //条件为假,查不到任何记录

    create table new1_service select * from service where 1=2;

    create table t4 like employees;

    转载于:https://www.cnblogs.com/francis1/p/11384277.html

    展开全文
  • 4.11 队列的抽象数据类型 112 4.12 循环队列 113 你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是...
  • 你上了公交车发现前排有个空座位,而后排所有座位都已经坐满,你会怎么做?立马下车,并对自己说,后面没座了,我等下一辆?没这么笨的人,前面有座位,当然也是可以坐的。 4.12.1队列顺序存储的不足 112 4.12.2...
  • 有些动图,在做成电子书(比如 pdf)的时候自然就变没了,如果需要看动图的, 可以去我的公众号《力扣加加》或者我的 leetcode 题解仓库看。 epub 还是有动图的 由于是电子书,因此阅读体验可能会更好, 但是相应...
  • <div><h2>从一个需求谈起 在我之前的项目中,曾经遇到过这样一个需求,编写一个级联选择器&#...动态规划方案通常会使用一个数组来建立一张表,用于存放被分解众多子问题的解。当算法执行完毕ÿ...
  • 有何办法实现将一张表中的数据由元的单位转换为万元 常用的自定义格式 自定义格式 怎样定义格式 在工具按钮之间设置分隔线 自定义区域为每一页的标题 一个单元格内格式问题 定制单元格数字显示格式 巧用定位选条件...
  • EXCEL函数公式集

    热门讨论 2010-03-16 03:26:38
    有何办法实现将一张表中的数据由元的单位转换为万元 常用的自定义格式 自定义格式 怎样定义格式 在工具按钮之间设置分隔线 自定义区域为每一页的标题 一个单元格内格式问题 定制单元格数字显示格式 巧用定位选条件...
  • excel的使用

    2012-11-25 17:06:01
    图1(5) 多工作中输入相同的内容几个工作中同一位置填入同一数据时,可以选中一张工作,然后按住Ctrl键,再单击窗口左下角的Sheet1、Sheet2......来直接选择需要输入相同内容的多个工作,接着在其中的...
  • 疯狂的程序员

    热门讨论 2012-07-18 18:05:32
    这时候,一个炸雷响起,哗~~天花板上日光灯断成两截,一截摔碎片,另一截直接插到绝影的脚背上。绝影拔出这一截,脚背上立刻露出直径公分大的窟窿。绝影正在纳闷,这么大个洞,怎么就不见流血呢?正想着,血就...
  • 比较复杂的系统不能画在一张纸上,逐层分解的画法可以控制每一层的复杂度。 顶层:将整个系统作为一个加工,描述系统边界(输入与输出)。 中间层:表示某个加工分解为一组子加工,其中的子加工还需进一步分解。 ...
  • 21.对数据库的一张表进行操作,同时要对另一张表进行操作,如何实现? 答:将操作多个的操作放入到事务中进行处理 22.TCP/IP 建立连接的过程?(3-way shake) 答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三...
  • 同时挂在SPI总线上,因为SPI只能挂一个设备,同时还了I/O模拟的准备,把两个设备又通过跳线挂在4个IO上。 3 扩了个IIC的35个键子的键盘 用的ZLG的7290,不占用CPU,最大支持64个键子,只上了35个,其他留接口。 ...
  • 在这里仅列举个最主要的原因,一方面,随着近年来企业信息化进程的深入,企业里各种系统的数据量持续上升,这一切给数据的管理、维护和安全带来了机会和挑战,另一方面,企业间同质化竞争的加剧,也迫使企业加强...
  • 先在数据中创建名为c2c的数据库,使用Navicat for MySQL运行 c2c.sql文件创建和导入数据 将图片解压到任意一个盘,然后配置Tomcat,将图片路径引用到本地配置的图片路径下。 一、设计概要  本次设计的是一个...
  • 编译器现在托管堆上分配一块内存空间(空间大小为对象中包含的值类型变量所占空 间总和外加一个方法指针和一个SyncBlockIndex),然后ageInt拷贝到这个空间中,再返回该空间的引用地址。接下来第13行则是拆箱 ...
  • 二叉树是一颗每个节点最多有个孩子的树,分别是左孩子和右孩子。可以看出,我们在树的基础上了限制,二叉树为我们提供了每次二分的可能,也简化了树以及各种操作的实现。在使用这颗...
  • 仔细比较数据的差别,发现出现主机复位问题的数据中DSL板配置了MNT/MLT端口,但是没有DSL端口之间的半永久数据。 于是在程序中不断加打印语句,通过后台的DBWIN调试程序跟踪,最后终于定位为:每当执行到...
  • C++程序员面试宝典

    热门讨论 2013-04-01 13:36:19
    本书附带1光盘,内容为本书所有面试题的多媒体教学视频及其他学习资料。 本书中的面试题不但以实例代码的形式对答案进行了详细解析,还对问题的相关知识点进行了扩展说明。希望通过本书,读者可以成功应聘,并提升...
  • 新版Android开发教程.rar

    千次下载 热门讨论 2010-12-14 15:49:11
    也有分析认为,谷歌并不想一个简单的手机终端制造商或者软件平台开发商,而意在一统传统互联网和 移 动互联网。----------------------------------- Android 编程基础 4 Android Android Android Android 手机新...
  • 所以我们相信,XML为一种先进的数据处理方法,将使网络跨越到一个新的境界。 六. XML的严格格式 吸取HTML松散格式带来的经验教训,XML一开始就坚持实行"良好的格式"。 我们先看HTML的一些语句,这些语句在HTML中...
  • 小编的确一直都想这方面的命令个总结,这次辛苦老范给我们整理了这份实用的秘笈。  Bootcfg  bootcfg 命令启动配置和故障恢复(对于大多数计算机,即 boot.ini 文件)。  含有下列参数的 bootcfg 命令仅在...
  • 对于数据表的读操作,他可以结果转换List,Array,Set等java集合,便于程序员操作; * 2.对于数据表的写操作,也变得很简单(只需写sql语句) * @author minuy * */ public abstract class DBUtil { //...
  • 做一张Windows 98启动盘,并 将Attrib.exe文件拷入软盘,此文件在装有Windows 98的机器上的 X:WindowsCommand目录下。在BIOS的Advanced BIOS Features 中将启动顺序 调整为从A盘启动,进入DOS后,进入X:Windows...

空空如也

空空如也

1 2
收藏数 34
精华内容 13
关键字:

怎么把两张数据表做成一张