数据库
文章平均质量分 63
Sql and NoSql
亿码平川
一码不平、何以平天下!
展开
-
MySql - 索引优化
1、独立的列如果查询中的列不是独立的,则 MYSQL就不会使用索引。“独立的列”是指索引列不能是表达式的一部分,也不能是函数的参数。例如下面的age列:SELECT age FROM tbl_empWHERE age + 1 = 222、多列索引在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好。例如下面的语句中,最好把 deptId 和 age 设置为多列索引。SELECT deptId,ageFROM tbl_empWHERE deptId = 1 AND原创 2021-09-27 13:50:55 · 165 阅读 · 0 评论 -
MySql - 索引
素引简单来讲是存储引擎用于快速找到记录的一种数据结构。如果没有特别指明类型,那多半说的是B-Tree索引。1、创建索引有四种方式来添加数据表的索引:ALTER TABLE tbl_name ADD PRIMARY KEY(column_list)该语句加一个主键,这意味必着索引值是唯一的,且不能为NULL。ALTER TABLE tbl_name ADD UNIQUE index_name(column_list)这条语句创建素引的值必须是唯一的(除了NULL外,NUL可能会出现多次)。ALT.原创 2021-09-26 01:28:33 · 152 阅读 · 0 评论 -
MySql - 事务
事务就是一组原子性的SQL査询,或者说一个独立的工作单元。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。1、事务的属性事务具有以下4个属性,通常简称为事务的ACID属性:原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改以保持数据的完整.原创 2021-09-25 16:19:36 · 136 阅读 · 0 评论 -
MySql - 锁机制
1、锁的分类从对数据的操作进行分类:读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响。写锁(排它锁):当前写操作没有完成前,它会阻断其他线程的读和写操作。从对数据操作的粒度进行分类:表锁:对整张表进行加锁,直到操作结束才会释放锁。行锁:对需要操作的行进行上锁。2、表锁(偏读)表锁偏向与MyISAM存储引擎,开销小、加锁快;无死锁;锁粒度大,发生锁冲突的概率最高,并发度最低。2.1 手动加表锁MYISAM在执行查询语句前,会自动给涉及的所有表加读锁,在执行增删改原创 2021-09-25 02:42:38 · 144 阅读 · 0 评论 -
MySql - 存储引擎
MySql支持非常多存储引擎,但是我们这里只介绍比较常用的两种存储引擎,分别是:InnoDB和MyISMA。1、InnoDBINNODB是 MYSQL的默认事务型引擎,也是最重要、使用最广泛的存储引擎。INNODB采用MVCC来支持高并发,并且实现了四个标准的隔离级别。其默认级别是可重复读,并且通过间隙锁策略防止幻读的出现。间隙锁使得 INNODB不仅仅锁定查询涉及的行,还会对索引中的间隙进行锁定,以防止幻影行的插入。主索引是聚簇索引,在索引中保存了数据,从而避免直接读取磁盘,因此对查询性能有很.原创 2021-09-23 22:02:26 · 71 阅读 · 0 评论 -
MySql - 数据类型
1、数值类型类型大小范围(有符号)范围(无符号)用途TINYINT1 Bytes(-128,127)(0,255)小整数值SMALLINT2 Bytes(-32 768,32 767)(0,65 535)大整数值MEDIUMINT3 Bytes(-8 388 608,8 388 607)(0,16 777 215)大整数值INT或INTEGER4 Bytes(-2 147 483 648,2 147 483 647)(0,4 294原创 2021-09-23 20:26:36 · 54 阅读 · 0 评论 -
SQL - 事务处理
MySQL支持几种基本的数据库引擎。其中MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。如果你的应用中需要事务处理功能,则一定要使用正确的引擎类型。基本术语:事务(transaction)指一组SQL语句;回退(rollback)指撤销指定SQL语句的过程;提交(commit)指将未存储的SQL语句结果写入数据库表;保留点(savepoint)指事务处理中设置的临时占位符,你可以对它发布回退(与回退整个事务处理不同)。1、事务回退MySQL的R.原创 2021-09-22 21:30:40 · 313 阅读 · 0 评论 -
SQL - 存储过程
简单来说,存储过程可以看成是对一系列 SQL 操作的批处理。存储过程的好处:代码封装,保证了一定的安全性;代码复用;由于是预先编译,因此具有很高的性能。1、创建存储过程创建储存过程与创建视图有一些类似,可以做对比来记忆。需要注意的是,命令行中创建存储过程需要用delimiter自定义分隔符,因为命令行是以“ ; ”为结束符,而存储过程中也包含了分号,因此会错误把这部分分号当成是结束符,造成语法错误。1. 1 创建并调用无参的存储过程delimiter //CREATE PROCED.原创 2021-09-22 02:04:40 · 326 阅读 · 0 评论 -
SQL - 视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。为什么使用视图:重用SQL语句。简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节(类似java的接口)。使用表的组成部分而不是整个表。保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。视图的规则:与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。对于可以创建的视图数目没有限制。.原创 2021-09-22 00:54:33 · 328 阅读 · 0 评论 -
SQL - 组合查询之UNION关键字
多数SQL查询都只包含从一个或多个表中返回数据的单条SELECT语句。MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为组合查询。多数情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。有两种基本情况,其中需要使用组合查询:在单个查询中从不同的表返回类似结构的数据。对单个表执行多个查询,按单个查询返回数据。1、创建组合查询UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之.原创 2021-09-22 00:27:09 · 728 阅读 · 0 评论 -
SQL - 连接表(多表查询)
1、创建简单连接现在有这样一个需求,我们要求返回员工名字和所在部门的名字,在设计数据库时,员工信息是存储在员工表,而部门信息是存储在部门表的,那么我们需要同时这回这两个字段,就要使用联结两张表进行查询。SELECT tbl_dept.deptName, tbl_emp.nameFROM tbl_dept, tbl_empWHERE tbl_dept.id = tbl_emp.deptId分析:SELECT语句与前面所有语句一样指定要检索的列。不过这里最好使用完全限定列名,因为是在两张表之间进行查原创 2021-09-19 22:37:01 · 839 阅读 · 0 评论 -
SQL - 子查询
迄今为止我们所看到的所有SELECT语句都是简单查询,即从单个数据库表中检索数据的单条语句。SQL还允许创建子查询,即嵌套在其他查询中的查询,而且子查询中一般只返回一个字段的数据。1、利用子查询进行过滤可以将子查询的结果作为 WHRER 语句的过滤条件:SELECT *FROM table1WHERE col1 IN (SELECT col2 FROM table2);分析:在SELECT语句中,子查询总是从内向外处理。在处理上面的SELECT语句时,MySQ.原创 2021-09-19 03:33:26 · 189 阅读 · 0 评论 -
SQL - 数据分组之Group By关键字
1、创建分组分组就是把具有相同的数据值的行放在同一组中。可以对同一分组数据使用汇总函数进行处理,例如求分组数据的平均值等。指定的分组字段除了能按该字段进行分组,也会自动按该字段进行排序。SELECT COUNT(id) '男生与女生的人数'FROM demoGROUP BY gender分析:这条sql语句的功能是统计男生和女生的人数。GROUP BY子句一些重要的规定:GROUP BY子句可以包含任意数目的列。这使得能对分组进行嵌套(使用逗号分开),为数据分组提供更细致的控制。GROU原创 2021-09-19 02:27:44 · 1248 阅读 · 0 评论 -
SQL - 使用函数处理数据
1、文本处理函数SELECT UPPER(nickname)FROM demoWHERE id = 1分析:这条sql的功能是将查询回来的nickname转为大写。类似的功能还有很多,可以看下表,自行测试。函数说明Left()返回串左边的字符Right()返回串右边的字符Length()返回串的长度Locate()找出串的一个子串Lower()将串转换为小写Upper()将串转换为大写LTrim()去掉串左边的空格RTr原创 2021-09-18 00:14:33 · 133 阅读 · 0 评论 -
SQL - 过滤数据之Where关键字
1、使用WHERE子句数据库表一般包含大量的数据,很少需要检索表中所有行。通常只会根据特定操作或报告的需要提取表数据的子集。只检索所需数据需要指定搜索条件,搜索条件也称为过滤条件。SELECT *FROM demoWHERE gender = '0'分析:这条语句以gender列等于0作为过滤条件,只有gender等于0时,数据才会被检索出来。2、WHERE子句操作符操作符说明=等于<>不等于!=不等于<小于<=小原创 2021-09-17 22:27:45 · 650 阅读 · 0 评论 -
SQL - 使用Order By对数据进行排序
1、数据排序当我们直接使用SELECT语句查回来的数据是没有顺序的,是表中最原始的顺序,为了明确地排序检索出的数据,可使用ORDER BY子句。SELECT nicknameFROM demoORDER BY nickname分析: 这条语句指示MySQL对nickname列以字母顺序排序。2、按多个列排序我们经常需要按不止一个列进行数据排序,就需要指定多个列名,列名之间用逗号分开即可。对于下1面这个例子,仅在多个行具有相同的nickname值时才对数据按id进行排序。如果nickname列原创 2021-09-17 01:57:20 · 1756 阅读 · 0 评论 -
SQL - 使用Select简单检索数据
1、简单查询单列、多列、所有列SELECT nickname FROM demoSELECT nickname, gender FROM demoSELECT * FROM demo2、检索不同的行——DISTINCT在一些特殊业务需求中,我们需要返回不同的数据,即相同的数据将会被覆盖,这时候我们就需要使用DISTINCT关键字。SELECT DISTINCT nicknameFROM demo3、限制结果——LIMITSELECT语句返回所有匹配的行,它们可能是指定表中的每个行。原创 2021-09-16 22:22:57 · 418 阅读 · 0 评论 -
SQL - 插入数据
1、插入完整的行INSERT INTO demo VALUES(NULL, "lanpangzi", "0")分析:这条sql语句是按数据表中列的顺序进行插入的,但是这种语法不安全,我们应该尽量避免使用,上面的SQL语句高度依赖于表中列的定义次序,并且还依赖于其次序容易获得的信息。即使可得到这种次序信息,也不能保证下一次表结构变动后各个列保持完全相同的次序。因此,编写依赖于特定列次序的SQL语句是很不安全的。如果这样做,有时难免会出问题。INSERT INTO demo( nickname,gen原创 2021-09-16 21:39:53 · 3854 阅读 · 0 评论 -
SQL - 创建和操纵表
1、 创建表CREATE TABLE demo( id INT NOT NULL AUTO_INCREMENT, nickname VARCHAR(100) NOT NULL, gender VARCHAR(2) NTO NULL DEFAULT 0, PRIMARY KEY(id))ENGINE=INNODB1.1、主键主键值必须唯一,且不能为空。即,表中的每个行必须具有唯一的主键值。如果主键使用单个列,则它的值必须唯一。如果使用多个列,则这些列的组合值必须唯一。CREATE TABL原创 2021-09-16 18:30:17 · 89 阅读 · 0 评论 -
SQL - 计算字段
1、拼接字段下面有这样一个场景:在用户表中,有用户昵称和用户个性签名,它们处于两个不同的字段,但是现在需要将这两个字段合并之后格式化再返回,以这样的形式返回:昵称(个性签名)。这个时候我们就需要用到concat()函数进行字段拼接:select CONCAT(nick_name,'(',sign,')')from ums_user 分析:使用Concat()函数拼接字段,即把多个串连接起来形成一个较长的串。Concat()需要一个或多个指定的串,各个串之间用逗号分隔。需要注意的一点就是,拼接的原创 2021-09-01 00:56:25 · 620 阅读 · 0 评论 -
SQL - 使用正则对数据进行过滤
1、基本字符匹配数据库使用正则进行过滤,写法与like语句非常相似,只需将‘like’关键字改为‘regexp’即可。我们先来看一个最简单的正则匹配:select *from mostimeswhere name regexp '666'分析:这条sql语句表达是字段中包含‘666’即为匹配对象。正则也可以像like语句那样任意匹配一个字符:select *from mostimeswhere name regexp '.66'分析:这里使用了正则表达式‘.66’,‘.’是正则表达式原创 2021-08-31 23:59:27 · 2941 阅读 · 0 评论 -
SQL - 使用通配符对数据进行过滤
1、百分号(%)通配符当我们需要做一个搜索功能的时候,往往会使用到百分号通配符,%表示任何字符出现任意次数;例如,我们需要搜索Mos开头的字段,可以使用以下语句:select * from mostimeswhere name like 'Mos%'如果我们需要锁定首尾的字符,来匹配中间的字符:select *from mostimeswhere name like 'M%s'我们还可以匹配任何位置包含Mos的字段,我们可以使用以下语句进行查询:selectfrom mostime原创 2021-08-31 22:22:47 · 196 阅读 · 0 评论