Mysql的存储引擎
#存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存中),这些技术中的每一种技术 都使用不同的存储机制,索引技巧,锁定水平并凭最终提供广泛的不同的功能和能力。通过 选择不同的技术,能够获得额外的速度或者功能,从而改善你的应用的整体功能。 这些不同的技术以及配套的相关功能在mysql中被称作存储引擎(亦称作表类型) #mysql5.6版本下的搜索引擎: Innodb:支持事物/行级锁/外键 myisam:表级锁 memory:内存存储引擎,读取速度快,但是不能持久化存储,重启mysql会失效 blackhole:所有的数据都可以写入,但不会真的记录在表中,
主从复制中的数据传输 事物是什么? 把执行n句sql语句看成一个完整的事件,要么一起成功,要么失败 行级锁:能够支持并发的修改数据的操作,但是修改的行数非常多时,效率会受到影响 表级锁:不支持并发的修改同一张表,但是不需要加很多的细粒锁来浪费时间 外键:在本表中有一个字段关联外表的另一个表的字段 缓存的作用: 存储一些对效率要求比较快的 但是丢失不要紧的数据。
Innodb:用于事物处理程序,支持外键和行级锁。
数据操作除了插入和查询之外,还包括很多更新和删除操作。
Myisam:用于读操作和插入操作为主,含有很少的更新和删除操作,对于事物的完整性,并发行要求不高。
Memory:将所有的数据保存在内存中,能够快速的定位记录和其他类似数据的环境下,提供极快的访问。
#查看当前Mysql的默认存储引擎 show variables like 'default_storage_engine'; #查看当前Mysql支持的存储引擎 show engines G;
创建表
#创建表 create table 表名( 字段1 数据类型 约束条件, 字段2 数据类型 约束条件, 字段3 数据类型 约束条件 );
mysql支持的数据类型
Mysql支持的数据类型: 数值类型: 整型: int#后面制定字符长度没什么用,写的是多长显示的还是多长, #如果超过最大长度,则存2 147 483 647 浮点型: float(m,n)#表示该小数一共只能存m位数,小数点后n位小数 #插入数据时注意数据不准且 double decimal(65,30)#稍微准点,因位存取的是字符串 日期类型: now()#表示当前时间 date:日期 time:时间 datetime:日期时间,可以为Null timestamp:#1970-01-01 00:00:00/2038-01-19 11:14:07,不为null,默认插入null显示当前时间 #超出时间一律显示000000000000 字符串类型: char:#定长(0-255)存储相对浪费空间,存取效率线相对快 varchr:#变长(0-65535)相对节省空间,存取效率相对慢 #char 不足设置的字符长度在'a'后面补0'a0000' #varchar不足在字符前面设置一个字符的长度 ENUM和SET类型: ENUM:#单选 SET:#多选+去重
msyql表的完整性约束
mysql表的完整性约束 not null:#非空约束 #create table t10 (id1 int not null,id2 int not null default 10); #创建一个id1 非空, id2非空 默认值为10的表 #mysql> insert into t10 (id1) values(11),(12);#使用某个字段记得带括号 unique:#唯一约束 #对于NUll不生效,仍然可以重复插入NULL #not null + unique==》主键 #如果一个表多个字段设置了not null unique,那么只有第一个字段设置成了PRI,其他的都是UNI #联合唯一:就是一个表不能重复1,1 create table t14 (id int not null,name char(12) not null,ip char(15) not null,port char(4) not null, unique(ip,port)); mysql> desc t14; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | char(12) | NO | | NULL | | | ip | char(15) | NO | PRI | NULL | | | port | char(4) | NO | PRI | NULL | | +-------+----------+------+-----+---------+-------+ 设置了一组主键。 primary key:#主键 #主键:必须唯一,必须非空 单字段: 多字段: #auto_increment 必须是一个键 #delete时在insert是从保存的值开始增加 #必须用truncate清除 foreign key:#外键 两个不同的事物存在关联,外键把这两个事物关联起来
外键关联的字段必须是唯一的
主表对应多个外键
create table author2book( id int not null unique auto_increment, author_id int not null, book_id int not null, constraint fk_author foreign key(author_id) references author(id) on delete cascade on update cascade, constraint fk_book foreign key(book_id) references book(id) on delete cascade on update cascade, primary key(author_id,book_id) );
表结构的修改
1. 修改表名 ALTER TABLE 表名 RENAME 新表名; 2. 增加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…], ADD 字段名 数据类型 [完整性约束条件…]; 3. 删除字段 ALTER TABLE 表名 DROP 字段名; 4. 修改字段 ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…]; ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…]; 5.修改字段排列顺序/在增加的时候指定字段位置 ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名; ALTER TABLE 表名 CHANGE 字段名 旧字段名 新字段名 新数据类型 [完整性约束条件…] FIRST; ALTER TABLE 表名 MODIFY 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
删除表
drop table 表名;
多表结构的创建与分析
#一对一 #一对多 #多对多