• MySQL入门教程


    DML和DDL补充

    insert插入多条语句

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

    快速创建表

    将查询的结果当作成新的表

    create table xx as select * from emp;
    

    把查询结果插入到

    insert into xx select * from xxx
    

    快速删除表中的数据,不可恢复!

    truncate table xxx # DDL
    

    删除表

    drop table xxx
    

    DDL 不讲,因为不常用,create,drop,alter

    约束

    • 非空约束 not null
    • 唯一性约束 unique
    • 主键约束 primary key
    • 外键约束 foreign key
    1. create table t_vip(
    2. id int unique,
    3. name varchar(255) not null
    4. )

    null不算unique

    两个字段联系起来具有唯一性

    1. create table t_vip(
    2. id int,
    3. name varchar(255),
    4. email varchar(255),
    5. unique(name, email) # 表集约束
    6. )

    not null只有列级约束,没有表级约束

    如果一个字段被unique和not null 同时修饰,那么就自动成为主键(Oracle不是)

    主键约束

    • 主键约束
    • 主键字段
    • 主键值

    任何一张表都应该有主键。

    主键特征:不能空,不能重复

    1. drop table if exists t_vip;
    2. create table t_vip(
    3. id int primary key,
    4. name varchar(255)
    5. )

    单一主键和复合之间,建议不使用复合主键

    一张表主键约束只能添加一个

    主键值建议使用 int,bigint,char,一般都是定长的。

    自然主键和业务主键。自然主键是一个int值,与业务没关系。业务主键是业务中的一个字段。建议使用自然主键,不要和业务挂钩。

    自增

    1. create table xxx (
    2. int id primary key auto_increment,
    3. name varchar(255)
    4. )

    外键约束

    foreign key

    1. create table t_class(
    2. classno int primary key,
    3. classname varchar(255)
    4. )
    5. create table t_student(
    6. no int primary key,
    7. name varchar(255),
    8. cno int,
    9. foreign key(cno) references t_class(classno)
    10. )

    外键值可以为null。外键不一定是父表的主键,但是一定要有unique约定

    存储引擎

    • MyISAM

      格式文件

      数据文件

      索引文件

    • InnoDB

    • Memory

    添加了unique或者主键的字段,会自动创建索引

    事务

    事务是一个完整的业务逻辑。

    和事务有关的是DML语句,update delete insert

    提交事务:commit

    回滚事务:callback

    mysql默认自动提交,每次执行一个DML语句就提交一次!

    事务特性

    • A 原子性
    • C 同时成功或者同时失败
    • I A和B之间互不影响
    • D 事务结束后,保证数据已经保存了

    隔离级别

    两个事务A和B

    • 读未提交:A能读到B还没有提交的数据(脏读)
    • 读已提交:A只能读到B已经提交的数据(不可重复读)
    • 可重复读:A只能读到A开始时候的数据(幻读)
    • 串行化

    索引

    可以在单个字段,也可以在多个字段上添加。为了缩小扫描范围。

    什么情况加索引

    1. 数据量大
    2. 某个字段经常出现在where后面(经常被扫描
    3. 该字段很少进行DML操作
    1. create index emp_ename_index on emp(ename);
    2. drop index emp_ename_index on emp(ename);

    索引失效的情况

    • 模糊匹配的时候%开头
    • or两端有一个没有索引
    • 左匹配法
    • where中使用了函数
    • 发生了类型转换

    索引分类

    • 单一索引
    • 复合索引
    • 主键索引
    • 唯一性索引
    • 聚簇索引
    • 非聚簇索引

    视图

    1. create view dept2_view as select * from dept;
    2. drop view dept2_view;

    对视图对象的增删改查会导致原表被修改

    好了, 以上是本文所有内容,希望对大家有所帮助,也希望大家对码农之家多多支持,你们的支持是我创作的动力!祝大家生活愉快!   

  • 相关阅读:
    16.左侧导航菜单制作
    Power Automate-创建审批流
    11.ROS编程学习:参数管理机制python实现
    25、四大函数式接口(消费型接口(Consumer)和供给型接口(Supplier))
    TensorBoard——Pytorch版使用(附带案例演示)
    Redis 源码简洁剖析 12 - 一条命令的处理过程
    Fabric.js 复制粘贴元素
    线程池核心参数
    [论文笔记]SiameseNet
    SpringBoot自带序列化工具Jackson如何做到序列化忽略某个字段,反序列化忽略某个字段???
  • 原文地址:https://blog.csdn.net/wuxiaopengnihao1/article/details/126713373