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

[root@mysql-5.7.17 ~]# 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)*每页记录数

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,607评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,239评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,960评论 0 355
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,750评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,764评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,604评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,347评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,253评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,702评论 1 315
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,893评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,015评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,734评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,352评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,934评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,052评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,216评论 3 371
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,969评论 2 355

推荐阅读更多精彩内容

  • mysql数据库中 :database : 文件夹table : 数据表(数据文件) 进入mysqlmysql -...
    赋闲阅读 564评论 0 0
  • 一、上堂回顾 1.概念​ 数据库管理系统,数据库,表​ SQL的分类:DDL、DML、DQL、DCL2.数据库的使...
    WenErone阅读 419评论 0 0
  • 数据库 数据库介绍 之前通过IO流操作文件保存数据弊端1、效率低2、一般只能保存少量的数据3、只能保存文本数据 什...
    沉浮_0644阅读 798评论 0 0
  • 接下来的一些内容,我们需要提前学一些简单的sql语句,方便大家理解接下来的知识。 DDL—数据定义语言(Creat...
    不排版阅读 418评论 0 1
  • 1. 了解SQL 1.1 数据库基础 ​ 学习到目前这个阶段,我们就需要以某种方式与数据库打交道。在深入学习MyS...
    锋享前端阅读 1,071评论 0 1