python学习的第43天数据类型、索引、insert

一、数据类型作用

数据之所以分类,是因为生活中的数据就存在不同类型,使用相应的类型可以更 加准确的描述事物

1.描述数据更加准确2.节省内存空间

二、数据类型:

1、整型类型:

默认有符号的
设置为无符号
1.create table t2(age tinyint unsigned);
2.建表后用alter修改

重点区分:

 对于整数类型而言长度不是数据所占的字节数 是显示数据时的宽度(字符数)
默认情况下 存储的数值的十进制位数 小于所设置的显示宽度时 不会填充 没有任何效果
加上zerofill 指定当存储的数值的十进制位数 小于所设置的显示宽度时 用0来填充
当数据的十进制位长度 大于显示宽度 可以正常显示
主要记住 整型后面的长度的含义 有字符是不同的

    tinyint            

2 smallint 3 mediumint 4
int ***** 4 bigint 8

总结:除了存储范围没啥区别,都是整型,默认有符号,对于显示宽度,原理是相同的,

长度参数如果不知道会有默认值

2、严格模式

什么是严格模式 对插入的数据严格要求 不再范围内直接报错 例如往tinyint中插入大于255的值将报错
什么是非严格模式 不 对插入的数据严格要求 不再范围内也可以保存 保存的当前类型最大支持的值
5.6默认是非严格模式
5.7以后默认严格模式

    查看SQL模式
        select @@sql_mode;
        show variables like "sql_mode";

    修改SQL模式
        set @@sql_mode = "";
    正常情况不需要改

3、浮点型

        float   4字节
        double  8字节
        decimal 不固定
        create table t9(num float(m,d))
        m 表示总长度  d 表示小数部分的长度
        长度表示不是数据存储范围 而是字符长度
        10.12 总长为4  小数部分为2

        各个类型的最大长度
        float (255,30) *****
        double (255,30)
        decimal (65,30)


区别:
float与double的精度不同 都是不准确的小数
decimal 准确的小数 不会丢失精度

具体使用哪种类型得根据使用场景判断
float满足大部分使用场景
decimal适合银行系统 科学研究等

括号中m和d的值 可以限制数据存储范围 与整型不同
重点:记住m和d的含义

4、字符串类型

常用两种char 定长字符串、charvarchar 可变长度字符串
注意字符串中 长度指定的是数据的字符长度 与字节没关系

create table t13(c1 char,c2 varchar(10));
        在创建时 varchar必须指定长度  char有默认值

        不同点:
            a char(3) b char(3)
            A  |B   |
            char类型在取数据时 就根据长度来获取 不关心真实数据长度
            无论的数据有多长 占用的空间是固定的 造成了一定空间浪费

            a varchar(30) b varchar(30)
            (1)A(1)B
            varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据  关心真实数据长度
            先存储长度需要一个字节 再存储真实数据  不会浪费空间
            但是 由于需要计算数据的长度 所以存取速度会比定长慢

        相同点:
            括号中的数字 都是表示存储最大字符长度

        char使用频率更高

mysql会在存储数据时自动将数据末尾的空格去掉
如果必须要存空格 需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据


由于自动去除空格这个机制 在使用等于符号 和like时有区别
select *from t1 where name = "yh "; 会自动去除空格
select *from t1 where name like "yh  "; 不会自动去除空格
like 用于模糊匹配 使用%表示0或任意个任意字符 使用_表示一个任意字符

5、日期和时间

        year
        time
        date
        datetime  *****
        timestamp *****

timestamp特点是:可以给null 自动输入当前时间 当这条记录被修改了会自动更新当前时间

6、

枚举:

enum 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个 ("男的","女的") 多选一

集合:
set 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个或多个 ("男的","女的") 多选多

insert into ti values(1,'playganme,eat,sleep')

共同点:数据都是字符串类型

7、约束

(1)什么是约束:为了防止在数据表中插入错误的数据,在MySQL中,定义了⼀些维护数据库完整性的 规则,这个规则就是表的约束。通过这些约束我们可以保证数据的正确性。

(2)主键约束:当我们的数据库中保存了成千上万条数据时,如何能找到你需要的那条数据呢? MySQL提供的主键约束即可帮助我们快速的查询到我们想要的数据,当然这个特性 任何一个数据库都提供。 主键是唯一标识一条记录的,可以把它比喻为身份证号,尽管全世界有那么多人, 但只要知道了身份证号就可以很快的查找一个人的信息。

 

(3)非空约束

非空约束所对应的列在插入数据时不允许为空,也就是必须为该字段赋值, MySQL中使⽤NOT NULL来表时非空约束其语法为:

CREATE TABLE money(time DATATIME,money int NOT NULL);

在money表中存放钱的操作记录,五论是增加减少都有金额,如果没有金额那么这条数据 没有任何意义,这个时候我们就可以使非空来进行约束。

(4)唯一约束

唯一约束用于保证数据表中字段的唯一性,即表中字段不可以出现重复的值, 唯一约束通过UNIQUE来指定,其语法格式为:

CREATE TABLE person(id int UNIQUE,age INT);

在上述表中id就是一个唯一的字段,它的值不允许出现重复的。

(5)默认值约束

在一些应用场景下,我们会希望对每一条数据中的某个字段赋予一个默认值, 例如:在⼀些游戏中,每个账号默认会赠送给用户一定数量的金币,此时金币 这个数据就可以使用默认值约束了,MySQL中使用DEFALUT 为字段指定默认值 其语格式为:

CREATE TABLE user(account CHAR(20),password CHAR(6),money INT DEFALUT 1000);

当在user表中添加一条记录并且没有给money字段赋值时money的值就是默认的1000。

(6)外键约束:略

(7)自动增长

主键具有唯一性,通常是一个整型数据,我们在添加数据时,需要手动指定主 键的值,一旦插入了已经存在的值会引发主键冲突错误,这时我们就需要花 时间去获取一个正确的主键值,这是非常低效的。

为此 MySQL提供了手动增长约束。 作用: 手动为这一列赋值,在每一次添加新的数据时该值都会自增,默认从1开 始。

注意: 该约束只能创建在带有索引的整型字段上

 和主键联用PRYMARY KEY [auto_incremengt]

三、索引

索引:用于加速查询
InnoDB 中 索引是树形结构
为了提高查询效率 InnoDB为找一个不为空 且唯一的字段作为主键
如果表中不存在这样的字段 会自动帮你建一个隐藏主键字段 但是无法提升查询效率

只要是使用innoDB 就应该为每个表指定一个非空 且唯一的字段
InnoDB阻止数据时 首先使用主键 如果没有主键 找一个非空且唯一 如果也没有 建一个隐藏字段

四、insert

insert into 表名 values(值1,值n,....)
要求值得顺序 个数 必须与表字段完全对应
另一种写法
insert into 表名(字段名1,字段名n,....) values(值1,值n,....)
可以选择性得插入某些字段 要求值得顺序 必须与表名后面声明得字段一致

 五、储存引擎

InnoDB支持事物、行级锁、外键

BLACKHOLE     写进去就没了

MEMORY        存到内存中  断电易失

MYISAM  不支持事物,支持存储结构体比如point 、x坐标、y坐标

原文地址:https://www.cnblogs.com/ye-hui/p/9991594.html