数据库-表操作

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;
存储引擎相关sql语句

 

创建表

#创建表
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 表名;

 

多表结构的创建与分析

#一对一

#一对多

#多对多

 

posted @ 2019-03-06 15:11  烧刘病  阅读(177)  评论(0编辑  收藏  举报
回到页首