sql——day03

一、insert语句一次可以插入多条记录
语法1:insert into 表名(字段名1,字段名2) values(),(),();
语法2:insert into t_user(id,name,birth,create_time) values
(1,'yi','2021-12-21',now()),
(2,'er','2011-1-21',now()),
(3,'san','2001-2-21',now());
二、快速创建表
 语法:create table emp2 as select * from emp;
原理:
      将一个查询结果当做一张表新建,
      这个可以完成的快速复制,
      表创建出来,同时表中的数据也存在了。
三、快速删除表中的数据

1. delete语句删除数据的原理:
                 表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放。
                 这种删除缺点是:删除效率比较低。
                 这种删除优点是:支持回滚,后悔了可以在恢复数据!!!!

语法:delete  from 表名; // 这种删除数据的方式比较慢(delete属于DML语句!!!)

2.(重点中的重点)truncate语句删除数据的原理:
                   这种删除效率比较高,表被一次截断,物理删除。
                   这种删除缺点是:不支持回滚。
                   这种删除优点是:快速。
语法:truncate table 表名;(这种操作属于DDL操作)

3.大表非常大,上亿条记录
   删除到时候,使用delete,也行需要执行1个小时才能删完!效率低。
   可以选中使用truncate删除表中的数据库,只需要不到1秒钟的时间就删除结束。效率很高!

四、约束(重点)
1.什么是约束?
   约束对应的英语单词:constraint
   在创建表的时候,我们可以给表中的字段加上一些约束,来保证这个表中数据的完整性、有效性!
    约束的作用就是为了保证:表中的数据有效!!!
2.约束包括哪些?
  非空约束:not null
   唯一性越是: unique
  主键约束:primary key(简称pk)
   外键约束:foreign  key (简称fk)
   检查约束:check(mysql不支持,oracle支持)

   重点学习四个约束:
         not null
         unique
         primary key
         foreign  key
3.非空约束:not null  非空约束不能为空,负责报错
创建:
   create table t_vip(
    -> id int,
    -> name varchar(255) not null);
语法: insert  into t_vip(id,name) values(3); //缺少一个那么的值,所有报错

4.唯一性约束: unique
 创建:
  create table t_vip(
     id int,
    name varchar(255) unique   //约束直接添加到列后面的,叫做列级约束。
);
语法:insert into t_vip(id,name) values(1,'zhangsan');
           insert into t_vip(id,name) values(2,'lisi');
           insert into t_vip(id,name) values(3,'huangwu');
           insert into t_vip(id,name) values(4,'huangwu');.//报错了,因为名字是唯一性的
unique中可以允许为null

(1)联合唯一性
语法:
     create table t_vip(
          id int,
          name varchar(255),
          email  varchar(255),
           unique(name,email) //约束没有添加在列的后面,这种约束被称为表级约束。
      );
   联合唯一性,unique(name,email)只有name和email重复才会报错,只有一个重复是正常运行

5.主键约束(primary key, 简称PK)(重点)
   主键约束的相关术语:
                 主键约束:就是一种约束。
                 主键字段:该字段上添加了主键约束,这样的字段叫做:主键字段
                 主键值   :主键字段中的每一个值都叫做:主键值。
     什么是主键?有啥用?
                  主键值是每一行记录的唯一标识。
                  主键值是每一行记录的身份证号!!!
      注意:任何一张表都应该有主键,没有主键,表无效!!
       
      主键的特征: not null + unique(主键值不能是null,同时也不能重复!)
    
      给一张表条件主键约束:
      create table t_vip(
           id int primary  key,
           name varchar(255) );
语法:insert into t_vip(id,name) values(1,'zhangsan');
           insert into t_vip(id,name) values(2,'lisi');
           insert into t_vip(id,name) values(2,'huangwu');  // 报错 ,因为主键不能重复(也不可以为(空)null值)

         一个字段做主键,叫做:单一主键(建议使用)
          两个字段联合起来做主键:  复合主键!!!(不建议使用)
          注意:一张表的主键约束只能添加1个。
主键值建议使用:
          int
          bigint
          char 等类型。
           不建议使用:varchar来做主键。主键值一般都是数字,一般都是定长的!

主键除了:单一主键和复合主键之外,还可以这样子进行分类:
        自然主键:主键值是一个自然数,和业务没关系。(建议使用)
        业务主键:主键值和业务紧密关联,例如银行卡账号做主键值。这就是业务主键!(不建议使用)
自动维护一个主键值 auto_increment表示自增,从1开始,以1递增
语法: create table t_vip(
                 id int primary key auto_increment,
                 name  varchar(255)
             );
 
           insert into t_vip(name) values('zhangsan');
           insert into t_vip(name) values('zhangsan');
           insert into t_vip(name) values('zhangsan');
                 ----+----------+
                   | id | name     |
                +----+----------+
                  |  1 | zhangsan |
                  |  2 | zhangsan |
                  |  3 | zhangsan |
             它的id会自动生成

6.外键约束(foreign key,简称FK)(重点)
      外键约束涉及到的相关术语:
                外键约束:一种约束
                外键字段:该字段上添加了外键约束
                外键值: 外键字段当中的每一个值。

create table t_class(
             classno  int primary key,
             classname varchar(255)
);
create table t_student(
            no  int primary key auto_increment,
            name varchar(255),
            con  int,
           foreign ket(cno)  references  t_class(classno)
);

注意:子表中的外键引用的父表中的某个字段,被引用的这个字段不一定是主键,但至少具有unique(唯一性)约束

五、存储引擎
1.存储引擎是mysql中特有的一个术语,其他数据库中没有,
   存储引擎是一个表存储/组织数据的方式。
   不同的存储引擎,表存储数据的方式不同。
2.建表时指定存储引擎,以及字符编码方式。
    mysql默认的存储引擎是:InnoDB
    mysql默认的字符编码方式是:utf8;
语法:create  table t_prod(
        id int primary key,
       name  varchar(255)
)  engine = InnoDB default charset = gbk;

3.查看存储引擎
语法:show engines \G
4.mysql常用的存储引擎介绍
 (1)myISAM存储引擎?
          它管理的表具有以下特征:
              使用三个文件表示每个表:
                     格式文件 -- 存储表结构的定义(mytable.frm)
                     数据文件 -- 存储表行的内容(mytable.MYD)
                     索引文件 -- 存储表上索引(mytable.MYI)
  
myISAM存储引擎特点:
                     可被转换为压缩、只读表来节省空间
                     这是这种存储引擎的优势!!!!

(2) InnoDB存储引擎
                         这是mysql默认的存储引擎,同时也是一个重量级的存储引擎。
                         InnoDB支持事务,支持数据库崩溃后自动恢复机制。
                         InnoDB存储引擎最主要的特点是:非常安全。
         InnoDB最大的特点就是支持事务:
                       以保证数据的安全。效率不是很高,并且也不能压缩,不能转换为只读,
                        不能很好的节省存储空间。
 (3)MEMORY存储引擎
                   使用MEMORY 存储引擎的表,其数据存储在内存中,且行的长度固定,
                   这两个特点使得 MEMORY 存储引擎非常快。
          MEMORY引擎优点:查询效率是最高的。不需要和硬盘交互。
          MEMORY引擎缺点:不安全,关机之后数据消失。因为数据和索引都是在内存当中。
六、事务(必须掌握,必须理解)
  事务:就是批量的DML语句同时成功,或者同时失败。
 1.什么是事务
      一个事务就是一个完整的业务逻辑,比如:
                   A向B转账,A的钱减少,B的钱增加。同时成功或者同时失败
2.只有DML语句才会有事务,其他 语句和事务无关!!!
     insert   (增)
     delete  (删)
     update (改)
 只有以上三个语句和事务有关系,其他都没有关系。

3.事务是怎么做到多条DML语句同时成功和同时失败到:
     InnoDB存储引擎:提供一组用来记录事务性活动的日志文件。
       事务开启:
        insert
        insert
        insert
        delete
        update
        update
        update
      事务结束!
    
      在事务的执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中。
      在事务的执行过程中,我们可以提交事务,也可以回滚事务。

    提交事务?
            清空事务性活动的日志文件,将数据全部彻底成持久化到数据库表中。
            提交事务标志着,事务的结束。并且是一种全部成功的结束。

     回滚事务?
             将之前所有的DML操作全部撤销,并且清空事务性活动的日志文件
             回滚事务标志着,事务的结束。并且是一种全部失败的结束。

4.怎么提交事务,怎么回滚事务?
     提交事务:commit;语句
     回滚事务:rollback ;语句(回滚永远都是只能回滚到上一次的提交点!)
 
      事务对应的英文单词是:transaction
 
     mysql中默认情况下是支持自动提交事务的。(自动提交)
 
      自动提交是:每执行一条DM语句,则提交一次!

 将mysql的自动提交机制关闭掉:
            先执行这个命令:start  transaction;

5.事务包括4个特性:
          A : 原子性:
                   说明事务是最小的工作单元。不可再分。
          C: 一致性:
                  所有事务要求,在同一个事务当中,所有操作必须同时成功,或者同时失败,
                  以保证数据的一致性。
          I :隔离性
                    A事务和B事务之间具有一定的隔离。
                    教室A和教室B之间有一道墙,这道墙就是隔离性。
                    A事务在操作一张表的时候,另外一个事务B也在操作这张表会那样。
          D :持久性
                   事务最终结束的一个保障。事务提交,就相当于将没有报错到硬盘上的数据
                    保存到硬盘上!
 
6.事务的隔离性:
     事务和事务之间的隔离级别有
     4个级别: 
                    读未提交: read uncommitted
                    读已提交: read  committed
                    可重复读: erpeatable read
                    序列化读/串行化: serializable

               
 

 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值