数据库02

一.存储引擎

1.1什么是存储引擎

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。

1.2主要的四种存储引擎

INNODB:现默认的存储引擎,读取数据较myisam慢,但是数据存储更安全

MYISAM:mysql之前版本使用的默认存储引擎

MEMORY:内存引擎(断电/重启存储的数据会消失,数据存储再内存上)
BLACKHOLE:黑洞引擎(存入的数据会消失)

1.3引擎的特点

使用sql语句查看引擎:show engines:

创建表,对表中插入数据

ps:  q3是内存引擎,数据存储再内存中的所以不存在数据

  q4是黑洞引擎,数据写入其中就消失了,所以也没有数据

ps:重启MySQL服务后,之前使用Memory引擎存储的数据都会被清除

创建表的完整语法:
create table 表名(
    字段名1 字段类型[(宽度) 约束条件],
    字段名2 字段类型[(宽度) 约束条件],
    字段名3 字段类型[(宽度) 约束条件]);
#ps:1.最后一个字段别加逗号
     2.字段名和字段类型是必须写的,宽度和约束条件可以不写
     3.字段名不能重复

宽度:对存储的数据进行限制(再使用数据库时应该尽量减少数据库的操作)
       eg:char(1)  只能存取1个字符
        假设存取的数据为'zhang'则可能出现以下两种情况
            1.开启严格模式:Data too long for column 'name' at row 1
            2.未开启严格模式:只能存入'z'
#ps:怎么查看数据库配置中包含modle的参数
      sql语句:show varuables like '%mode%';
    设置严格模式语句:set global sql_mode ='STRICT_TRANS_TABLES'
#ps:再设置严格模式时,若sql_mode中包含别的模式时,再设置语句中需将别的模式也加上,因为这个是指语句是类似替换类型的.

 

二.数据类型

2.1整型

整数类型:TINYINT,SMALLINT,INT,BIGINT

作用:用来存储年龄,电话号码,身份证号码等

当字符类型是TINYINT时:

ps:默认的存储方式是有符号的,当存储的值超过范围时会报错

修改存储方式为无符号形式的:

alter table 表名 modify 字段名 tinyint unsigned;

ps:当原表中存在有符号的数时,貌似不能修改为无符号的形式????(严格模式下不能修改)

再不加余数条件之前,表中是可以输入为空的如下图:

 

修改限制条件使其不能输入空:

alter table 表名 modify id not null;

ps:当原表中存在有符号的数时,貌似不能修改为无符号的形式????(还是严格模式下不能修改???)

再创建表时,可以再int或者整型数据后添加一个数字,改数字表示展示的位数,如int(8),表示展示8为数字出来,若输入的数字不足8位,用空格补齐,若超过8位则展示原数字.(ps:只有整型是表示展示位数,其余的类型都是表示类型的宽度)

 

2.2浮点型

1.float:(255,30)

2.double:(255,30)

3.decimal:(65,30)

ps:括号内数字表示,第一个参数表示总的位数,第二个参数表示小数部分的位数,其中区别在于精度的不同(float < double < decimal)

2.3字符类型

1.char(8):存储数据固定长度为8位,超过会报错,没超过用空格填充,存储速度较varchar慢,读取较varchar快,但是存储会浪费空间

2.varchar(8):存储的数据是变长的,8个以内给什么存什么,8个以外报错,再存取时会给数据加上一个固定字节的报头,以便去数据时知道所取得数据长度,不至于造成数据得混乱

ps:由于mysql再取出数据时会对取出得数据进行去空处理,所以读取出的长度就是所存入得.

限制MySQL再取出数据时不去空:

2.4日期类型

 1.data:年月日

2.time:时分秒

3.datatime:年月日时分秒

4.year:年

2.5枚举和集合类型

1.enum(枚举):多选一,类似注册时让用户选择性别男或女:

2.set(集合):多选多或者一,注册时爱好的选择,可以是多个可以是单个的

三.约束条件

 1.not null:不能为空

2.default:默认值

 

3.primary key:主键

 ps:只从约束来说primary key=unique + not null

ps:除了约束之外,主键还是INNODB引擎组织数据的一句,提升查询效率(主键就类似于书的目录)

 INNODB引擎在创建一个表时有且只有一个主键:

  当创建表时没有指定主键:

    1.会将非空且唯一的字段当作主键(从开始依次往下寻找,第一个做为主键)

    2.若没有非空且唯一的字段,INNODB会自动产生一个主键,但是该主键字段在查询的时候是无法使用的,这就意味着查询速度的下降

    3.一般一张表中都会有一个id字段,通常都是将id字段当作主键

联合主键(实质上还是一个主键)

4.unique:唯一

 1.单列唯一

2.联合唯一

5.auto_increment:自动递增

 

ps:当用delete删除表中数据后,id依旧从之前的位置开始递增,不会从1开始(这是好的,因为这样可以知道在这之中有多少数据是被自己丢弃的)

所以,delete from 表名不是用来删除表数据的,而是删除表中某个特定的数据如:

delete from a2 where id=3;

如果想要清除表数据,且主键的排序从1开始可以使用truncate

truncate 表名;

 

posted @ 2019-08-19 19:22  z929虫子  阅读(156)  评论(0编辑  收藏  举报