MySQL_易语言执行sql语句失败一次后就成功-程序员宅基地

技术标签: mysql  数据库  sql  

1 数据库备份与恢复

命令行

  • 备份
    登录到 MySQL 服务器,输入: mysqldump -u root -p 数据库名称 > 文件保存路径
  • 恢复
  1. 登录 MySQL 数据库
  2. 删除已备份数据库
  3. 重新创建名称相同的数据库
  4. 使用该数据库
  5. 导入文件执行:source 备份文件全路径

2 事务

事务介绍

  • 事务:一台或者多条 SQL 语句组成的一个执行单元,要么同时成功要么同时失败
  • 单元中的每条SQL语句都相互依赖,形成一个整体
  • 如果某条 SQL 语句执行失败或者出现错误,那么整个单元就会撤回到事务最初状态
  • 如果单元中的所有 SQL 语句都执行成功,则事务就会顺利执行

事务的操作

  • 开启事务
    START TRANSACTION;
  • 回滚事务
    ROLLBACK;
  • 提交事务
    COMMIT;

事务的提交方式

  • 事务提交方式的分类
    自动提交(MySQL默认)
    手动提交
  • 查看事务提交方式
    SELECT @@AUTOCOMMT;

0 代表手动提交,1 代表自动提交

  • 修改事务提交方式
    SET @@AUTOCOMMIT = 数字;

事务四大特征(ACID)

  • 原子性
    原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响
  • 一致性
    一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态
    拿转账来说,假设张三和李四两者的钱加起来一共是2000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是2000,这就是事务的一致性
  • 隔离性
    隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
  • 持久性
    持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作

事务的隔离级别

  • 事务的隔离级别

    • 多个客户端操作时 ,各个客户端的事务之间应该是隔离的,相互独立的 , 不受影响的。
    • 而如果多个事务操作同一批数据时,则需要设置不同的隔离级别 , 否则就会产生问题
  • 隔离级别分类

隔离级别 名称 会引发问题
1 读未提交 read uncommitted 脏读、不可重复读、幻读
2 读已提交 read committed 不可重复读、幻读
3 可重复读 repeatable read 幻读
4 串行化 serializable
  • 可能引发的问题
问题 现象
脏读 是指在一个事务处理过程中读取了另一个未提交的事务中的数据 , 导致两次查询结果不一致
不可重复读 是指在一个事务处理过程中读取了另一个事务中修改并已提交的数据, 导致两次查询结果不一致
幻读 select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入。或不存在执行delete删除,却发现删除成功
  • 查询数据库隔离级别
    SELECT @@transaction_isolation;
  • 修改数据库隔离级别
  • SET @@SESSION.TRANSACTION_ISOLATION = '级别字符串';;

修改结束后需要重新连接,才能查询到新的隔离级别

  • 隔离级别问题解决
    • 脏读
      修改隔离级别为read committed
    • 不可重复读
      修改隔离级别为repeatable read
    • 幻读
      修改隔离级别为serializable

注意:隔离级别从小到大安全性越来越高,但是效率越来越低,所以不建议修改数据库默认的隔离级别

3 存储引擎

MySQL体系结构

在这里插入图片描述

存储引擎介绍

  • 在生活中,引擎就是整个机器运行的核心(发动机),不同的引擎具备不同的功能,应用于不同的场景
  • MySQL 数据库使用不同的机制存取表文件包括存储方式、索引技巧、锁定水平等不同的功能,这些不同的技术以及配套的功能称为存储引擎
  • MySQL 支持的存储引擎有很多,常用的有三种:InnoDB、MyISAM、MEMORY.
  • 特性对比
    • MyISAM:访问快,不支持事务和外键操作
    • InnoDB:支持事务和外键操作,支持并发控制,占用磁盘空间大(MySQL 5.5版本后默认)
    • MEMORY:内存存储,速度快,不安全。适合小量快速访问
      在这里插入图片描述

存储引擎操作

  • 查询数据库支持的存储引擎
    SHOW ENGINES;
  • 查询某个数据库中所有表的存储引擎
    SHOW TABLE STATUS FROM 数据库名称;
  • 查询某个数据库中某个数据表中的存储引擎
    SHOW TABLE STATUS FROM 数据库名称 WHERE NAME = '数据表名称';
  • 创建数据表,指定存储引擎
CREATE TABLE 表名(
	列名 数据类型,
	...
)ENGINE = 引擎名称
  • 修改数据表的存储引擎
    ALTER TABLE 表名 ENGINE = 引擎名称

存储引擎的选择

  • MyISAM
    • 特点:不支持事务和外键操作,读取速度快,节约资源
    • 使用场景:以查询操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高
  • InnoDB
    • 特点:MySQL 的默认存储引擎,支持事务和外键操作
    • 使用场景:对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,读写频繁的操作
  • MEMORY
    • 特点:将所有数据保存在内存中,在需要快速定位记录和其他类似数据环境下,可以提供更快的访问
    • 使用场景:通常用于更新不太频繁的小表,用来快速得到访问的结果
      总结:针对不同的需求场景,来选择最合适的存储引擎即可!如果不确定,则使用数据库默认的存储引擎

4 索引

索引介绍

  • MySQL 索引:是帮助 MySQL 高效获取数据的一种数据结构,所以索引的本质是数据结构
  • 在表数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引

索引分类

  • 按照功能分类
    • 普通索引:最基本的索引,没有任何限制
    • 唯一索引:索引列的值必须唯一,但允许有空值,如果是组合索引,则列值组合必须唯一
    • 主键索引:一种特殊的唯一索引,不允许有空值,在建表时有主键同时创建主键索引
    • 联合索引:顾名思义,就是将单列索引进行组合
    • 外键索引:只有InnoDB 引擎支持外键索引,用来保证数据的一致性、完整性和实现级联操作
    • 全文索引:快速匹配全部文档的方式。InnoDB 引擎 5.6 版本后才支持全文索引。MEMORY 引擎不支持
  • 按照结构分类
    • BTree 索引:MySQL 使用最频繁的一个索引数据结构,是InnoDB 和 MyISAM 存储引擎默认的索引类型,底层基于 B + Tree 数据结构
    • Hash 索引:MySQL 中 MEMORY 存储引擎默认支持的索引类型

索引的操作

  • 创建索引
CREATE [UNIQUE|FULLTEXT] INDEX 索引名称
[USING 索引类型] --默认是BTree
ON 表名(列名...)
  • 查看索引
    SHOW INDEX FROM 表名
--创建普通索引
CREATE INDEX idx_name ON account(NAME);
--创建唯一索引
CREATE UNIQUE INDEX idx_money ON account(money);
--查看索引
SHOW INDEX FROM account;
  • 添加索引
    • 普通索引:ALTER TABLE 表名 ADD INDEX 索引名称(列名);
    • 组合索引:ALTER TABLE 表名 ADD INDEX 索引名称(列名1,列名2,…);
    • 主键索引:ALTER TABLE 表名 ADD PRIMARY KEY(主键列名);
    • 外键索引:ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(本表外键列名) REFRENCES 主表名(主键列名);
    • 唯一索引:ALTER TABLE 表名 ADD UNIQUE 索引名称(列名);
    • 全文索引:ALTER TABLE 表名 ADD FULLTEXT 索引名称(列名);
  • 删除索引
    *DROP INDEX 索引名称 ON 表名;

索引原理

  • 索引是在MySQL的存储引擎中实现的,所以每种存储引擎的索引不一定完全相同,也不是所有的引擎支持所有的索引类型。这里我们主要介绍InnoDB引擎的实现的B+Tree索引
  • B+Tree是一种树型数据结构,是B-Tree的变种。通常使用在数据库和操作系统中的文件系统,特点是能够保持数据稳定有序。
  • 需要理解的
    磁盘存储
    BTree
    B + Tree。

磁盘存储

  • 系统从磁盘读取数据到内存时是以磁盘块(block)为基本单位的
  • 位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么。
  • InnoDB存储引擎中有页(Page)的概念,页是其磁盘管理的最小单位。InnoDB存储引擎中默认每个页的大小为16KB。
  • InnoDB引擎将若干个地址连接磁盘块,以此来达到页的大小16KB,在查询数据时如果一个页中的每条数据都能有助于定位数据记录的位置,这将会减少磁盘I/O次数,提高查询效率。

BTree

在这里插入图片描述

B + Tree

在这里插入图片描述

  • BTree 数据结构
    每个节点中不仅包含key值,还有数据,会增加查询数据时磁盘的IO次数
  • B + Tree 数据结构
    非叶子节点只存储key值
    所有数据存储在叶子节点
    所有叶子节点之间都有连接指针
  • B + Tree 好处
    提高查询速度
    减少磁盘的IO次数
    树形结构较小

索引的设计原则

  • 创建索引遵循的原则
    1. 对查询频次较高,且数据量比较大的表建立索引
    2. 使用唯一索引,区分度越高,使用索引的频次越高
    3. 索引字段的选择,最佳候选列应当从 WHERE 子句的条件中提取
    4. 索引虽然可以有效的提升查询数据的效率,但并不是多多益善
  • 最左匹配原则(只适合组合索引)
    在mysql建立联合索引时会遵循最左前缀匹配的原则,即最左优先,在检索数据时从联合索引的最左边开始匹配,
    对列name列、address和列phone列建一个联合索引
ALTER TABLE user ADD INDEX index_three(name,address,phone);

联合索引index_three实际建立了(name)、(name,address)、(name,address,phone)三个索引。所以下面的三个SQL语句都可以命中索引。

SELECT * FROM user WHERE address = '北京' AND phone = '12345' AND name = '张三';
SELECT * FROM user WHERE name = '张三' AND address = '北京';
SELECT * FROM user WHERE name = '张三';

上面三个查询语句执行时会依照最左前缀匹配原则,检索时分别会使用索引

(name,address,phone)
(name,address)
(name)

进行数据匹配。
索引的字段可以是任意顺序的,如:

-- 优化器会帮助我们调整顺序,下面的SQL语句都可以命中索引
SELECT * FROM user WHERE address = '北京' AND phone = '12345' AND name = '张三';

Mysql的优化器会帮助我们调整where条件中的顺序,以匹配我们建立的索引。
联合索引中最左边的列不包含在条件查询中,所以根据上面的原则,下面的SQL语句就不会命中索引。

-- 联合索引中最左边的列不包含在条件查询中,下面的SQL语句就不会命中索引
SELECT * FROM user WHERE address = '北京' AND phone = '12345';

5 锁机制

锁的介绍

  • 锁机制:数据库为了保证 数据的一致性,在共享的资源被并发访问时变得安全所设计的一种规则
  • 锁机制类似多线程中的同步,作用就是可以保证数据的一致性和安全性
  • 按操作分类
    • 共享锁:也叫读锁。针对同一份数据,多个事务读取操作可以同时加锁而不互相影响,但是不能修改数据
    • 排他锁:也叫写锁。当前的操作没有完成前,会阻断其他操作的读取和写入
  • 按粒度分类:
    • 表级锁:操作时,会锁定整个表。开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低。偏向于MyISAM存储引擎!
    • 行级锁:操作时,会锁定当前操作行。开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高。偏向于InnoDB存储引擎!
    • 页级锁:锁的粒度、发生冲突的概率和加锁的开销介于表锁和行锁之间,会出现死锁,并发性能一般。
  • 按使用方式分类:
    • 悲观锁:每次查询数据时都认为别人会修改,很悲观,所以查询时加锁。
    • 乐观锁:每次查询数据时都认为别人不会修改,很乐观,但是更新时会判断一下在此期间别人有没有去更新这个数据
  • 不同存储引擎支持的锁
存储引擎 表级锁 行级锁 页级锁
MyISAM 支持 不支持 不支持
InnoDB 支持 支持 不支持
MEMORY 支持 不支持 不支持
BDB 支持 不支持 支持

InnoDB 共享锁

  • 特点
    数据可以被多个事务查询,但是不能修改
  • 创建共享锁格式
SELECT语句 LOCK IN SHARE MODE;
  • 举例
-- 窗口2
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录(普通查询,可以查询)
SELECT * FROM student WHERE id=1;
-- 查询id为1的数据记录,并加入共享锁(可以查询。共享锁和共享锁兼容)
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 修改id为1的姓名为张三三(不能修改,会出现锁的情况。只有窗口1提交事务后,才能修改成功)
UPDATE student SET NAME='张三三' WHERE id = 1;
-- 修改id为2的姓名为李四四(修改成功,InnoDB引擎默认是行锁)
UPDATE student SET NAME='李四四' WHERE id = 2;
-- 修改id为3的姓名为王五五(注意:InnoDB引擎如果不采用带索引的列。则会提升为表锁)
UPDATE student SET NAME='王五五' WHERE id = 3;
-- 提交事务
COMMIT;

InnoDB 排他锁

  • 特点
    加锁的数据,不能被其他事务加锁查询或修改
  • 创建排他锁格式
SELECT语句 FOR UPDATE;
  • 举例
-- 窗口2
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录(普通查询没问题)
SELECT * FROM student WHERE id=1;
-- 查询id为1的数据记录,并加入共享锁(不能查询。因为排他锁不能和其他锁共存)
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 查询id为1的数据记录,并加入排他锁(不能查询。因为排他锁不能和其他锁共存)
SELECT * FROM student WHERE id=1 FOR UPDATE;
-- 修改id为1的姓名为张三(不能修改,会出现锁的情况。只有窗口1提交事务后,才能修改成功)
UPDATE student SET NAME='张三' WHERE id=1;
-- 提交事务
COMMIT;

注意:锁的兼容性
共享锁和共享锁 兼容
共享锁和排他锁 冲突
排他锁和排他锁 冲突
排他锁和共享锁 冲突

MyISAM 读锁

  • 特点
    所有连接只能查询数据,不能修改
  • 读锁语法格式
#加锁
LOCK TABLE 表名 READ;
#解锁
UNLOCK TABLES;
  • 举例
-- 窗口1
/*
	读锁:所有连接只能读取数据,不能修改
*/
-- 为product表加入读锁
LOCK TABLE product READ;
-- 查询product表(查询成功)
SELECT * FROM product;
-- 修改华为手机的价格为5999(修改失败)
UPDATE product SET price=5999 WHERE id=1;
-- 解锁
UNLOCK TABLES;
-- 窗口2
-- 查询product表(查询成功)
SELECT * FROM product;
-- 修改华为手机的价格为5999(不能修改,窗口1解锁后才能修改成功)
UPDATE product SET price=5999 WHERE id=1;

MyISAM 写锁

  • 特点
    其他连接不能查询和修改数据
  • 写锁语法格式
#加锁
LOCK TABLE 表名 WRITE;
#解锁
UNLOCK TABLES;
-- 窗口1
/*
	写锁:其他连接不能查询和修改数据
*/
-- 为product表添加写锁
LOCK TABLE product WRITE;
-- 查询product表(查询成功)
SELECT * FROM product;
-- 修改小米手机的金额为3999(修改成功)
UPDATE product SET price=3999 WHERE id=2;
-- 解锁
UNLOCK TABLES;
-- 窗口2
-- 查询product表(不能查询。只有窗口1解锁后才能查询成功)
SELECT * FROM product;
-- 修改小米手机的金额为2999(不能修改。只有窗口1解锁后才能修改成功)
UPDATE product SET price=2999 WHERE id=2;

悲观锁和乐观锁

  • 悲观锁
    就是很悲观,它对于数据被外界修改的操作持保守态度,认为数据随时会修改。
    整个数据处理中需要将数据加锁。悲观锁一般都是依靠关系型数据库提供的锁机制。
    我们之前所学的行锁,表锁不论是读写锁都是悲观锁。
  • 乐观锁的概念
    就是很乐观,每次自己操作数据的时候认为没有人会来修改它,所以不去加锁。
    但是在更新的时候会去判断在此期间数据有没有被修改。
    需要用户自己去实现,不会发生并发抢占资源,只有在提交操作的时候检查是否违反数据完整性。
  • 悲观锁和乐观锁使用前提
    • 对于读的操作远多于写的操作的时候,这时候一个更新操作加锁会阻塞所有的读取操作,降低了吞吐量。最后还要释放锁,锁是需要一些开销的,这时候可以选择乐观锁。
    • 如果是读写比例差距不是非常大或者系统没有响应不及时,吞吐量瓶颈的问题,那就不要去使用乐观锁,它增加了复杂度,也带来了业务额外的风险。这时候可以选择悲观锁。
  • 乐观锁的实现方式
    • 版本号

      • 给数据表中添加一个version列,每次更新后都将这个列的值加1。
      • 读取数据时,将版本号读取出来,在执行更新的时候,比较版本号。
      • 如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。
      • 用户自行根据这个通知来决定怎么处理,比如重新开始一遍,或者放弃本次更新。
      -- 创建city表
      CREATE TABLE city(
      	id INT PRIMARY KEY AUTO_INCREMENT,  -- 城市id
      	NAME VARCHAR(20),                   -- 城市名称
      	VERSION INT                         -- 版本号
      );
      
      -- 添加数据
      INSERT INTO city VALUES (NULL,'北京',1),(NULL,'上海',1),(NULL,'广州',1),(NULL,'深圳',1);
      
      -- 修改北京为北京市
      -- 1.查询北京的version
      SELECT VERSION FROM city WHERE NAME='北京';
      -- 2.修改北京为北京市,版本号+1。并对比版本号
      UPDATE city SET NAME='北京市',VERSION=VERSION+1 WHERE NAME='北京' AND VERSION=1;
      
    • 时间戳

      • 和版本号方式基本一样,给数据表中添加一个列,名称无所谓,数据类型需要是timestamp
      • 每次更新后都将最新时间插入到此列。
      • 读取数据时,将时间读取出来,在执行更新的时候,比较时间。
      • 如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。

锁的总结

  • 表锁和行锁
    • 行锁:锁的粒度更细,加行锁的性能损耗较大。并发处理能力较高。InnoDB引擎默认支持!
    • 表锁:锁的粒度较粗,加表锁的性能损耗较小。并发处理能力较低。InnoDB、MyISAM引擎支持!
  • InnoDB锁优化建议
    • 尽量通过带索引的列来完成数据查询,从而避免InnoDB无法加行锁而升级为表锁。
    • 合理设计索引,索引要尽可能准确,尽可能的缩小锁定范围,避免造成不必要的锁定。
    • 尽可能减少基于范围的数据检索过滤条件。
    • 尽量控制事务的大小,减少锁定的资源量和锁定时间长度。
    • 在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率。
    • 对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁的产生。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_59620032/article/details/127313356

智能推荐

18个顶级人工智能平台-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏27次。来源:机器人小妹  很多时候企业拥有重复,乏味且困难的工作流程,这些流程往往会减慢生产速度并增加运营成本。为了降低生产成本,企业别无选择,只能自动化某些功能以降低生产成本。  通过数字化..._人工智能平台

electron热加载_electron-reloader-程序员宅基地

文章浏览阅读2.2k次。热加载能够在每次保存修改的代码后自动刷新 electron 应用界面,而不必每次去手动操作重新运行,这极大的提升了开发效率。安装 electron 热加载插件热加载虽然很方便,但是不是每个 electron 项目必须的,所以想要舒服的开发 electron 就只能给 electron 项目单独的安装热加载插件[electron-reloader]:// 在项目的根目录下安装 electron-reloader,国内建议使用 cnpm 代替 npmnpm install electron-relo._electron-reloader

android 11.0 去掉recovery模式UI页面的选项_android recovery 删除 部分菜单-程序员宅基地

文章浏览阅读942次。在11.0 进行定制化开发,会根据需要去掉recovery模式的一些选项 就是在device.cpp去掉一些选项就可以了。_android recovery 删除 部分菜单

mnn linux编译_mnn 编译linux-程序员宅基地

文章浏览阅读3.7k次。https://www.yuque.com/mnn/cn/cvrt_linux_mac基础依赖这些依赖是无关编译选项的基础编译依赖• cmake(3.10 以上)• protobuf (3.0 以上)• 指protobuf库以及protobuf编译器。版本号使用 protoc --version 打印出来。• 在某些Linux发行版上这两个包是分开发布的,需要手动安装• Ubuntu需要分别安装 libprotobuf-dev 以及 protobuf-compiler 两个包•..._mnn 编译linux

利用CSS3制作淡入淡出动画效果_css3入场效果淡入淡出-程序员宅基地

文章浏览阅读1.8k次。CSS3新增动画属性“@-webkit-keyframes”,从字面就可以看出其含义——关键帧,这与Flash中的含义一致。利用CSS3制作动画效果其原理与Flash一样,我们需要定义关键帧处的状态效果,由CSS3来驱动产生动画效果。下面讲解一下如何利用CSS3制作淡入淡出的动画效果。具体实例可参考刚进入本站时的淡入效果。1. 定义动画,名称为fadeIn@-webkit-keyf_css3入场效果淡入淡出

计算机软件又必须包括什么,计算机系统应包括硬件和软件两个子系统,硬件和软件又必须依次分别包括______?...-程序员宅基地

文章浏览阅读2.8k次。计算机系统应包括硬件和软件两个子系统,硬件和软件又必须依次分别包括中央处理器和系统软件。按人的要求接收和存储信息,自动进行数据处理和计算,并输出结果信息的机器系统。计算机是脑力的延伸和扩充,是近代科学的重大成就之一。计算机系统由硬件(子)系统和软件(子)系统组成。前者是借助电、磁、光、机械等原理构成的各种物理部件的有机组合,是系统赖以工作的实体。后者是各种程序和文件,用于指挥全系统按指定的要求进行..._计算机系统包括硬件系统和软件系统 软件又必须包括

随便推点

进程调度(一)——FIFO算法_进程调度fifo算法代码-程序员宅基地

文章浏览阅读7.9k次,点赞3次,收藏22次。一 定义这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO 算法并不能保证这些页面不被淘汰。这里,我_进程调度fifo算法代码

mysql rownum写法_mysql应用之类似oracle rownum写法-程序员宅基地

文章浏览阅读133次。rownum是oracle才有的写法,rownum在oracle中可以用于取第一条数据,或者批量写数据时限定批量写的数量等mysql取第一条数据写法SELECT * FROM t order by id LIMIT 1;oracle取第一条数据写法SELECT * FROM t where rownum =1 order by id;ok,上面是mysql和oracle取第一条数据的写法对比,不过..._mysql 替换@rownum的写法

eclipse安装教程_ecjelm-程序员宅基地

文章浏览阅读790次,点赞3次,收藏4次。官网下载下载链接:http://www.eclipse.org/downloads/点击Download下载完成后双击运行我选择第2个,看自己需要(我选择企业级应用,如果只是单纯学习java选第一个就行)进入下一步后选择jre和安装路径修改jvm/jre的时候也可以选择本地的(点后面的文件夹进去),但是我们没有11版本的,所以还是用他的吧选择接受安装中安装过程中如果有其他界面弹出就点accept就行..._ecjelm

Linux常用网络命令_ifconfig 删除vlan-程序员宅基地

文章浏览阅读245次。原文链接:https://linux.cn/article-7801-1.htmlifconfigping <IP地址>:发送ICMP echo消息到某个主机traceroute <IP地址>:用于跟踪IP包的路由路由:netstat -r: 打印路由表route add :添加静态路由路径routed:控制动态路由的BSD守护程序。运行RIP路由协议gat..._ifconfig 删除vlan

redux_redux redis-程序员宅基地

文章浏览阅读224次。reduxredux里要求把数据都放在公共的存储区域叫store里面,组件中尽量少放数据,假如绿色的组件要给很多灰色的组件传值,绿色的组件只需要改变store里面对应的数据就行了,接着灰色的组件会自动感知到store里的数据发生了改变,store只要有变化,灰色的组件就会自动从store里重新取数据,这样绿色组件的数据就很方便的传到其它灰色组件里了。redux就是把公用的数据放在公共的区域去存..._redux redis

linux 解压zip大文件(解决乱码问题)_linux 7za解压中文乱码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏6次。unzip版本不支持4G以上的压缩包所以要使用p7zip:Linux一个高压缩率软件wget http://sourceforge.net/projects/p7zip/files/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2tar jxvf p7zip_9.20.1_src_all.tar.bz2cd p7zip_9.20.1make && make install 如果安装失败,看一下报错是不是因为没有下载gcc 和 gcc ++(p7_linux 7za解压中文乱码