数据库表的修改和存储引擎以及表与表之间的关系
表的修改
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));
浙公网安备 33010602011771号