表的存储引擎

表的存储引擎:

 

  • show engines 存储引擎
  • 什么是存储引擎.存储机制
  • 表结构 存在一个文件中:硬盘上
  • 表数据 存在另一个文件中.内存中
  • 索引(目录) 为了方便查找设计的一个机制
  • 存储引擎的种类:
  • innodb 默认default 索引+数据一起存 表结构另外存 数据的持久化存储
  • 事务:一致性 n条语句的执行状态时一致的
  • 行级锁:只对涉及到修改的行加锁,利于并发的修改,但是对于一次性大量修改效率低下
  • 表级锁:一次性加一把锁就锁住了整张表,不利于并发的修改,但是加锁速度比行锁的效率高
  • 外键约束:被约束表中的数据不能随意的修改 删除 约束字段要根据被约束表来使用数据
  • myisam :索引 数据 表结构 分开存放 数据的持久化存储
  • 表级锁
  • memory:表结构 缓存
  • 数据断电消失
  • begin 开启事务
  • select id from innot where id = 1 for update;
  • update innot set id = 2 where id =1
  • commit 提交事务 解锁被锁住的数据,让他们能够被修改

 

表的约束

表的约束:

非空约束 not null
create table t1(id int not null,name char(12))
默认插入空字符串
默认值
create table t3(id int, name char(12),sex enum("male","female")default "male")
唯一约束(不能重复) unique
create table t4(id int unique,name char(12))
联合唯一约束
create table t5(family char(12),name char(12),unique(family,name));
create table t5(family char(12) not null,name char(12) not null,unique(family,name)); #约束各自不为空 且联合唯一
唯一+非空
create table t6(id int not null unique, name char(12) not null unique);
pri 是怎么产生的? 第一个被设置了非空+唯一约束会被定义成主键 primary key
主键
create table t6(id int primary key,name char(12) not null unique);
create table t5(name char(12),name char(12),not null,primary(family,name));#约束各自不为空 且联合唯一 还占用了整张表的主键
自增机制auto_increment(自动增加,not null约束)
create table t6(id int auto_increment,name char(12)) #报错
create table t6(id int unique auto_increment,name char(12))
create table t6(id int primary key auto_increment,name char(12))
create table t6(id int unique auto_increment,name char(12)) auto_increment = 1000;
delete from 表名;清空表数据但不能重置auto_increment
truncate table 表名;清空表并重置auto_increment
alter table 表名 auto_increment=n;修改表的auto_increment值
所有的操作都无法改变auto_increment的自动计数.但是我们也没有必要去改变它.

联合主键

联合主键:

create table t5(name char(12),name char(12),primary key(family,name)); 约束各自不能为空,且联合主键

外键

外键:

没有建立外键:
create table stu(id int,name char(12),class_id int);
create table class(cid int,cname char(12));
insert into stu values(1,'日魔',1),(2,'炮手',1);
insert into class values(1,'py27');
insert into class values(2,'py28');
select * from stu,class where class_id = cid
delete from stu where id =1;
delete from class where cid = 1;
外键约束:
create table class(cid int unique,cname char(12));
create table stu2(id int,name char(12),class_id int,foreign key(class_id) references class2(cid));
insert into class2 values(1,'py27');
insert into stu2 values (1,'日魔',1),(2,'炮手',1)
delete from class2 where cid = 1;
insert into class2 values(2,'py28');
update class2 set cid = 1 where cid = 2; 不能修改
级联更新
create table class3(cid int primary key,cname char(12));
create table stu3(id int,name char(12),class_id int,foreign key(class_id) references class3(cid) on update cascade)
insert into class3 values(1,'py27');
insert into stu3 values(1,'日魔',1),(2,'炮手',1);
update class3 set cid =2 ;修改了class3中的cid,stu3中相关的数据也会跟着变化,这是由于on update cascade

posted @ 2019-10-08 16:22  钺璍  阅读(236)  评论(0)    收藏  举报