Mysql:DMLDDLTCL

Posted guanghen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql:DMLDDLTCL相关的知识,希望对你有一定的参考价值。

mysql(二):DML、DDL、TCL

创建表:(create)

  • 语法格式:create table 表名(

    ​ 字段名1 数据类型1,

    ​ 字段名2 数据类型2,

    ​ );

    create table t_student(
        no bigint,
        name varchar(255),
        sex char(1),
        classno varchar(255),
        birth char(10)
        );
    
  • 关于MYSQL字段中常用数据类型:

    char()

插入数据:(insert)

  • 插入若干数据:insert into 表名(字段1,字段2...)value (值1,值2...),(),()......;

​ tips:字段1,2,...可以适时省略,但字段的数据类型不能填错。

  • 将查询出来的表插入:insert into 表名 select语句;

    表的复制:

    • 语法格式:

    ​ create table 复制后表名 as select语句;

    ​ 将查询结果当做表创建出来。

修改数据(update):

  • 语法格式:

    ​ update 表名 set 字段名1 = 值1,字段名2 = 值2... where 条件;

  • 修改表中所有记录:将where条件换为select * from 表名即可;

删除数据(delete):

  • 语法格式:

    ​ delete from 表名 where 条件;

约束:(Constraint)

  • 概念:保证表中数据合法性的限制条件,修饰的是字段。

  • 常见约束:

    1. 非空约束(not null) :约束字段不能为null。

    2. 唯一约束(unique):约束字段不能重复。

      ​ 在列后添加unique关键字,表示列级约束;

      ​ 在创建表时,声明字段时添加unique关键字,表示表级约束;

      ​ 工作中可以直接记表级约束;

    3. 主键约束(primary key/PK):约束的字段不能为null,也不能重复。

      ​ 主键分类:

      单一主键(常用,意思是用一个字段来作为主键字段)

      ​ 复合主键(多个字段联合起来添加一个主键约束。用一张表的多个字段联合起来,这样的主键叫做复合主键)

      自然主键:主键值和业务不挂钩(建议使用)

      ​ 业务主键:主键值和系统的业务挂钩,例如:游戏名字,身份证的名 字等等,此类随着业务变更会随之改变,不建议使用。

      ​ 主键自增:auto_increment,当在字段后添加primary key 和auto_increment自增关键字,系统会自动主键值++;

    4. 外键约束(foreign key/FK):

    5. 检查约束(check):Oracle有,mysql暂时不支持。

事务:

  • 相关性:和事务相关的只有DML(insert delete update)语句;因为这三个语句都是和表中数据操作相关。

  • 意义:事务的存在是为了保证数据的完整性,安全性。

  • 案例:

    ​ 转账:小王转账1000给小李,需要去银行。小王的余额-1000,小李的余额+1000;两个动作需要一起执行成功才算成功,这里需要用到事务操作。

    ​ 原理:事务将操作执行成功后,记录在操作历史中,但不会修改硬盘数据而是缓存起来,当接下来若干个语句都执行成功之后,通过提交事务操作才会修改数据。

    ​ savepoint:保存点,类似于游戏的存档点,在rollback回滚时变得更简单。

  • 事务四大疼特性:(ACID)

    1. A 原子性:事务是最小的工作单元,不可再分

    2. B 一致性:事务必须保证多条DML语句同时成功或者失败,

    3. C 隔离性:事务A与事务B具有隔离性。

          • 隔离级别:

          • Lev1:读未提交(read uncommitted):对方事务还没有提交,我们当前事务可以读取到对方未提交的数据;读 未提交存在脏读(Dirty Read)现象,表示读到了脏数据。

          • Lev2:读已提交(read committed):对方事务提交之后的数据我方可以读取到。问题是:不可重复读。

          • Lev3:可重复读(repeatale read):这种隔离级别可以重复读。(读取到的数据为备份数据,与修改后的数据完全无关)

          • Lev4:序列化读/串行化读。

            需要排队。(类似于多线程中的锁机制)

    4. D 持久性:最终数据必须持久化到硬盘文件中。

索引:

类似于目录。

  • 什么时候添加索引?

    1. 数据量庞大;
    2. 字段很少的DML操作;(因为经常修改数据,索引会随之变换和维护,甚至降低效率)
    3. 字段经常出现在where子句中。(若常出现在where后,那经常会用到条件索引,加索引值更方便)
  • tips:主键和具有unique(唯一性约束)的字段自动添加索引。

  • expain +select 语句表示查看表的执行计划(?)

  • 怎么给字段添加索引?

    ​ create index 索引名称 on 表名(字段名);

  • 怎么删除索引?

    ​ drop index 索引名称 on 表名;

  • 索引底层采用的数据结构?

    B+Tree;

  • 索引的实现原理?

    ​ 底层索引进行了排序,分区,索引会携带数据的物理地址,获取到关联地址。效率及高。

  • 索引的分类:

    1. 单一索引:给单个字段添加索引

    2. 复合索引:几个字段联合起来添加索引

    3. 主键索引:主键值自动添加索引

    4. 唯一索引:有唯一性约束的字段自动添加索引

      ​ ......

  • 索引什么时候失效?

    ​ 模糊查询的时候,第一个通配符使用的是%,这时索引是失效的。

    ​ select ename from emp where like \'%A%\';

以上是关于Mysql:DMLDDLTCL的主要内容,如果未能解决你的问题,请参考以下文章

部分代码片段

linux中怎么查看mysql数据库版本

从mysql的片段中加载ListView

连接MySQL出现错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)(代码片段

使用 json rereiver php mysql 在片段中填充列表视图

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段