MySQL

一.MySQL概述

1.常见数据库

Oracle(神喻):甲骨文

DB2:IMB

SQL Server:微软

Sybase:赛尔斯

MySQL:甲骨文

2.理解数据库

我们现在所说的数据库泛指“关系型数据库管理系统(RDBMS)“,即”数据库服务器“

3.数据库就是一个多行多列的表格,需要指定表的列数,以及列名称,列类型等形象。下图为表结构:

4.当把表格创建好之后,就可以向表格中添加数据了。下图为表记录:

总结:

RDBMS=管理员(manager)+仓库(database)

database=N个table

table:

表结构:定义表的列名和列类型

表记录:一行一行的记录

二.MySQL安装

1.Linux yum安装mysql5.7

wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

rpm -ivh mysql80-community-release-el7-3.noarch.rpm

yum repolist all |grep mysql

yum -y install yum-utils

yum-config-manager --disable mysql80-community

yum-config-manager --enable mysql57-community

yum install mysql-community-server

#sudo yum install mysql-community-{server,client,common,libs}-* mysql-5.*

grep "password" /var/log/mysqld.log

2.Linux编译安装 mysql5.7

1.创建mysql账户

# useradd -r mysql -M -s /sbin/nologin

----------------------------------------------------------------------------------------------------

2.从官网下载.gz的源码安装包

mysql-5.7.20.tar.gz

boost_1_59_0.tar.gz

解压mysql压缩包,在解压boost安装包,把boost压缩包解压到mysql目录里面去。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

3.编译安装

编译安装有一定的系统安装条件,也就时对其他包的依赖。

这时候我们就要安装一些依赖包。下面呢,我们来讲一下,这些依赖包的作用以及需要使用的版本。

1> cmake

2> make3.75

3> gcc4.4.6

4> Boost1.59.0

5> bison2.1

6> ncurses

7>ncurses

# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake

------------------------------------------------------------------------------------------------------------

4.配置:可以写入一个脚本执行

首先需要cd到解压的mysql目录(#cd mysql-5.7.22 ),执行下面的命令

#cmake . -DWITH_BOOST=boost_1_59_0/ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/usr/local/mysql/data -DINSTALL_MANDIR=/usr/share/man -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1

[[email protected] ~]# cmake . \

-DWITH_BOOST=boost_1_59_0/ \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  MySQL的安装目录

-DSYSCONFDIR=/etc \  存放 配置文件的位置 (默认可以不安装配置文件)

-DMYSQL_DATADIR=/usr/local/mysql/data \  数据目录的存放位置,同时错误日志文件也会在这个目录

-DINSTALL_MANDIR=/usr/share/man \    帮助文档

-DMYSQL_TCP_PORT=3306 \    默认端口

-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \  sock文件位置,用来做网络通信的,客户端连接服务器的时候会用到

-DDEFAULT_CHARSET=utf8 \    默认字符集。字符集的支持,可以调

-DEXTRA_CHARSETS=all \  扩展的字符集支持所有的

-DDEFAULT_COLLATION=utf8_general_ci \  支持的utf8字符集

-DWITH_READLINE=1 \    上下翻历史命令

-DWITH_SSL=system \    使用私钥和证书登陆(公钥)  可以加密。 适用与长连接。坏处:速度慢

-DWITH_EMBEDDED_SERVER=1 \  嵌入式数据库

-DENABLED_LOCAL_INFILE=1 \    从本地倒入数据,不是备份和恢复。

-DWITH_INNOBASE_STORAGE_ENGINE=1  默认的存储引擎,支持外键

这些配置参数我偶有在下边做解释,大家一会看一下。

红字标识部分为有外网情况下使用

提示:boost也可以使用如下指令自动下载,如果不下载bost压缩包,把下面的这一条添加到配置中第二行

-DDOWNLOAD_BOOST=1/

提示一下内容标识配置成功:

-- Configuring done                    配置完成

-- Generating done                      生成完成

#make -g 数字(增加内核CPU)

# make -j 2 &&make install

-----------------------------------------------------------------------------------------------------------

5.初始化

需要先进入mysql的安装目录。

命令如下:

#cd /usr/local/mysql

# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

Ysnaf2O)>rRL

配置MySQL配置文件my.cnf

第一种:系统默认的配置文件

在5.6中常常使用源码包提供的默认配置文件,而在生产环境中一般是进行自定义配置文件(在5.7中会遇到support-files下没有my-default.cnf文件的情况,这种情况直接选择自定义配置 )

# cp support-files/my-default.cnf  /etc/my.cnf

第二种:自定义配置(生产环境常用)

[root@mysql1 mysql]# vim /etc/my.cnf

[mysqld]

basedir=/usr/local/mysql        安装目录

datadir=/usr/local/mysql/data  数据存放目录

------------------------------------------------------------------------------------------------------------

6.启动mysql

# cp support-files/mysql.server /etc/init.d/mysqld  //生成mysql.server脚本(system V)

# chmod 755 /etc/init.d/mysqld(默认是755,安全起见敲一下)

# chkconfig --add mysqld  // 给MySQL设置启动项

# chkconfig mysqld on      //给MySQL设置开机启动

# service mysqld start      // 执行启动命令

# /etc/init.d/mysqld start

# netstat -tanp | grep 3306

--------------------------------------------------------------------------------------------------------

7.修改密码:

方法一:

#/usr/local/mysql/bin/mysqladmin -u root -p'旧密码'  password '新密码'

或者

利用初始密码进入MySQL

#./bin/mysql -uroot -p'Psxf*=g/y28i'

mysql> SET PASSWORD=PASSWORD('123');

方法二:

>set password=password('123')

----------------------------------------------------------------------------------------------------------

8.添加环境变量:

# vi ~/.bash_profile

export PATH=$PATH:/usr/local/mysql/bin

# source  ~/.bash_profile

之后就可以在任何地方使用mysql命令登陆Mysql服务器:

#mysql  -u root -p新密码

-------------------------------------------------------------------------------------------------------------

9.登陆mysql

# /usr/local/mysql/bin/mysql -u root -p‘123’

然后:shows databases      // 查看数据库

退出:exit

----------------------------------------------------------------------------------------------------------

10.关闭MySQL服务

#service mysqld stop

强制关闭退出mysql服务:(非常时期,非常手段)

pkill -9 进程名

----------------------------------------------------------------------------------------------------------

重新安装MySQL的步骤:(之前安装过MySQL)

1.删除安装目录:rm -rf  /usr/local/mysql

2.删除解压包目录:rm -rf    ..../mysql.5.7.22----或者只删除CMakeCache.txt

3.删除mysql用户

4.删除mysql配置文件 /etc/my.cnf

三.SQL语句概述

SQL

1.什么是SQL:结构化查询语音(Structured Query Language)。

2.SQL的作用:客户端使用SQL来操作服务器

3.SQL标准(例如SQL99,即1999年制定的标准):

>由国际标准化组织(ISO)制定,对DBMS的统一操作方式(例如相同的语句可以操作:mysql、oracle等)

4.SQL方言

>某种DBMS不只会支持SQL标准,而且会有一些自己独有的语法,这就称之为方言,例如limit语句只在MySQL中可以使用

SQL语法

1.SQL语句可以在单行或多行书写,以分号结尾

2.可使用空格和缩进增强语句的可读性

3.MySQL不区别大小写,建议使用大写

SQL语句分类

1.DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;

>创建、删除、修改:库、表结构

2.DML(Data Manipulation Language):数据库操作语言,用来定义数据库记录(数据);

>增、删、改:表记录

3.DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;

4.DQL*****(Data Query Language):数据查询语音,用来查询记录(数据)

DDL:数据库或表的结构操作

DML:对表的记录进行更新(增、删、改)

DQL:对表的记录的查询

DCL:对用户的创建,以及授权

四.DDL(数据定义语言)之操作数据库

1.数据库

• 查看所有数据库:SHOW DATABASWS;

• 切换(选择要操作的)数据库:USE 数据库名

• 创建数据库:CREATE DATABASE [IF NOT EXISTS] mydb1 [CHARSET=uft8]

• 删除数据库:DROP DATABASE [IF EXISTS] mydb1

• 修改数据库编码:ALTER DATABASE mydb1 CHARACTER SET uft8(一个汉字3个字节)

2.数据类型(列类型)

int:整形

double:浮点型,例如double(5,2)表示最多5位,其中必须有2位小数,及最大值为999.99;

decimal:浮点型,在表单钱方面使用,因为不会出现精度缺失问题(十进制运算):

char:固定长度字符串类型:char(255),数据长度不足指定长度,补足到指定长度

varchar:可变长度字符串类型:varchar(65535),zhangSan

text(clob):字符串类型;

>很小 tinytext 2^8-1

>小    text 2^16-1

>中    mediumtext 2^24-1

>大    longtext 232-1

blob:字节类型:

>很小 tinyblob 2^8-1(256B)

>小    blob 2^16-1(64k)

>中    mediumblob 2^24-1 (16M)

>大    longblob 2^32-1 (4G)

data:日期类型,格式为:yyyy-MM-dd;

time:时间类型,格式为:hh:mm:ss

timestamp:时间戳类型;

3.表

• 创建表;

CREATE TABLE [IF NOT EXISTS] 表名(

列名 列类型,

列名 列类型,

····

列名 列类型

);

•查看当前数据库中所有表名称:SHOW TABLES;

• 查看指定表的创建语句:SHOW CRERTE TABLE 表名(了解);

•查看表结构:DESC 表名;

• 删除表:DROP TABLE 表名;

• 修改表:前缀:ALTER TABLE 表名

>修改之添加列:

ALTER TABLE 表名 ADD (

列名 列类型,

列名 列类型,

····

);

>修改之修改列类型(如果被修改的列已存在数据,那么新的类型可能会影响到已存在的数据):    ALTER TABLE 表名 MODIFY 列名 列类型;

>修改之修改列名:ALTER TABLE 表名 CHANGE 原列名 新列名 列类型;


>修改之删除列:ALTER TABLE 表名 DROP 列名;


>修改表名称:ALTER TABLE 原表名 RENAME TO 新表名;


五.DML(数据操作语言)之INSERT

DQL:SELECT * FROM 表名

DML(数据操作语言,它是对表记录的操作(增、删、改)

1.插入数据

• INSERT INTO 表名 (列名1,列名2,·····) VALUES(列值1,列值2····);

>在表名后给出要插入的列名,其他没有指定的列等同于插入null值,所以 插入记录总是插入一行,不可能是半行。

//插入所有列

//插入部分列,没有插入的列,为默认值null

>在VALUES后给出的列值,值的顺序和个数必须与前面指定的列对应

• INSERT INTO 表名 VALUES(列值1,列值2····);

>没有给出要插入的列,那么表示插入所有列。

>值的个数必须是该列的个数。

>值的顺序,必须与表创建时给出的列的顺序相同。

六.DML(数据操作语言)之修改记录

2.修改数据

• UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ····· [WHERE 条件]

• 条件(条件可选的):

>条件必须是一个boolean类型的值或表达式:UPDATE t_person SET gender='男', age=age+1 WHERE sid='1';

>运算符:=、!=、<>、>、<、>=、<=、BETWEEN....AND、IN(...)、IS NULL、NOT、OR、AND

修改全部

修改区间内(between·····and·····)

修改满足两个条件 in('a','b')

set 后的=为赋值,如age=null,where中为age is null

七.DML(数据操作语言)之DELETE

3.删除数据

• DELETE FROM 表名 [WHERE 条件];

• TRUNCATE TABLE 表名:TRUNCATE是DDL语句,它是先删除DROP该表,再CREATE该表,且无法回滚。

在数据库中所有的字符串类型,必须使用单引号,不能使用双引号

日期类型也要使用单引号

八.DCL(数据控制语言)

1.创建用户

• CREATE USER 用户名@'IP地址' IDENTIFIED BY ‘密码’;

>用户只能在指定的ip上登录

• CREATE USER 用户名@'%' IDENTIFIED BY ‘密码’;

>用户可以在任意IP地址上登录

2.给用户授权

• GRANT 权限1,权限2,····,权限n ON 数据库.* TO 用户名@'IP地址'

>权限、用户、数据库

>给用户分派在指定的数据库上的指定权限

>例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;

• 给本地登录用户user1用户分派在mydb1数据库上的create,alter,drop,insert,update,delete,select权限

• GRANT ALL ON 数据库.* TO 用户名@IP地址;

>给用户分派指定数据库上的所有权限

3.撤销授权

• REVOKE 权限1,····,权限n ON 数据库.* FROM 用户名@IP地址;

>撤销指定用户在指定数据库上的指定权限3

>例如:REVOKE CREATE,ALTER,DROP ON mydb1.* FROM user1@localhost;

• 撤销user1用户在mydb1数据库上的create、alter、drop权限

4.查看权限

• SHOW GRANTS FOR 用户名@IP地址;

>查看指定用户的权限

5.删除用户

• DROP USER 用户名@IP地址

九.DQL(数据查询语音)之基础查询之列控制

一、基本查询

1.字段(列)控制

1)查询所有列

SELECT * FROM 表名;

SELECT * FROM emp;

>其中“*”表示查询所有列

2)查询指定列

SELECT 列1(,列2,····列N) FROM 表名

SELECT username,password FROM jo_user;

3)去除重复行查询

当查询结果中的多行记录一模一样,只显示一行,

SELECT DISTINCT * | 列1(,列2,····,列n) FROM 表名;

select distinct * from jo_user;

4)列运算

• 数量类型的列可以做加、减、乘、除运算

SELECT sal*1.5 FROM emp;

SELECT sal+com FROM emp;

• 字符串类型可以做连续运算

SELECT CONCAT('$',sal)

• 转换NULL值

有时需要把NULL转换为其他值,例如com+1000时,如果com存在NULL值,那么NULL+1000还是NULL,而我们这时希望吧NULL当前当做0来运算。

SELECT IFNULL(comm,0)+1000 FROM emp;

>IFNULL(comm,0),如果comm中存在NULL值,那么当成0来运算

• 给列起别名

当使用列运算后,查询出的结果集中的列名称很不好看,这时我们需要给列起个别名,这样在结果集中就显示别名了

SELECT IFNULL(comm,0)+1000 AS 奖金 FROM emp;

>其中AS可以省略

十.DQL(数据查询语言)之条件查询

2.条件控制

1)条件查询

• SELECT * from emp WHERE sal>20000;

SELECT * from emp WHERE comm is not null;

SELECT * from emp WHERE sal between 20000 and 30000;

SELECT * from emp WHERE job in('经理','分析师');

十一.DQL(数据库查询语言)之模糊查询

2)模糊查询

SELECT * FROM emp WHERE ename like '张';

>like只匹配一个字符

SELECT * from emp WHERE ename like '张_';

>'_'代表一个字符

SELECT * from emp WHERE ename like '张%';

>其中%匹配0~N个任意字符

SELECT * from emp WHERE ename like '%张%';

>查询姓名中以张开头或是姓名中有张

SELECT * from emp WHERE ename like ‘%';

>这个条件等同于不存在,但如果姓名为NULL的查询不出来

十二.DQL(数据查询语言)之排序

二、排序

1)升序

SELECT * FROM emp ORDER BY sal ASC;

>按sal排序,升序

>其中ASC是可以省略

2)降序

SELECT * FROM emp ORDER BY sal DESC;

>按comm排序,降序

>其中DESC不能省略

3)使用多列作为排序条件

SELECT * FROM WHERE emp ORDER BY sal ASC,comm DESC

十三.DQL(数据查询语言)之聚合函数

三、聚合函数

聚合函数用来做某列的纵向运算

1)COUNT

SELECT COUNT(*) FROM emp;

>计算emp表中所有列都不为NULL的记录的行数

SELECT COUNT(comm) FROM emp;

>计算emp表中comm列不为NULL的记录的行数

2)MAX

SELECT MAX(sal) FROM emp;

>查询最高工资

3)MIN

SELECT MIN(sal) FROM emp;

>查询最低工资

4)SUM

SELECT SUM(sal) FROM emp;

>查询工资总和

5)AVG

SELECT AVG(sal) FROM emp;

>查询平均工资

十四.DQL(数据库查询语言)之分组查询

四,分组查询

分组查询是把记录使用某一列进行分组,然后查询组信息。

例如:查看所有部门的记录数,分组列和聚合函数

select job 职业, count(*) 人数,max(sal) 最高工资 from emp group by job;

select deptno,count(*) from emp where sal>15000 group by deptno;

select deptno,count(*) from emp where sal>15000 group by deptno having count(*)>=2;

执行顺序

select

from

where

group by

having

order by

十五.DQL(数据库查询语言)之limit方言

五、limit子句(方言)

LIMIT用来限定查询结果的起始行,以及总行数。

例如:查询起始行为第5行,一共查询3行记录

SELECT * FROM emp LIMIT 4,5;

>其中4代表从第五行开始,其中5表示一共查询5行。(当前页-1)*每页记录数

你可能感兴趣的:(MySQL)