初识mysql
一、概述
1、什么是数据库?
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。(文件系统)
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
2、什么是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ?
答:他们均是一个软件,都有两个主要的功能:
- a. 将数据保存到文件或内存
- b. 接收特定的命令,然后对文件进行相应的操作
PS:如果有了以上软件,无须自己再去创建文件和文件夹,而是直接传递 命令 给上述软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System)
3、什么是SQL ?
答:上述提到MySQL等软件可以接受命令,并做出相应的操作,由于命令中可以包含删除文件、获取文件内容等众多操作,对于编写的命令就是是SQL语句。SQL,是结构化语言(Structured Query Language)的缩写,SQL是一种专门用来与数据库通信的语言。
如果没有数据库我们的数据只是保存在自己的设备中中不能共享给其他的pc就会造成很大的麻烦,我们通过把所有需要很多人公用的数据放在数据库中 以便于大家更好的对数据的维护,不在是单单的存储在了文件中了
二、下载安装
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
想要使用MySQL来存储并操作数据,则需要做几件事情:
a. 安装MySQL服务端
b. 安装MySQL客户端
b. 【客户端】连接【服务端】
c. 【客户端】发送命令给【服务端MySQL】服务的接受命令并执行相应操作(增删改查等)
下载
https://www.mysql.com/
安装
windows:
点点点
Linux:
yum install mysql-server
Mac:
点点点
windows和mac一般就直接点击下一步下一步就可以了
windows版本;
下面我们来试如果你下载的是压缩包的话 我们通过命令来按照数据库
1、下载
下载地址:
1
2
3
|
https://www.mysql.com/
http: / / dev.mysql.com / downloads / mysql / |
window版本
1、官网去下载
2、针对操作系统的不同下载不同的版本
3.解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.6.40-winx64
4.添加环境变量
【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【将MySQL的bin目录路径追加到变值值中,用 ; 分割】
5.初始化
1
|
mysqld - - initialize - insecure |
6.启动mysql服务
mysqld #启动MySQL服务
7.启动mysql客户端并连接mysql服务端(新开一个cmd窗口)
mysql -u root -p # 连接MySQL服务器
上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题,即将MySQL服务制作成windows服务
注意:--install前,必须用mysql启动命令的绝对路径 # 制作MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.6.40-winx64\bin\mysqld" --install # 移除MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" --remove 注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令: # 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql
8.让用户去加载权限,以管理员身份进入cmd,查看当前mysql进程
1
|
tasklist |findstr mysql #查看当前mysql的进程 |
9.杀死当前的进程,执行如下命令
taskkill /F /PID 6052 # 杀死当前的进程pid
2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:\mysql-5.7.16-winx64
3、初始化
MySQL解压后的 bin 目录下有一大堆的可执行文件,执行如下命令初始化数据:
1
2
3
|
cd c:\mysql - 5.7 . 16 - winx64\ bin mysqld - - initialize - insecure |
因为mysqld是你的客户端你要把它给执行起来
、启动MySQL服务
执行命令从而启动MySQL服务
1
2
3
4
5
|
# 进入可执行文件目录 cd c:\mysql - 5.7 . 16 - winx64\ bin # 启动MySQL服务 mysqld |
5、启动MySQL客户端并连接MySQL服务
由于初始化时使用的【mysqld --initialize-insecure】命令,其默认未给root账户设置密码
1
2
3
4
5
6
7
|
# 进入可执行文件目录 cd c:\mysql - 5.7 . 16 - winx64\ bin # 连接MySQL服务器 mysql - u root - p # 提示请输入密码,直接回车 |
输入回车,见下图表示安装成功:
到此为止,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。但是,在4、5步骤中重复的进入可执行文件目录比较繁琐,如想日后操作简便,可以做如下操作。
a. 添加环境变量
将MySQL可执行文件添加到环境变量中,从而执行执行命令即可
1
2
3
4
|
【右键计算机】 - - 》【属性】 - - 》【高级系统设置】 - - 》【高级】 - - 》【环境变量】 - - 》【在第二个内容框中找到 变量名为Path 的一行,双击】 - - > 【将MySQL的 bin 目录路径追加到变值值中,用 ; 分割】 如: C:\Program Files (x86)\Parallels\Parallels Tools\Applications; % SystemRoot % \system32; % SystemRoot % ; % SystemRoot % \System32\Wbem; % SYSTEMROOT % \System32\WindowsPowerShell\v1. 0 \;C:\Python27;C:\Python35;C:\mysql - 5.7 . 16 - winx64\ bin |
如此一来,以后再启动服务并连接时,仅需:
1
2
3
4
5
|
# 启动MySQL服务,在终端输入 mysqld # 连接MySQL服务,在终端输入: mysql - u root - p |
b. 将MySQL服务制作成windows服务
上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:
1
2
3
4
5
|
# 制作MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" - - install # 移除MySQL的Windows服务,在终端执行此命令: "c:\mysql-5.7.16-winx64\bin\mysqld" - - remove |
注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
1
2
3
4
5
|
# 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql |
Linux上安装:
编译安装,编译安装有个好处我们可以指定文件存放地址
先安装 wget
yum install wget
然后执行
wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-要安装的数据库版本.tar.gz
下面是安装5.6.19版本
wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.19.tar.gz
1.解压tar包 cd /software tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21 2.添加用户与组 groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql mysql-5.6.21 3.安装数据库 su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data 4.配置文件 cd /software/mysql-5.6.21/support-files cp my-default.cnf /etc/my.cnf cp mysql.server /etc/init.d/mysql vim /etc/init.d/mysql #若mysql的安装目录是/usr/local/mysql,则可省略此步 修改文件中的两个变更值 basedir=/software/mysql-5.6.21 datadir=/software/mysql-5.6.21/data 5.配置环境变量 vim /etc/profile export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" source /etc/profile 6.添加自启动服务 chkconfig --add mysql chkconfig mysql on 7.启动mysql service mysql start 8.登录mysql及改密码与配置远程访问 mysqladmin -u root password 'your_password' #修改root用户密码 mysql -u root -p #登录mysql,需要输入密码 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允许root用户远程访问 mysql>FLUSH PRIVILEGES; #刷新权限
三、sql概述
SQL:Structure Query Language。(结构化查询语言)
SQL被美国国家标准局(ANSI)确定为关系型数据库语言的美国标准,后来被国际化标准组织(ISO)采纳为关系数据库语言的国际标准。
各数据库厂商都支持ISO的SQL标准。普通话
各数据库厂商在标准的基础上做了自己的扩展。方言
四、Sql的分类
DDL**(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等; CREATE、 ALTER、DROP
DML***(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE
DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;
DQL*****(Data Query Language):数据查询语言,用来查询记录(数据)。
SELECT
* 注意:sql语句以;结尾
数据库操作:
DDL:操作数据库、表、列等
使用的关键字:CREATE、 ALTER、 DROP
下面是通过sql语句来对数据库的操作:
数据库中的所有的命令后面都必须加;分号
数据库其实就是一个存放数据的容器 你在这个容器内创建数据库就是创建一个文件夹来保存文件 创建表就是在文件夹内创建一个文件来保存具体的数据
显示数据库(就是查看你的数据库软件中建立了几个数据库)
1
|
SHOW DATABASES; |
创建数据库:
在数据库软件中创建你需要的数据库:
创建数据库
1
2
3
4
5
|
# utf-8 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # gbk CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; |
为了让你的数据库发生乱码 可以指定编码:create database + 创建数据库名字 default charset utf8; 或者 create database +数据库名字 character set gbk;
下面是两种创建数据库的方式 只不过创建的命令不一样而已:
创建的时候加上你创建的编码是为了你在对这个数据库增加内容的时候输入中文会造成你的中文的乱码
create database db2 default charset utf8; 这是创建了一个utf8的数据库
create database db2 character set utf8; 这也是创建一个utf8的数据库
1、显示数据库
1
|
SHOW DATABASES; |
默认数据库:
mysql - 用户权限相关数据
test - 用于用户测试数据
information_schema - MySQL本身架构相关数据
2、创建数据库
1
2
3
4
5
|
# utf-8 CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; # gbk CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; |
3、使用数据库
1
|
USE db_name; |
显示当前使用的数据库中所有表:SHOW TABLES;
4、用户管理
1
2
3
4
5
6
7
8
9
10
|
创建用户 create user '用户名' @ 'IP地址' identified by '密码' ; 删除用户 drop user '用户名' @ 'IP地址' ; 修改用户 rename user '用户名' @ 'IP地址' ; to '新用户名' @ 'IP地址' ;; 修改密码 set password for '用户名' @ 'IP地址' = Password( '新密码' ) PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议) |
5、授权管理
1
2
3
|
show grants for '用户' @ 'IP地址' -- 查看权限 grant 权限 on 数据库.表 to '用户' @ 'IP地址' -- 授权 revoke 权限 on 数据库.表 from '用户' @ 'IP地址' -- 取消权限 |
一般的数据库创建的时候都是默认为utf8的编码
如果你的数据库创建的时候没有指定编码或者需要改编码 就用:
alter database +数据库名 character set +要修改的编码
alter database db4 character set gbk; 把db4这个数据库的编码改为gbk
all privileges 除grant外的所有权限 select 仅查权限 select,insert 查和插入权限 ... usage 无访问权限 alter 使用alter table alter routine 使用alter procedure和drop procedure create 使用create table create routine 使用create procedure create temporary tables 使用create temporary tables create user 使用create user、drop user、rename user和revoke all privileges create view 使用create view delete 使用delete drop 使用drop table execute 使用call和存储过程 file 使用select into outfile 和 load data infile grant option 使用grant 和 revoke index 使用index insert 使用insert lock tables 使用lock table process 使用show full processlist select 使用select show databases 使用show databases show view 使用show view update 使用update reload 使用flush shutdown 使用mysqladmin shutdown(关闭MySQL) super 使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆 replication client 服务器位置的访问 replication slave 由复制从属使用
对于目标数据库以及内部其他: 数据库名.* 数据库中的所有 数据库名.表 指定数据库中的某张表 数据库名.存储过程 指定数据库中的存储过程 *.* 所有数据库
用户名@IP地址 用户只能在改IP下才能访问 用户名@192.168.1.% 用户只能在改IP段下才能访问(通配符%表示任意) 用户名@% 用户可以再任意IP下访问(默认IP地址为%)
grant all privileges on db1.tb1 TO '用户名'@'IP' grant select on db1.* TO '用户名'@'IP' grant select,insert on *.* TO '用户名'@'IP' revoke select on db1.tb1 from '用户名'@'IP'
创建完数据库后 就相当于创建了文件夹 你下面要创建文件把内容存进去 文件就是表
你要先切换到你想要存储的数据库内进行创建
use + 数据库名/表名 切换到你要进入的数据库或者表内
use myself; 切换到myself这个数据库下
use db1; 切换到myself 这个数据库下
查看数据库内的所有的表的名称:
show tables; 查看当前数据库下 所有的表
show databases; 查看所有的库名 select database(); 查看当前所在的库 show tables; 查看库中所有的表名 show table from 库名; 查看库中的所有表 use + 库名/表名;切换进库或者表 desc 表名 查看表结构
创建表
数据库其实就是一个存放数据的容器 你在这个容器内创建数据库就是创建一个文件夹来保存文件 创建表就是在文件夹内创建一个文件来保存具体的数据
创建数据库(文件夹):create database +数据库名字
1
2
3
4
|
create table 表名( 列名 类型 是否可以为空, 列名 类型 是否可以为空 )ENGINE=InnoDB DEFAULT CHARSET=utf8 |
当你查看完这个数据库中的表之后就可以增加你自己的需要的表了: create table +要增加的表名(列 列的类型) default charset=utf8;
create table t1(age int) engine=innodb default charset=utf8; 创建一个t1的表 然后表中有一个age的列 这个列是int类型的
其中个的engine=innodb写上是为了防止你的数据会因为在传输的时候突然断开连接没有传输完毕造成的紊乱,如果写上engine=innodb 这个是支持事物 innodb好比你的数据库在发送消息 对方正在准备接收,数据库在传输的时候传输一半的时候由于一些不定因素,突然就断开了连接如果没有innodb的话 数据库可能会说我已经传输完毕 而对方会说我没接收就造成了数据的紊乱了 所以我们要加上innodb
create table t3(id int auto_increment,name char(10))engine=innodb default charset=utf8 这个是创建一个t3表然后这个表内增加一个id自增的列 然后name列的最大字节是10
create table t1(
列名 类型 null,
列名 类型 not null,
列名 类型 not null auto_increment primary key,
id int,
name char(10)
)engine=innodb default charset=utf8;
还有一种如果你想要在前面加上序列号 并且让座合格序列号会随着你增加的内容而增加 那么就在这个列的后面规定
auto_increment 表示:自增
primary key 表示:约束(不能重复且不能为空) 加速查找
not null 是否为空
是否可空,null表示空,非字符串 not null - 不可空 null - 可空
默认值,创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值 create table tb1( nid int not null defalut 2, num int not null )
既然我们创建了表那么我们要想一下 万一创建的表出错了怎么办呢?欲知后事请看下面
删除表:
drop table 表名
drop table t2; 删除t2这个表
清空表:
1
2
|
delete from 表名 truncate table 表名 |
delete from是清空这个表之后 再继续添加表内的信息就会接着删除的继续开始添加,如果你以前增加到第4条开始删除的那么现在再添加就是从第5条开始
truncate table 这个清空表之后再重新插入的信息就会从头开始
增加表中的列:
如果想在一个已经建好的表中添加一列,可以用诸如:
alter table t1 add column addr varchar(20) not null; 不可以为空的时候
alter table t1 add column addr varchar(20); 可以为空
这条语句会向已有的表t1中加入一列addr,这一列在表的最后一列位置。如果我们希望添加在指定的一列,可以用:
alter table t1 add column addr varchar(20) not null after user1;不可以为空
alter table t1 add column addr varchar(20) after user1 可以为空的状态
注意,上面这个命令的意思是说添加addr列到user1这一列后面。如果想添加到第一列的话,可以用:
alter table t1 add column addr varchar(20) not null first;
alter table t1 add column addr varchar(20)not null null; 在表t1的最后中增加一个addr列 这个列的最大可以支持20个字节输入 alter table t1 add column addt varchar(20)not null first; 在t1表中的第一列增加一个addt alter table t1 add column att varchar(20) not null after age; 在表t1的age列后增加一个att的列
增加的列可以设置为可以为空或者不可以为空 如果设置不可以为空的话你增加信息的时候就会报错 因为你要记得数据库的列在一起他的行会随着其中的一个列的增加而增加你这个列增加但是其中有一个是不可以为空 那么就会出错
删除列:
alter table 表名 drop column 要删除的列;
alter table yusheng drop column def ; 将 t1表中的def列给删除了
显示当前使用的数据库中所有表:SHOW TABLES;
创建完你的数据库和表之后就可以增加内容了
mysql在表的某一位置增加一列、删除一列、修改列名
如果想在一个已经建好的表中添加一列,可以用以下代码: alter table 表名 add column 列名 varchar(20) not null; 这条语句会向已有的表中加入一列,这一列在表的最后一列位置。如果我们希望添加在指定的一列,可以用: alter table 表名 add column 列名 varchar(20) not null after user1; 注意,上面这个命令的意思是说添加addr列到user1这一列后面。如果想添加到第一列的话,可以用: alter table 表名 add column 列名 varchar(20) not null first; 将表yusheng中,列名def改为unit alter table yusheng change def unit char; 将表yusheng中,列名def的列删除 alter table yusheng drop column def ; 复制table表 create table 新表名( select ID,name,number,numberid from 要复制的表名); 查看表的各种数据类型 describe `student` 查看表的已存数据 select * from 表名 (select id,name,number,numberid from 表名) 添加数据 insert into 表名 (ID,name,number,numberid) values(1,'Logic',220,1),(2,'HTML',160,1),(3,'Java OOP',230,1); 删除数据 delete from 表名 where 条件; 修改数据 update 表名 set numberid=2 where 条件 降序排列 select id,name,number,numberid from 表名 order by id desc; 添加别名 select id(列名) '别名' ,(列名) as '别名' from 表名;
插入内容:insert into:
insert into 表名(要增加内容的列名) values(增加的内容) ;
插入数据:
insert into t1(id,name) values(1,'alex');
就是给t1这个表中的id和name列增加1和alex信息
删除信息 delete from t1 where id < 6 ;
删除t1表中的id小于6的信息