首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL基础及原理

详见: SQL语句执行顺序 数据去重 SELECT DISTINCT 字段1 FROM 表名 将字段值重复的数据合并为一条。 常用于查询单条数据。 空值null参与运算 空值null !...WITH ROLLUP关键字:用于在结果集末尾追加一条记录,显示查询的记录总数,即统计记录数量 语法格式:SELECT 字段 FROM 表 GROUP BY 分组字段 WITH ROLLUP; 注意:...FROM 表; 注意: 查询的字段和添加的字段一一对应, 添加的字段长度大于或等于查询的字段长度,否则可能添加不成功。...非空约束只能用于列级约束,不能用于表级约束。(只能约束单个字段,不能约束字段组合) 一个表可以有很多非空列。 空字符串不等于NULL,0不等于NULL。...增强的MySQL复制 MySQL 8复制支持对 JSON文档 进行部分更新的 二进制日志记录 ,该记录 使用紧凑 的二进制格式 ,从而节省记录完整JSON文档的空间。

3.9K20

【MySQL】MySQL知识总结

默认情况下,字段propName的值从1开始增加,每增加一条记录,记录中该字段的值就会在前一条记录(或已存在的最大值(包括曾经存在的))的基础上加1。...在MySQL中可以通过UPDATE语句来实现更新数据记录,该SQL语句可以通过如下几种方式使用: 更新特定数据记录、更新所有数据记录、更新JSON结构的数据记录。...同样的,使用NOT关键字可以查询除了这个模糊之外的数据。 在对应查询字段前加上!是同样的效果。...---- 注意: 如果存在一条记录字段的值为空值(NULL),那么按升序排序时,含空值的记录将最先显示,可以理解为空值是该字段的最小值;按降序排列时,字段为空值的记录将最后显示。...以及OLD(更新前)同时使用。

7.3K52
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java面试手册:数据库 ④

    例如:西安北站所属办公室----->北站发一篇公告,数据库向西安北站添加一条记录--->同时向办公室数据库中添加同样的记录。...这是执行了两条SQL语句 如果定义一个触发器(向西安北站添加一条记录的时候,同时添加同样的记录到办公室) 这样执行一条SQL语句。...与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。...计算字段 拼接:sqlserver用“+”,Oracle用“||”,MySQL用“concat()” 出去重复记录:distinct 一个列可能有多个重复的值,如果只想要不同的值,那么久用distinct...like "%我" 查询字段长度为 n(即字符的个数,中英文一样) 的数据:用下划线条数表示长度n的数。

    1.3K30

    绝对必备:MySQL数据库开发的完整规范指南

    三、表结构规范 除了特殊的日志表,每个表均要求有主键,尽量不使用字符串列做主键,主键字段或组合字段必须满足非空属性和唯一性要求。 主键字段不超过3个。 表之间的关联查询使用主键作为关联字段。...索引选择数据类型较短的字段。 合理创建联合索引,联合索引(a,b,c) 等于 (a) 、(a,b) 、(a,b,c)三个索引,索引中的字段数不超过5个。 新建的唯一索引不能和主键重复。...单张表的索引数量控制在5个以内。 使用前缀索引长度不超过8个字符。...多表JOIN的字段,区分度最大的字段放在前面 IN条件里的数据数量要尽量少,超过200个用EXIST代替IN 禁止单条语句同时更新多个表。 杜绝大事务,事务要尽量简单,整个事务的时间长度不要太长。...;不适用于存储函数和触发器;也不适用于在存储函数或者触发器里面调用含有预处理语句的存储过程。

    32510

    SQL 与 MySQL 基础

    可以处理拥有上千万条记录的大型数据库。 MySQL 使用标准的 SQL 数据语言形式。 MySQL 可以运行于多个系统上,并且支持多种语言。...例如: 在 MySQL 中给 Course 表增加一列,字段名为 Ctype(课程类型),类型为 CHAR,长度为10,允许为空值: ALTER TABLE Course ADD Ctype CHAR...在 MySQL 中,外连接查询用于联合多个表格进行查询,外连接查询有以下三种方式: INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录,即返回两个表满足条件的交集部分。...注意: 若视图是由两个以上基本表导出的,则此视图不允许更新。 若视图的字段来自字段表达式或常数,则不允许对此视图执行 INSERT 和 UPDATE 操作,但允许执行 DELETE 操作。...若视图的字段来自集函数,则此视图不允许更新。 若视图定义中含有 GROUP BY 子句,则此视图不允许更新。 若视图定义中含有 DISTINCT 短语,则此视图不允许更新。

    1.9K20

    ​第十击 | 数据库理论20题

    它比 CHAR 更节省空间,因为它仅使用必要的空间。VARCHAR 需要 1 或 2 个额外字节记录字符串长度,如果列的最大长度不大于 255 字节则只需要 1 字节。...适用场景:字符串列的最大长度比平均长度大很多、列的更新很少、使用了 UTF8 这种复杂字符集,每个字符都使用不同的字节数存储。...6 SQL 约束有哪几种 NOT NULL: 用于控制字段的内容一定不能为空(NULL)。 UNIQUE: 控件字段内容不能重复,一个表允许有多个 Unique 约束。...可能存在的问题:(1)数据冗余:重复保存学院信息 (2)更新异常:更新学院信息时,可能需要更新多条记录,不然会出现数据不一致的情况。...简单理解为:你执行一条sql语句,这条sql语句的执行会自动去触发执行其他的sql语句。 触发器作用 可在写入数据表前,强制检验或转换数据。 触发器发生错误时,异动的结果会被撤销。

    59930

    数据库MySQL详解

    允许长度0~167772150字节 LONGBLOB 允许长度0~4294967295字节 TINYTEXT 允许长度0~255字节(0 ~ 2^8 - 1) TEXT 允许长度0~65535字节...需要注意的是:外键约束的定义是写在子表上的,但是不推荐使用外键约束 MySQL字段约束有四种,主键约束,非空约束,唯一约束,外键约束。...)/365 >= 20 eg:更新未排序的前3条数据,前3个出现的name为a的改为name为c 练习题 答案选A,因为B是升序排列,应该按照降序才取得到前3名,C项UPDATE子句就是错误的用法...注意:MySQL默认事务隔离级别就是REPEATABLE READ 11.6.4 serializable 由于事务并发执行所带来的各种问题,前三种隔离级别只适用于在某种业务场景中,凡事序列化的隔离性,...使用方式: old.字段名 / new.字段名(new代表的是假设发生之后的结果) 查看触发器的效果 如果触发器内部只有一条要执行的SQL指令, 可以省略大括号(begin和end) Create

    2.5K10

    Mysql 架构和索引

    ,填充是\0而不是空格 blob 和 text: 不能索引这些类型的完整长度,也不能为排序使用索引 排序时只按照max_sort_length规定的若干字节排序,或者可以自己指定 order by substring...Scan, MySQL将遍历全表以找到匹配的行 possible_keys 指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用 key 显示MySQL...在查询中实际使用的索引,若没有使用索引,显示为NULL key_len 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度, 此值可以告诉你在联合索引中mysql会真正使用了哪些索引 key_len...显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的 计算索引长度需要考虑的: 可为空的字段需要1字节标志 变长字段需要额外字节保留长度信息,如...Using filesort MySQL中无法利用索引完成的排序操作称为“文件排序” Not exists 使用了早期终结 MySQL执行计划的局限 EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况

    1.4K90

    企业面试题|最常问的MySQL面试题集合(一)

    3、字符串类型,包括VARCHAR、CHAR、TEXT、BLOB VARCHAR用于存储可变长字符串,它比定长类型更节省空间。 VARCHAR使用额外1或2个字节存储字符串长度。...答:int(0)表示数据是INT类型,长度是0、char(16)表示固定长度字符串,长度为16、varchar(16)表示可变长度字符串,长度为16、datetime表示时间类型、text表示字符串类型...存储过程 为以后的使用保存的一条或多条MySQL语句的集合,因此也可以在存储过程中加入业务逻辑和流程。 可以在存储过程中创建表,更新数据,删除数据等等。...3、列值为空(NULL)时是可以使用索引的,但MySQL难以优化引用了可空列的查询,它会使索引、索引统计和值更加复杂。可空列需要更多的储存空间,还需要在MySQL内部进行特殊处理。...问题19:有A(id,sex,par,c1,c2),B(id,age,c1,c2)两张表,其中A.id与B.id关联,现在要求写出一条SQL语句,将B中age>50的记录的c1,c2更新到A表中同一记录中的

    69932

    SQL面试 100 问

    COALESCE 函数用于将空值转换为 0。 5. 如何为查询结果指定一个容易理解标题?...,为每个员工返回一条记录。...答案: 关系数据库定义了以下约束: 非空约束(NOT NULL),用于限制字段不会出现空值。比如员工姓名不能为空。唯一约束(UNIQUE),用于确保字段中的值不会重复。...答案: CAHR 是固定长度的字符串,如果输入的内容不够使用空格进行填充,通常用于存储固定长度的编码;VARCHAR 是 可变长度的字符串,通常用于存储姓名等长度不一致的数据。...,如果在目标表中存在满足条件的记录,执行 UPDATE 操作更新目标表中对应的记录;如果不 存在匹配的记录,执行 INSERT 在目标表中插入一条新记录。

    2.5K22

    MySQL数据库实用技巧

    默认的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的 值,这样新插入的记录的自增字段值从初始值开始递增,如在tb_emp8中插入第一条记录,同时 指定id值为5,则以后插入的记录的...TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当插入一条记录但并没 有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。...因此,除非确实打算更新或者删除所有记录,否则要注意使用不带WHERE子句的UPDATE或DELETE 语句。...38、如何使用查询缓冲区?   查询缓冲区可以提高查询的速度,但是这种方式只适合查询语句比较多、更新语句比较少的情况。默认情况下查询缓冲区的大小为0,也就是不可用。

    2.5K10

    珍藏 | Java 岗位 【数据库】 面试题及答案详解

    · 可在写入数据表前,强制检验或转换数据。 · 触发器发生错误时,异动的结果会被撤销。 · 部分数据库管理系统可以针对数据定义语言(DDL)使用触发器,称为DDL触发器。...· 唯一 · 主、外键 · 不为空 · 表之间的关联字段 · 查询比较频繁的字段 6:索引类型有哪些?...- Char的长度是固定的,而varchar2的长度是可以变化的 比如,存储字符串“abc”对于char(20),表示你存储的字符将占20个字节,包含17个空,而同样的varchar2(20)只占了...- Delete语句:删除数据表中的一条或多条记录,也可以删除数据表中的所有记录,但是它的操作对象仍是记录。 - Update语句:用于修改已存在表中的记录的内容。...19:commit在哪里会运用 - Oracle的commit就是DML语句提交数据(这里是释放锁不是锁表),在未提交前你前面的操作更新的都是内存,没有更新到物理文件中。

    3.4K20

    mysql面试题目及答案_docker 面试题

    如,int类型存储时间类型,bigint类型转ip函数; 使用合理的字段属性长度,固定长度的表会更快。...使用enum、char而不是varchar; 尽可能使用not null定义字段(给空字段设置默认值); 尽量少用text;给频繁使用和查询的字段建立合适的索引; 12.说几个mysql中你常用的函数...19.什么是触发器?触发器的作用? 触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。...,常见于使用非唯一索引即唯一索引的非唯一前缀进行查找;eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或者唯一索引扫描;const,system:当MySQL对某查询某部分进行优化...)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引key_len:使用的索引的长度;在不损失精确性的情况下,长度越短越好;ref:显示索引的哪一列被使用了,

    1.1K20

    告诉你38个MySQL数据库的小技巧!

    默认的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的 值,这样新插入的记录的自增字段值从初始值开始递增,如在tb_emp8中插入第一条记录,同时 指定id值为5,则以后插入的记录的...TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当插入一条记录但并没 有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。...因此,除非 确实打算更新或者删除所有记录,否则要注意使用不带WHERE子句的UPDATE或DELETE 语句。...35、如何使用二进制日志? 二进制日志主要用来记录数据变更。如果需要记录数据库的变化,可以开启二进制日志。 基于二进制日志的特性,不仅可以用来进行数据恢复,还可用于数据复制。

    2.6K10

    MySQL面试题 硬核47问

    ,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15 ?...11、MySQL里记录金钱用什么字段类型?NUMERIC和DECIMAL类型被Mysql实现为同样的类型,这在SQL92标准允许。他们被用于保存值,该值的准确精度是极其重要的值,例如与金钱有关的数据。...原理是因为我们需要先根据 WHERE 条件列检索出来这条记录,然后再对它进行更新或删除。如果进行更新的时候,更新的字段是非索引字段,提升的效率会更明显,这是因为非索引字段更新不需要对索引进行维护。...,在统计结果的时候,会忽略列值为空(这里的空不是指空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...列值为NULL也是可以走索引的计划对列进行索引,应尽量避免把它设置为可空,因为这会让 MySQL 难以优化引用了可空列的查询,同时增加了引擎的复杂度45、如果要存储用户的密码散列,应该使用什么字段进行存储

    1.6K40

    告诉你 38 个 MySQL 数据库的小技巧!

    默认的,在 MySQL 中,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的 值,这样新插入的记录的自增字段值从初始值开始递增....如在 tb_emp8 中插入第一条记录,同时 指定 id 值为 5,则以后插入的记录的 id 值就会从 6 开始往上增加。添加唯一性的主键约束时, 往往需要设置字段自动增加属性。...默认的情况下,当插入一条记录但并没有指定 TIMESTAMP 这个列值时, MySQL 会把 TIMESTAMP 列设为当前的时间。...因此,除非 确实打算更新或者删除所有记录,否则要注意使用不带WHERE子句的 UPDATE 或 DELETE 语句。

    2.6K40

    原创|InnoDB数据页详解

    比如对于一个VARCHAR(10000)的字段,如果其真实的长度为255字节,则会用两个字节记录其长度,如果真实长度为100字节,会使用一个字节存储该字段的长度。...2.NULL值列表:该表只有两个字段c1和c2可以取空值,因此使用一个字节来记录空值列表。空值列表的值为 00 ,表示真实数据中没有字段取NULL。...如果在没有指定主键的情况下,默认使用前6个字节记录MySQL自己生成的主键row_id。真实数据的第二部分为系统生成的隐藏列,用户不可见。...回滚段指针用于指向修改前的数据(数据的上一个版本),事务ID和回滚指针用于多版本并发控制(mvcc),当undo中的记录不再被用户需要时,会由后台的purge线程回收。...并且redundant格式并不存在null值列表,使用字段长度值的第1位来判断字段是否为空,如果第1位为1,则为空。因为第1位用来记录字段是否为NULL,所以一个字节所能表示的最大长度为127。

    1.3K30

    SQL简介

    多个and 可用between,多个 or 可使用 in 模糊查询:%0-n个字符,_一个字符 单行函数:作用于 表中的单行数据,每有一行数据执行该函数一次 sysdata:获取系统当前时间 to_char...,与where同时进行的 按顺序对符合条件的数据进行编号 例:查询工资前五的员工 后面不能放字段,所以伪列放前 表别名 标明后面加别名 select * ,rowid from table //错...select rowid,*from table //对 select 别名.* ,rowid from table 别名//对 子查询 子查询使用在where中 如某个查询结果为一条记录中一项(一行一列...(会有字段标记) 增删改数据时,不仅要维护原始表,还要维护索引,从而降低效率 大量数据表中,查询少量内容时,建议使用索引 主键与唯一列 默认提供索引 触发器 mysql> delimiter $$ mysql...DBMS将直接跳到第一个DEPT等于4的记录,而后者将首先定位到DEPTNO=3的记录并且向前扫描到第一个DEPT大于3的记录。

    2.7K20

    MySQL-视图-触发器-事务-存储过程-函数-流程控制-索引与慢查询优化-06

    目录 视图*** 什么是视图 为什么要用视图 如何生成视图 修改视图 --> 最好(千万)不要 关联表数据改动前 关联表数据改动之后 触发器 什么是触发器 触发条件 触发器语法结构 修改mysql的默认结束符...(;) 触发器死循环 六个触发器的执行时机 新增前、新增后、删除前、删除后、更新前、更新后 NEW对象指代的就是当前记录(对象) 事务 ***** 什么是事务 事务的四大特性 ACID A:原子性 atomicity...关联表数据改动前 ? 关联表数据改动之后 视图中的数据自动更新了--> 执行查询视图记录语句 = 重新执行了创建视图的那个sql 语句 ?...,会报错 比如:user表的 新增前触发器 代码块内写的是 user表的新增插值操作,就会造成触发器死循环(直接报错) 六个触发器的执行时机 新增前、新增后、删除前、删除后、更新前、更新后 小案例...则mysql会自动为innodb表生成一个隐含字段作为主键,这字段的长度为6个字节,类型为长整型.

    1.4K60

    37 个 MySQL 数据库小技巧,不看别后悔!

    默认的,在MySQL中,AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。...设置自增属性(AUTO_INCREMENT)的时候,还可以指定第一条插入记录的自增字段的 值,这样新插入的记录的自增字段值从初始值开始递增,如在tb_emp8中插入第一条记录,同时 指定id值为5,则以后插入的记录的...TIMESTAMP也有一个DATETIME不具备的属性。默认的情况下,当插入一条记录但并没 有指定TIMESTAMP这个列值时,MySQL会把TIMESTAMP列设为当前的时间。...因此,除非 确实打算更新或者删除所有记录,否则要注意使用不带WHERE子句的UPDATE或DELETE 语句。...建议在对表进行更新和删除操作之前,使用SELECT语句确认需要删除的记录,以免造 成无法挽回的结果。点击这里总结了55道去BAT面试的MYSQL面试题。

    1.8K20
    领券