数据库表的修改和存储引擎以及表与表之间的关系

表的修改

create table 表名;  # 创建表
drop table 表名;  # 删除表
desc 表名;  # 查看表结构

修改表名
alter table 表名 rname 新表名;

修改编码
alter table 表名 charset 编码;

修改自增的位置
alter table 表名 auto_increment 自增的位置;

添加字段
alter table 表名 add 字段名 类型(长度) 约束;

删除字段
alter table 表名 drop 字段名;

修改字段
alter table 表名 change 字段名 新名字 类型(长度) 约束;

修改字段约束
alter table 表名 modify 字段名 新类型(新长度)约束;

修改字段放的位置
alter table 表名 change id id类型(长度)约束 first;
alter table 表名 change id id类型(长度)约束 after age;
alter table 表名 add 字段名 类型(长度) 约束 after age;

create table t(id int unique,name char(10) not null);
去掉null约束:
    alter table t modify name char(10) null;
添加null约束:
    alter table t modify name char(10) not null;
去掉unique约束:
    alter table t drop index id;
添加unique约束:
    alter table t modify id int unique;
    
如果发现主键设置错了,应该是id是主键,但如今表里已经有好多数据了,不能删除表再重建了,仅仅能在这基础上改动表结构。
先删除主键:
    alter table table_test drop primary key;
然后再增加主键:
    alter table table_test add primary key(id);
注:在增加主键之前,必须先把反复的id删除掉。

查看引擎

  • show engines;

查看表结构,建表语句

  • show create table books;

什么存储引擎(存储方式、存储机制)

  • 百度 搜索引擎
  • 搜狗 搜索引擎

表结构--存在一个文件中:硬盘

表数据--存在另一个文件中、内存中

索引(目录)为了方便查找设计的一个机制

存储引擎的种类:

  • innodb:索引+数据 表结构   数据的持久化存储
    	事务:一致性 n条语句的执行状态是一致的
    		begin;  开启事务
    		select id from innot where id = 1 for update;
    		update innot set id = 2 where id = 1;
    		commit; # 提交事务 解锁被锁住的数据,让他们能够被修改
         行级锁:只对涉及到修改的行加锁,利于并发的修改,但是对于一次性修改大量数据效率低
         表锁:一次性加一把锁就锁住了整张表,不利于并发的修改,但是加锁速度比行级锁效率高
         外键:被约束表中的数据不能随意的修改、删除,约束的字段要根据被约束的表来使
    myisam:索引 数据 表结构   数据的持久化存储
    	表级锁
    memory:表结构
    	数据断电消失
    

表与表之间的关系

  • 分析步骤:
    • 1.先站在左表的角度去找:是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key右表的一个字段(通常是id)
    • 2.再站在右表的角度去找:是否右表的多条记录可以对应左表的一条记录,如果是,则证明右表的一个字段foreign key左表的一个字段(通常是id)

多对多

  • 如果步骤1和步骤2同时成立,则证明这两张表是一个双向的多对一,即多对多,需要定义一个这两张表的关系表来专门存放二者的关系

  • 多对多关系 产生第三张表

    create table class(id int primary key, cname char(12));
    create table teacher(id int primary key, tname char(12));
    create table teach_class(id int,cid int, tid int,
                            foreign key(cid) references class(id),
                            foreign key(tid) references teacher(id)
                            );
    
    

多对一

  • 如果只有步骤1成立,则左表多对一右表

  • 如果只有步骤2成立,则右表多对一左表

  • 一对多 多的成为外键(最常用的)

    create table class(id int primary key, cname char(12));
    create table student(id int primary key, cname char(12), cid int,
                        foreign key(cid) references class(id));
    
    

一对一

  • r如果1和2都不成立,而是左表的一条记录唯一对应右表的一条记录,反之亦然

  • 这种情况很简单,就是在左表foreign key右表的基础上,将左表的外键字段设置成unique即可

    create table guest(id int primary key, gname char(12));
    create table student(id int primary key, sname char(12), gid int unique, 
                        foreign key(gid) references guest(id));
    

posted on 2020-03-07 22:26  we我们  阅读(250)  评论(0)    收藏  举报