网站建设 之 mysql,mybatis参数 MariaDB

mysql在linux上的安装:

首先下载下来

其次解压到一个目录,例如 usr/local

mysqld 启动mysql数据库服务。

脚本启动mysql服务的命令是 net start mysql,这是怎么回事?

这里的mysql是一个服务名称,执行services.msc,可以看到mysql服务,执行路径是 xxx\mysqld --defaults-file=xxx,可认为mysql这个服务是mysqld 的别名,net start mysql 就是运行 mysqld程序。

mysqld是用来启动mysql数据库的命令,mysql是打开并执行sql语句的命令。

这两个都在mysql安装文件夹的bin目录下。

mysqld:SQL后台程序(即MySQL服务器)。要想使用客户端程序,该程序必须运行,因为客户端通过连接服务器来访问数据库。 

mysql:交互式输入SQL语句或从文件以批处理模式执行它们的命令行工具。

mysqld,也被称为MySQL服务器,是主程序,大部分工作用于MySQL的安装。

数据和日志可以不用管

如何添加全局变量?

vim /etc/profile
   1 :首先在此文件中设置环境变量;
   2:export  设置好的环境变量.

export PATH="变量路径"

举例

export JAVA_HOME=/usr/java/jdk1.8.0_60
export PATH=$JAVA_HOME/bin:$PATH

更新权限  source profile

 /etc/profile:该文件是用户登录时,操作系统定制用户环境时使用的第一个文件,应用于登录到系统的每一个用户。

       /etc/profile.d/xxx.sh:/etc/profile.d 目录下的所有xxx.sh 文件,都会被 /etc/profile 执行,所以对于用户自定义的全局环境变量,一般都是在 /etc/profile.d/目录下新建一个.sh 脚本文件,把自己想要定义的变量写入这个脚本中即可。那么系统在启动之后,就会自动执行,并且对所有用户都是可见的。

   ~/.bash_profile:每个用户都可以使用该文件,来输入属于自己的shell信息。当用户登录时,该文件仅仅执行一次!!!默认情况下,他设置一些环境变量,执行用户的.bashrc 文件。(推荐!!!)

      ~/.bashrc:该文件包含专属于你自己的 bash shell 的 bash 信息。当用户登录以及每次打开新的shell时,该文件都会被读取。(不推荐将变量放置在这儿,因为每打开一个shell,这个文件就会被读取一次,效率肯定是有影响的)

如何开启mysql

因为mysql会用到外部文件,因此搞个权限还是有必要的

sudo mkdir -p /data/mysql/data

sudo mkdir -p /var/run/mysqld

说实在的,不知道为嘛要新搞个用户什么的

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。

MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

而且基本各大linux都删除了mysql,真是有够离谱

1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。

2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。

3、 text不设置长度, 当不知道属性的最大长度时,适合用text。

按照查询速度: char最快, varchar次之,text最慢。

char:char(n)中的n表示字符数,最大长度是255个字符; 如果是utf8编码方式, 那么char类型占255 * 3个字节。(utf8下一个字符占用1至3个字节)

varchar:varchar(n)中的n表示字符数,最大空间是65535个字节, 存放字符数量跟字符集有关系;

     MySQL5.0.3以前版本varchar(n)中的n表示字节数;

     MySQL5.0.3以后版本varchar(n)中的n表示字符数;

PS:varchar实际范围是65532或65533, 因为内容头部会占用1或2个字节保存该字符串的长度;如果字段default null(即默认值为空),整条记录还需要1个字节保存默认值null。

       如果是utf8编码, 那么varchar最多存65532/3 = 21844个字符。

顺便提一句: 当表有成百上千万条数据时, 就要使用MySQL的分区(partition)功能, 原理有点像分治算法,就是将数据切割成多个部分。

索引组织表

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表(index organized table).在InnoDB存储引擎表中,每张表都有个主键(Primary Key),如果在创建表时没有显式地定义主键,则InnoDB存储引擎会按如下方式选择或创建主键

1:首先判断表中是否有非空的唯一索引,如果有,则该列即为主键

2:如果不符合上述条件,InnoDB存储引擎自动创建一个6字节大小的指针

当表中有多个非空唯一索引时,InnoDB存储引擎将选择建表时第一个定义的非空唯一索引为主键。

从InnoDB存储引擎的逻辑存储结构看,所有数据都被逻辑地存放在一个空间中,称之为表空间(tablespace).表空间又由段(segment),区(extent)、页(page)组成。

MyISAM:对整张表进行加锁,锁全表而不是行。在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。在写的时候,或者排他锁,会把整个表进行加锁,而其他的连接请求(读和写)都处于等待。

MySQL的表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

1. InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语言放在begin和commit之间,组成一个事务; 

2. InnoDB支持外键,而MyISAM不支持。对一个包含外键的InnoDB表转为MYISAM会失败; 

3. InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。

       MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

       也就是说:InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值;而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

如何选择:

    1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;

    2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。

    3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;

    4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用InnoDB,至少不会差。

MySQL主键设计原则

  • MySQL主键应当是对用户没有意义的。
  • MySQL主键应该是单列的,以便提高连接和筛选操作的效率
  • 永远也不要更新MySQL主键
  • MySQL主键不应包含动态变化的数据,如时间戳、创建时间列、修改时间列等
  • MySQL主键应当有计算机自动生成。

就是自增ID,怎么设计呢?

CREATE TABLE user_t (

id int(11) NOT NULL AUTO_INCREMENT,

user_name varchar(40) NOT NULL,

password varchar(255) NOT NULL,

age int(4) NOT NULL,

PRIMARY KEY (id)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
复制代码
如上所示,通常会给主键加上 not null,auto_increment ,primary key 甚至UNSINGED 这些属性,我们可以通过这些属性去了解主键他的特性。

实际上就这么几种比较重要的属性,非空是最重要的属性了,然后就没了。

int(M) 在 integer 数据类型中,M 表示最大显bai示宽度。du

在 int(M) 中,M 的值跟 int(M) 所占多少存储空间并无任何zhi关系。 int(3)、daoint(4)、int(8) 在磁盘上都是占用 4 btyes 的存储空间。说白了,除了显示给用户的方式有点不同外,int(M) 跟 int 数据类型是相同的。

综合上述:int(10)表示的是数据显示的长度为10位。

表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

按理说你应该用DATETIME或者TIMESTAMP,对于跨时区的业务,TIMESTAMP更为合适。用TIMESTAMP吧。

view,是mysql的一项功能,是一种逻辑表,本身并不包含数据,而是从基本表生成的

可以简化操作,突出重点,提高数据安全性等等,也是通过sql语句创建的

diagram,是可视化图表,可以清晰看出表结构与其他表的关联性

procedure,存储过程,是一组完成某项功能的sql语句集合,存起来方便以后使用,所以叫存储过程

也是通过sql语句构建,有封装性与高性能的特点

function,顾名思义,函数了,例如NOW()是返回当前时间

trigger,触发器,在满足某种条件时触发,可以协助应用在数据库端确保数据的完整性

例如,插入一个用户条目后触发在日志中写入,这样。

  <select id="selectByGenderAndAge" resultMap="BaseResultMap" >
    select *  from employee where gender = #{param1} and age = #{param2}
  </select>
匿名传参,注意只能按顺序来,并且只能是固定名称,优点是简单,一个配置都没有

第二种

List<Employee> selectByGenderAndAge( @Param("gender") Short gender,@Param("age") String age );
<select id="selectByGenderAndAge" resultMap="BaseResultMap" >
  select * from employee where gender = #{gender} and age = #{age}
</select>
然后直接用就可以了,这个是最好的方式。

第三种使用map传参,这个更符合设计模式

<select id="selectByMapParams" resultMap="BaseResultMap" parameterType="map">
  select * from employee where gender = #{gender} and age = #{age}
</select>
注意也可以直接使用名字来进行调用。

@ApiOperation(value = "多个参数查询_通过Java Bean传递多个参数")
@PostMapping("findByBeans")
public ResultMsg findByBeans(@RequestBody Employee employee)
{
    List result= employeeMapper.selectByBeans(employee);
    return ResultMsg.getMsg(result);
}
这个问题 是你没法不进行处理就直接来造吧?

还可以直接使用json,越来越邪乎。

在MyBatis(使用版本3.4.6,早期版本不支持)中insert、update、delete语句的返回值可以是Integer、Long和Boolean。在定义Mapper接口时直接指定需要的类型即可,无需在对应的<insert><update><delete>标签中显示声明。

对应的代码在 org.apache.ibatis.binding.MapperMethod 类中,如下:

  • 对于insert、update、delete语句,MyBatis都会使用 rowCountResult 方法对返回值进行转换;
  • rowCountResult 方法会根据Mapper声明中方法的返回值类型来对参数进行转换;
  • 对于返回类型为Boolean的情况,如果返回的值大于0,则返回True,否则返回False

真牛逼。

Entity必须与mapper完全一致,若不一致用map代替才行。

手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。使用原生的Mybatis编写持久层逻辑时,所需要的代码是比较繁琐的,需要定义Mapper接口和Mapper.xml文件,每一个方法都需要编写对应的sql语句,会存在很多大量的重复工作,使用MP之后,对通用的方法做了高度的抽取,避免了很多重复工作,可以非常快速的实现了单表的各种增、删、改、查操作。除此之外,MP还提供了其他的高级功能,如:枚举、插件、ActiveRecord、SQL注入等。 本课程全面讲解了Mybatis-Plus框架的使用,从快速入门到原理分析再到插件的应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握MP的使用,从而使Mybatis的的开发更加的高效,达到事半功倍的效果。 适应人群 有一定的Java以及Mybatis框架的基础。 从0开始全面讲解Mybatis-Plus框架 l 快速入门 n Mybatis + MP 整合 n Spring + Mybatis + MP 整合 n SpringBoot + Mybatis + MP 整合 n 通用CRUD的全面讲解 n 配置 l 高级用法 n 条件构造器 n Oracle 主键Sequence n 通用枚举n ActiveRecord n 逻辑删除 l 插件 n 执行分析插件 n 性能分析插件 n 乐观锁插件 主讲内容 章节一:快速入门 1. Mybatis-Plus简介 2. 快速入门 3. 通用CRUD 4. 配置 5. 条件构造器 章节二:进阶 1. ActiveRecord 2. Oracle 主键Sequence 3. 插件 章节三:高级应用 1. Sql 注入器 2. 自动填充功能 3. 逻辑删除 4. 通用枚举 5. 代码生成器 6. MybatisX 快速开发插件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值