MySQL高级 第1章MySQL简介

63 篇文章 5 订阅
63 篇文章 0 订阅

1MySQL简介

1.什么是Mysql

  1. MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。
  2. Mysql是开源的,可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。
  3. MySQL使用标准的SQL数据语言形式。
  4. Mysql可以允许于多个系统上,并且支持多种语言。这些编程语言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
  5. MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。

2. Mysql高手是怎样练成的

  1. 数据库内部结构和原理      
  2. 数据库建模优化
  3. 数据库索引建立  
  4. SQL语句优化  
  5. SQL编程(自定义函数、存储过程、触发器、定时任务)   
  6. mysql服务器的安装配置
  7. 数据库的性能监控分析与系统优化  
  8. 各种参数常量设定
  9. 主从复制
  10. 分布式架构搭建、垂直切割和水平切割  
  11. 数据迁移      
  12. 容灾备份和恢复    
  13. shellpython等脚本语言开发
  14. 对开源数据库进行二次开发

    2.在Linux上安装Mysql

    2.1 准备工作

    2.1.1 检查当前系统是否安装过Mysql

    (1)CentOS6环境下

    命令:rpm -qa|grep mysql

默认Linux在安装的时候,自带了mysql相关的组件。

先卸载系统自带的mysql,执行卸载命令rpm -e --nodeps  mysql-libs

(1)CentOS7环境下

命令:rpm -qa|grep mariadb

默认Linux(CentOS7)在安装的时候,自带了mariadb(mysql完全开源版本)相关的组件。

先卸载系统自带的mariadb,执行卸载命令rpm -e --nodeps  mariadb-libs

2.1.2 检查/tmp文件夹权限

查看/tmp文件夹权限:

赋予其最大权限:

2.2 Mysql的安装

安装的版本是mysql 5.5,官网下载地址:http://dev.mysql.com/downloads/mysql/

①将rpm安装包拷贝到opt目录下

②在安装目录下执行rpm安装

rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm

rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm

安装完成后,出现如下警告,需要为软件设置root用户的密码。

③查看是否安装成功:mysqladmin --version

或者也可以通过rpm命令来查看:

④设置用户和密码: mysqladmin –u root password xxxxxx

2.3 Mysql服务

2.3.1 Mysql服务的启动和停止

查看状态:service mysql status

启动服务:service mysql start

停止服务:service mysql stop

重启服务:service mysql restart

启动之后,查看进程:

2.3.2 Mysql的安装位置

参数

路径

解释

备注

--datadir

/var/lib/mysql/

mysql数据库文件的存放路径

 

--basedir

/usr/bin

相关命令目录

mysqladmin mysqldump等命令

--plugin-dir

/usr/lib64/mysql/plugin

mysql插件存放路径

 

--log-error

/var/lib/mysql/jack.atguigu.err

mysql错误日志路径

 

--pid-file

/var/lib/mysql/jack.atguigu.pid

进程pid文件

 

--socket

/var/lib/mysql/mysql.sock

本地连接时用的unix套接字文件

 

 

/usr/share/mysql

配置文件目录

mysql脚本及配置文件

 

/etc/init.d/mysql

服务启停相关脚本

 

 

2.3.3 Mysql服务的自启动

Mysql服务是开机自动启动的!

如果要取消开机自启动,则输入命令ntsysv

出现以下界面:

使用空格取消选中,然后按TAB确定!

 

2.3.4 Mysql的重复启动问题

此时查看,多了很多进程:

尝试去登录或者操作:报错!

查看服务状态:

解决:杀死所有和mysql进程相关的操作,然后重启服务!

注意是mysqld,d代表demon,守护进程。

然后再重启:

2.4 修改字符集

2.4.1 常用命令

SQL语句

描述

备注

show databases

列出所有数据库

 

create database 库名

创建一个数据库

 

create database 库名 character set utf8

创建数据库,顺便执行字符集为utf-8

 

show create database 库名

查看数据库的字符集

 

show variables like ‘%char%’

查询所有跟字符集相关的信息

 

set [字符集属性]=utf8

设置相应的属性为utf8

只是临时修改,当前有效。服务重启后,失效。

alter database 库名character set 'utf8'

修改数据库的字符集

 

alter table 表名convert to  character set 'utf8'

修改表的字符集

 

 

实验SQL:

CREATE database mydb;

CREATE table mytable(id int,name varchar(30));

insert into mytable(id,name) values (1,'jack');

insert into mytable(id,name) values (2,'张三')

 

2.4.2 字符集乱码原因

如果在建库建表的时候,没有明确指定字符集,则采用默认的字符集latin1,其中是不包含中文字符的。查看默

认的编码字符集:

2.4.3 永久修改

在/usr/share/mysql/ 中找到my.cnf的配置文件,拷贝其中的my-huge.cnf 到 /etc/  并命名为my.cnf 。添加以下内容后再重启服务。

注意:必须将文件拷贝到指定路径,且名称为my.cnf

再次查看:

注意:已经创建的数据库的设定不会发生变化,参数修改只对新建的数据库有效!

2.5 设置大小写不敏感

①查看大小写是否敏感:show variables like '%lower_case_table_names%'

windows系统默认大小写不敏感,但是linux系统是大小写敏感的

②设置大小写不敏感:在my.cnf这个配置文件 [mysqld] 中加入 lower_case_table_names = 1 ,然后重启服务器

属性设置

描述

0

大小写敏感

1

大小写不敏感。创建的表,数据库都是以小写形式存放在磁盘上,对于sql语句都是转换为小写对表和DB进行查找

2

创建的表和DB依据语句上格式存放,凡是查找都是转换为小写进行

 

注意:如果要设置属性为大小写不敏感,要在重启数据库实例之前就需要将原来的数据库和表转换为小写,否则将找不到数据库名。在进行数据库参数设置之前,需要掌握这个参数带来的影响,切不可盲目设置。

2.6 sql_mode

    sql_mode定义了对Mysql中sql语句语法的校验规则!

sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。

2.6.1 sql_mode常用的值

ONLY_FULL_GROUP_BY

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO

该值影响自增长列的插入。默认设置下,插入0NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了

STRICT_TRANS_TABLES

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE

在严格模式下,不允许日期和月份为零

NO_ZERO_DATE

设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告

ERROR_FOR_DIVISION_BY_ZERO

INSERTUPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER

禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT

"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

ORACLE

设置等同于PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USER

 

2.6.2 查看和修改

①查看当前的sql_mode:   select @@sql_mode;

②sql_mode的影响案例:group by 查询语法错误!

CREATE TABLE mytbl2 (id INT,NAME VARCHAR(200),age INT,dept INT);

INSERT INTO mytbl2 VALUES(1,'zhang3',33,101);

INSERT INTO mytbl2 VALUES(2,'li4',34,101);

INSERT INTO mytbl2 VALUES(3,'wang5',34,102);

INSERT INTO mytbl2 VALUES(4,'zhao6',34,102);

INSERT INTO mytbl2 VALUES(5,'tian7',36,102);

查询每个dept中年龄最大的人:SELECT NAME,dept,MAX(age) FROM mytbl2 GROUP BY dept;

正确写法:SELECT id,name,ab.dept,ab.maxage FROM mytbl2 m INNER JOIN(SELECT dept,MAX(age)maxage FROM mytbl2 GROUP BY dept)ab ON ab.dept=m.dept AND m.age=ab.maxage;

③临时修改 sql_mode:   set @@sql_mode=’’;

④永久修改,需要在配置文件my.cnf中修改:

[mysqld] 下添加 sql_mode='' 然后重启mysql即可

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。(关键词java,Linux,大数据,尚硅谷,IT)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值