参考学习:067-表的创建及数据类型_哔哩哔哩_bilibili

本文仅用于强化学习记忆,如果需要系统学习,点击链接进入认真学习。

  • 表的创建
    •   建表的格式(DDL语句,DDL包括create drop alter):

        create table 表名(字段名1  数据类型,字段名2  数据类型,字段名3  数据类型...);

        create table 表名(

          字段名1  数据类型,

          字段名2  数据类型,

          字段名3  数据类型

        );

    •   mysql中的数据类型:

        varchar(最长255)

          可变长度的字符串

          比较智能,节省空间

          会根据实际需要的数据长度动态分配空间

          优点:节省空间

          缺点:需要动态分配空间,速度慢

        char(最长255)

          定长字符串

          不管实际长度是多少,分配固定的长度取存储数据。

          使用不恰当的时候可能会导致空间的浪费

          优点:不需要动态分配空间速度快

          缺点:使用不当会浪费空间

        int(最长11位)

          数字中的整数型 int

        bigint

          数字中的长整形 long

        float

          单精度浮点型

        double 

          双精度浮点型

        date

          短日期

        datetime

          长日期

        clob

           字符大对象

            最多可以存储4G的字符串

            比如存一篇文章,简介说明之类的

          超过255字符的都要采用CLOB字符大对象来存储

        blob

            二进制大对象

            专门用来存储图片声音视频之类的等流媒体数据

            往BLOB类型的字段上插入数据的时候,例如插入一个图片,视频等,你需要使用IO流才行。

创建一个学生表:

 删除一个表(使用if exists语句可以避免出错)

 插入数据insert(DML)

语法格式:

  insert   into  表名(字段名1,字段名2,字段名3.....)  values(值1,值2,值3....);

  注意:字段名和值要一一对应。也就是数量要对应,数据类型要对应。

  eg:

   注意:insert语句但凡执行成功了,必定多一条记录

  insert 中数据要插入的字段名可以省,但是省了就表明你是全部数据都要插入,所以你给值得时候要给出所有得值,而且要对应表得顺序:

 insert插入日期:

  数字格式化:format(数字,'格式')

  eg:使用美元符号得作用好像是去掉小数,这种使用format 函数就得到了千分位。

   str_to_date:将字符串转位日期函数:

     mysql中日期格式:

      %Y   表示年

      %m  表示月

      %d   表示日

      %h  表示时

      %i   表示分

      %s   表示秒
    str_to_date函数可以将字符串转换为date类型数据,通常使用在insert中,因为插入的时候需要一个日期类型的数据,需要通过该函数将字符串转为date,但是你提供的字符串是‘年-月-日’这种格式就不需要进行转换,mysql会自动转换,不用显示调用。

    date_format:将date类型转换为具有一定格式得varchar字符串类型

      date_format(日期类型数据,‘日期格式’)

      这个函数通常使用在查询方面,设置展现的日期格式

 

    注意数据库中有一条命名规范:

    所有标识符都是全部小写,单词和单词之间下划线连接

date和datetime两个类型的区别:

  date是短日期:只包括年月日信息

  datetime是长日期:包括年月日时分秒信息

  短日期默认格式:  %Y-%m-%d

  长日期默认格式:  %Y-%m-%d %h:%i:%s

       在mysql中可以使用now()函数获取当前系统时间

 

 修改update(DML)

    语法格式:
      update 表名 set  字段名1=值1,字段名2=值2,字段名3=值3...   where 条件;

      注意:没有条件限定,会导致所有数据更新,下面就是忘记加条件了

 删除数据delete(DML)

  语法格式:

    delete from 表名 where 条件;

  注意:没有条件,整张表内容会被删除

 一次性插入多条记录:格式

insert into 表名(字段1,字段2,字段3...)   values(值1,值2,值3...),(),();

insert

  into

    t_user(id,name,birth,create_time)

  values(1,'zs','1980-11-10',now()),

    (2,'ls','1980-11-10',now()),

    (3,'wangwu','1980-11-10',now());

 快速创建表

  语法:   create table 新表名 as select * from 旧表名;

   相当于复制表,其中的数据也复制过来,当然你也可以选择性复制,把*换成你所需要的字段名就行,还有换条件,其实后面的那个select语句就是相当于你在查询一张你所需要的表,查出来之后把这个查询的表复制到新表中

快速删除表数据:

  delete语句删除数据的原理:(DML操作)

    表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放

    这种删除缺点是:删除效率比较低。

    这种删除优点是:支持回滚,后悔了可以再恢复数据。  

     用法:delete from 表名 + [where(条件选择)]

   truncate语句删除数据的原理

      这种删除效率比较高,表被一次截断,物理删除。

      这种删除缺点:不支持回滚。

      这种删除优点:快速。

      用法 truncate table 表名;(DDL操作)

快速删除表(彻底删除):(DDL)

  drop table 表名;

对表结构的增删改:(DDL),不重点进行学习

  alter

约束:

  约束对应的英语单词:constraint

    在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性,有效性。

    约束的作用就是为了保证:表中的数据有效

  约束包括:
    非空约束:not null

    唯一性约束:unique

    主键约束:primary key  (简称PK)

    外键约束  foreign key  (简称FK)

    检查约束  check   (mysql不支持,oracle支持)

    重点学习前四个约束:

    not null

    unique

    primary key

    foreign key

非空约束:not null

  非空约束not null 约束的字段不能为null。

    为null会报错

 唯一性约束:unique

    唯一性约束unique约束的字段不能重复,但是可以为NULL。

     再次出现ww这个名字插入数据就会报错

     新需求:name和Email两个字段联合起来具有唯一性,创建格式如下,这种联合约束不是添加在字段后面,被称为表级约束

     同时非空约束和唯一性约束可以对一个字段进行叠加约束,但是这种叠加会让表默认为该字段为主键(Oracle中不一样)

 主键约束(primary key):简称PK

    任何一张表都应该有主键,没有主键表无效

    主键的特征:not null  + unique  (主键值不能是NULL,同时也不能重复)

    一个字段做主键,进行列级约束,叫单一主键;同时也可以使用表级约束,在创建表末尾的时候进行主键的添加,可以添加多个字段进行复合,叫做复合主键

    同时一张表主键约束只能有一个。

      主键除了单一主键和复合主键还可以如下分类:

        自然主键:主键是一个自然数,和业务没有关系。
        业务主键:业务和主键紧密关联,例如拿银行卡号做主键,这就是业务主键。

        在实际开发中自然主键使用较多,因为主键只需要不重复就行,不需要有意义

        在mysql中,有一种机制帮助我们自动维护主键,在列级约束使用主键的时候,在后面添加 auto_increment关键字,也就是自增,从1开始以1自增。

 

外键约束(foreign key,简称FK):这个玩意不太好解释,直接一点就是说使用外键减少数据冗余,浪费空间,把重复又长的数据起个编号代替,这个编号代替这个数据去使用,也就是看见这个编号就相当于是那个长数据。

      格式:在创建表的时候,创建外键,使用表级约束进行创建,在字段全部创建完后,在后续使用foreign key(编号字段) references 关联表(相同编号数据字段)

       子表引用父表的某个字段,父表被引用的字段不一定是主键,但一定具有唯一性(unique)约束,同时外键可以为NULL。