MySQL数据库(一)

From 太阳(农民洋)

编者简介

我是太阳【QQ:642619606】,一个混迹于IT圈的小角色,没有过多的东西可以分享给大家,就把平时的一些基础型,入门型的内容整理哈与大家分享。希望可以帮助到你们。

MySQL数据库(一)

一、MySQL简介
1、MySQL数据库是什么?

数据库可以理解为存放东西的仓库,只不过这里是用来存放数据信息的。MySQL数据库简称MySQL,是一款由瑞典MySQL AB公司开发并且广泛应用在于小型企业或者组织中的小型数据管理系统,目前属于 Oracle旗下公司。MySQL是最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。MySQL数据库因其体积小、速度快、总体拥有成本低受到中小企业的热捧,只是MySQL数据库自开发以来已经多次易主,所以很多用户对于MySQL数据库的前途很难乐观起来。
MySQL数据库是基于Linux操作系统开发出来的数据库,众所周知Linux是开放源码的操作系统,所以MySQL数据库也是开放源码的免费数据库,这也是MySQL数据库的优点,虽然其功能的多样性和性能的稳定性差强人意,但是依然有很多用户在使用。

MySQL数据库虽说功能不算强大,但是优点也是不少的:
1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。

2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、NovellNetware、OpenBSD、OS/2
 Wrap、Solaris、Windows等多种操作系统。
 
3.为多种编程语言提供了API。这些编程语言包括C、C++、Python、Java、Perl、
PHP、Eiffel、Ruby和Tcl等。

4.支持多线程,充分利用CPU资源。

5.优化的SQL查询算法,有效地提高查询速度。

6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库
而嵌入到其他的软件中。

7.提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用
作数据表名和数据列名。

8.提供TCP/IP、ODBC和JDBC等多种数据库连接途径。

9.提供用于管理、检查、优化数据库操作的管理工具。

10.支持大型的数据库。可以处理拥有上千万条记录的大型数据库。

11.支持多种存储引擎。

12.Mysql是开源的,所以你不需要支付额外的费用。

13.MySQL使用标准的SQL数据语言形式。

14.Mysql对PHP有很好的支持,PHP是目前的Web开发语言。

15.Mysql是可以定制的,采用了GPL协议,你可以修改源码来开发自己的Mysql系统。

MySQL数据库之所以被中小型企业喜爱也离不开以上这些优点,MySQL数据库基本可以
满足中小型企业对于数据库的所有需求了,也因为它是免费的又是开源的,也为MySQL
数据库赢得了不小的生存空间。
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server?

他们均是一个数据库软件,都具备两个主要功能:
a. 将数据保存到文件或内存中(存储数据)
b. 接收特定的命令,然后对文件进行相应的操作(增删改查)

3、什么是SQL ?

答:MySQL可以接受命令请求并做出相应的操作,由于命令中可以包含添加、修改、删除、查询文件、获取文件内容等众多操作,对于编写的命令就称为SQL语句。

二、MySQL下载及安装
想要正常使用MySQL数据库来存储并操作数据,则先需要:
   a. 安装MySQL服务端
   b. 安装MySQL客户端(可有可无)
   c. 确保客户端正常连接服务端
   d. 客户端发送命令给服务端,服务端接受命令并执行相应操作(增删改查)。

下载MySQL数据库:
下载地址:http://dev.mysql.com/downloads/mysql/
Windows下安装MySQL数据库:
参考步骤:https://www.cnblogs.com/whaben/articles/6687544.html
Linux下安装MySQL数据库:
参考步骤:https://www.cnblogs.com/luckycn/p/7289995.html
Mac下安装MySQL数据库:
参考步骤:https://www.cnblogs.com/ceshi2016/p/6490406.html

数据库关系图:

在这里插入图片描述

数据库登录

方法一:
安装数据库完成后,直接打开客户端(如图选项)
登录快捷入口
打开后出现下图效果,需要输入安装时设置的密码:
输入登录密码
登录成功后如图所示:
登录成功

如果忘记密码了也不用担心,可以修改登录密码(最好不要忘),具体操作如下:
  Windows系统下具体操作:
  1、停止服务:
  方法1:使用dos命令net stop mysql即可;使用这种方式MySQL服务必须为安装的服务,
  否则会出现服务名无效,这时可以使用第二种方法。
  方法2:进入控制面板-->管理工具 -->服务,找到MySQL服务,点击左边的停止。
  2、跳过验证:
  进入MySQL的安装路径(以默认安装路径为例)C:\Program Files\MySQL\MySQL
  Server 5.1\,找到my.ini配置文件(这些文件记录MySQL的常规参数,每次启动服务都会
  先加载此文件进行识别),在my.ini配置文件的最后一行加上skip_grant_tables,此语句
  可以忽略登录检测。
  3、修改密码:
  启动MySQL服务,进入dos环境,输入mysql -u root -p登录MySQL(如果安装时没有勾
  选添加环境变量,需要先使用cd命令进入MySQL安装目录),此时提示输入密码,输入
  任意密码回车即可进入MySQL,出现mysql>控制符,此时表示已经成功登录MySQL;
  将数据库切换至mysql库中:
  mysql> use mysql
  修改密码password为MySQL内部函数,newpswd为修改后的新密码:
  mysql> update user set password=password(‘newpswd’) where user=’root’ ;
  4、重启服务:
  将my.ini文件中加入的跳过权限语句删除或加#号注释,重启服务,使用修改后的密码登录即可
  
  Linux系统下具体操作:
  1、停止服务:
  执行:/etc/init.d/mysql stop
  你的路径不一定是/etc/init.d/mysql也可能是/etc/init.d/mysqld,可以通过find命令查找
  2、跳过验证:
  执行:/usr/local/mysql/bin/mysqld_safe--skip-grant-tables >/dev/null 2>&1 &
  若mysqld_safe的位置不一样则需要修改,不清楚可以用find命令查找
  3、修改密码:
  a.登录mysql
  执行:/usr/local/mysql/bin/mysql -u root mysql    
  b.修改密码
  mysql> update user set password=password(‘newpswd’) where user=’root’ ;  
  c.刷新MySQL权限相关表
  mysql>flush privileges    
  d.退出MySQL
  mysql>exit
  4、重启服务:
  a.关掉mysql的进程
  执行:kill all mysqld
  b.启动mysql服务
  /etc/init.d/mysql start
  
  这样就可以继续正常使用了!欢迎大家一起交流 @MEQQ:642619606
数据库基本操作

1.查看数据库中所有数据库

show databases;
默认的数据库有:
mysql 用户权限相关数据
test 用于用户测试的数据
information_schema Mysql本身架构相关的数据

2.创建数据库

UTF-8 格式
create database 数据库名 default charset utr8 collate utf8_general_ci;

GBK 格式
create database 数据库名 default character set gbk collate gbk_chinese_ci;

3.打开创建的数据库

use 数据库名称;
选择要使用的数据库

4.在数据库中创建数据表

create table 表名(
列名称 数据类型 是否可以为空,
列名称 数据类型 是否可以为空,
列名称 数据类型 是否可以为空)
engine=InnoDB default charset=utf8;

数据库参数说明:
是否为空,null表示为空,非字符串
null : 可以为空值
not null: 不可为空值

默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
create table tb1(
id int not null,
age int not null defalut 0,
num int not null
);

设置自增,如果为某列设置自增列,插入数据时无需设置此列,默认将自动递增(表中只能有一个自增列)
create table tb1(
id int not null auto_increment primary key,
age int not null defalut 0,
num int not null
)

create table tb1(
id int not null auto_increment,
age int not null defalut 0,
num int not null,
index(id)
)
注意:
1、对于自增列,必须是索引(含主键)。
2、对于自增可以设置长和起始值
show session variables like ‘auto_inc%’;
set session auto_increment_increment=2;
set session auto_increment_offset=10;
-
show global variables like ‘auto_inc%’;
set global auto_increment_increment=2;
set global auto_increment_offset=10;

设置主键,一种特殊的唯一索引,不允许有空值,如果主键使用单个列,则它的值必须唯一,如果是多列,则其组合必须唯一。
create table tb1(
id int not null auto_increment primary key,
age int not null defalut 0,
num int not null
)

create table tb1(
id int not null,
num int not null,
primary key(id,num)
)

设置外键,一个特殊的索引,只能是指定内容
creat table color(
id int not null primary key,
name char(16) not null
)
create table fruit(
id int not null primary key,
smt char(32) null ,
color_id int not null,
constraint fk_cc foreign key (color_id) references color(nid)
)

MySQL更多主键与外键的关系请参考:
http://www.cnblogs.com/programmer-tlh/p/5782451.html


MySQL数据类型请参考:
https://blog.csdn.net/weixin_43373988/article/details/83014263


5.创建完表后查看表命令

show tables;
查看当前数据库中有哪些数据表

6.查看表结构

desc 表名;
查看当前数据表的参数信息

7.修改表

alter table 表名… ;
添加列:alter table 表名 add 列名 类型
删除列:alter table 表名 drop column 列名
修改列:
alter table 表名 modify column 列名 类型; —类型
alter table 表名 change 原列名 新列名 类型; —列名,类型
添加主键:alter table 表名 add primary key(列名);
删除主键:
alter table 表名 drop primary key;
alter table 表名 modify 列名 int,drop primary key;
添加外键:
alter table 从表 add constraint 外键名称(如:FK_从表_主表) foreign key 从表(外键字段) reference 主表(主键字段);
删除外键:
alter table 表名 drop foreign key 外键名称
修改默认值:
alter table testalter_tbl alter i set default 1000;
删除默认值:
alter table testalter_tbl alter i drop default;

8.添加数据到表中

insert into 表名(列名1,列名2…) values (值1,值2…);
insert into 表 (列名1,列名2…) values (值1,值2…),(值,值,值…)
insert into 表 (列名1,列名2…) select (列名1,列名2…) from 表
往表中插入数据三种语法

8.删除表中数据

delete from 表名;
delete from 表名 where id=1 and name=“xxx”;
删除表中id=1,名字为xxx的数据

9.修改表中数据

update 表名 set name=“xxx” where id>1;
修改表中id>1的所有数据的name值

10.查询表中数据

select * from 表名;
select * from 表名 where id>1;
select id,name,gender as aa from 表名 where id>1;
查询表中id>1的所有数据/查询id>1指定参数的数据

a、条件查询
select * from 表 where id > 1 and name != ‘aa’ and num = 10;
select * from 表 where id between 5 and 15;
select * from 表 where id in (10,20,30);
select * from 表 where id not in (11,22,33);
select * from 表 where id in (select id from 表);
b、限制条件查询
select * from 表 limit 10; - 查询前10行数据
select * from 表 limit 3,15; - 从第3行开始的后15行
select * from 表 limit 5 offset 4; - 从第4行开始的后5行

11.数据排序查询

desc:降序   asc:升序
select * from 表名 order by 列 asc; - 根据 “列” 从小到大排列
select * from 表名 order by 列 desc - 根据 “列” 从大到小排列
select * from 表名 order by 列1 desc,列2 asc; - 根据 “列1” 从大到小排列,如果相同则按列2从小到大排列
查询出来的结果按照降序或升序排列出来。

12.模糊查询

通配符(模糊查询)
select * from 表名 where name like ‘abc%’ - abc开头的所有数据(多个字符串)
select * from 表名 where name like ‘abc_’ - abc开头的所有数据(一个字符)

13.聚集函数查询

1)COUNT
语法:COUNT(e1)
参数:e1为一个表达式,可以是任意的数据类型
返回:返回数值型数据
作用:返回e1指定列不为空的记录总数

2)SUM
语法:SUM(e1)
参数:e1为类型为数值型的表达式
返回:返回数值型数据
作用:对e1指定的列进行求和计算

3)MIN, MAX
语法:MIN(e1)、MAX(e1)
参数:e1为一个字符型、日期型或数值类型的表达式。
若e1为字符型,则根据ASCII码来判断最大值与最小值。
返回:根据e1参数的类型,返回对应类型的数据。
作用:MIN(e1)返回e1表达式指定的列中最小值;
MAX(e1)返回e1表达式指定的列中最大值;

4)AVG
语法:AVG(e1)
参数:e1为一个数值类型的表达式
返回:返回一个数值类型数据
作用:对e1表达式指定的列,求平均值。

5)MEDIAN
语法:MEDIAN(e1)
参数:e1为一个数值或日期类型的表达式
返回:返回一个数值或日期类型的数据
作用:首先,根据e1表达式指定的列,对值进行排序;
若排序后,总记录为奇数,则返回排序队列中,位于中间的值;
若排序后,总记录为偶数,则对位于排序队列中,中间两个值进行求平均,返回这个平均值;

6)RANK
1)用法1:RANK OVER
语法:RANK( ) OVER ([ PARTITION BY column1 ] ORDER BY column2 [ASC|DESC]);
为分析函数,为每条记录产生一个序列号,并返回。
参数: column1为列名,指定按照哪一列进行分类(分组)
column2为列名,指定根据哪列排序,默认为升序;
若指定了分类子句(PARTITION BY),则对每类进行排序(每个分类单独排序)
返回:返回一个数值类型数据,作为该记录的序号!
作用:为分析函数,对记录先按column1分类,再对每个分类进行排序,并为每条记录分配一个序号(每个分类单独排序)
注意:排序字段值相同的记录,分配相同的序号。存在序号不连续的情况
实例:student表记录了学生每科的成绩,要求按学科排序,并获取每科分数前两名的记录
student表如下:
SQL> select * from student order by kemu;
在这里插入图片描述
按学科分类,按成绩排序(降序)
SQL> select rank() over(partition by KEMU order by FENSHU desc) as sort,student. from student;*
在这里插入图片描述
由返回记录可了解,对排序列的值相同的记录,rank为其分配了相同的序号(SORT NAME列)。
并且之后的记录的序号是不连续的。
若获取每科前两名,只需对排序后的结果增加二次查询即可
select * from (select rank() over(partition by KEMU order by FENSHU desc) as sort_id,student.* from student) st where st.sort_id<=2;
2)用法2:RANK WITHIN GROUP
语法: RANK( expr1 ) WITHIN GROUP ( ORDER BY expr2 )
为聚合函数,返回一个值。
参数:expr1为1个或多个常量表达式;
expr2为如下格式的表达式:
expr2的格式为’expr3 [ DESC | ASC ] [ NULLS { FIRST | LAST } ]’
其中,expr1需要与expr2相匹配,
即:expr1的常量表达式的类型、数量必须与ORDER BY子句后的expr2表达式的类型、数量相同
实际是expr1需要与expr3相匹配
如:RANK(a) WITHIN GROUP (ORDER BY b ASC NULLS FIRST);
其中,a为常量,b需要是与相同类型的表达式
RANK(a,b) WITHIN GROUP (ORDER BY c DESC NULLS LAST, d DESC NULLS LAST);
其中,a与b都为常量;c是与a类型相同的表达式、d是与b类型相同的表达式;
返回:返回数值型数据,该值为假定记录在表中的序号。
作用:确定一条假定的记录,在表中排序后的序号。
如:假定一条记录(假设为r1)的expr2指定字段值为常量expr1,则将r1插入表中后,与原表中的记录,按照ORDER BY expr2排序后,该记录r1在表中的序号为多少,返回该序号。
注释: NULLS FIRST指定,将ORDER BY指定的排序字段为空值的记录放在前边;
NULLS LAST指定,将ORDER BY指定的排序字段为空值的记录放在后边;
实例:假设一个员工的薪水为1500,求该员工的薪水在员工表中的排名为多少?
已知员工表如下:
SQL>select * from employees;
在这里插入图片描述
SQL> select rank(1500) within group (order by salary) as “rank number” from employees;
rank number
-----------
3
由结果可知,薪水为1500的员工,在表中按升序排序,序号为3
7)FIRST、LAST
语法: agg_function(e1) KEEP (DENSE_RANK FIRST ORDER BY e2 [NULLS {FIRST|LAST}]) [OVER PARTITION BY e3 ]
agg_function(e1) KEEP (DENSE_RANK LAST ORDER BY e2 [NULLS {FIRST|LAST}]) [OVER PARTITION BY e3 ]
参数:agg_function为一个聚合函数,可以为 MIN、MAX、SUM、AVG、COUNT、VARIANCE或STDDEV
e2指定以哪个字段为依据,进行排序;
e3指定以哪个字段为依据,进行分类(分组);
当指定OVER PARTITION BY子句后,针对分类后的每个类单独排序;
DENSE_RANK为排序后的记录分配序号,并且序号为连续的。
NULLS {FIRST|LAST}指定排序字段e1的值若为空,则拍在序列前边(NULLS FIRST)或者后边(NULLS LAST)
DENSE_RANK后的FIRST/LAST确定选取通过DENSE_RANK排好序后的序列中,序号最小/最大的记录。序号相同时,返回多条记录
当序号相同,返回多条记录时,agg_function(e1)聚合函数继续对这多条记录的e1字段做聚合操作。
作用:如果agg_function为min(e1),获取排序后的FIRST或LAST的多条记录中,某字段e1的最小值
该字段不是排序关键字段e2
实例:
已知员工表有薪水字段,奖金字段。要求获取薪水最低的员工中,奖金最高的员工的记录。
已知表内容如下:
SQL> select * from employees order by salary;
在这里插入图片描述
SQL> select max(commission) keep(dense_rank first order by salary asc) as commission from employees;
COMMISSION
----------
300
首先,按salary排序后,获取薪水最低的记录,分别为员工10001、10002、10003三条记录。
聚合函数max(commission)对3条记录获取奖金最高的为员工10002,奖金为300。

14.分组查询

select num from 表 group by num;
select num,id from 表 group by num,id;
select num,id from 表 where id > 10 group by num,id order id desc;
select num,id,count(*),sum(score),max(score),min(score) from 表 group by num,id;
select num from 表 group by num having max(id) > 10;
特别的:group by 必须在where之后,order by之前

15.多表查询

a、连 表
无对应关系则不显示
select A.num, A .name, B .name
from A,B
Where A.nid = B.nid
---------
无对应关系则不显示
select A.num, A .name, B .name
from A inner join B
on A.nid = B.nid
---------
A表所有显示,如果B中无对应关系,则值为null
select A.num, A .name, B .name
from A left join B
on A.nid = B.nid
---------
B表所有显示,如果B中无对应关系,则值为null
select A.num, A .name, B .name
from A right join B
on A.nid = B.nid
---------
b、组 合
组合,自动处理重合
select nickname
from A
union
select name
from B
---------
组合,不处理重合
select nickname
from A
union all
select name
from B

16.清空表中数据

delete from 表名;
truncate table 表名;
清空当前数据表的数据信息

17.删除表

drop table 表名;
删除当前的数据表

18.删除数据库

drop database 数据库名;
删除当前的数据库

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值