MySQL
简介
数据库DB
数据库(
DataBase
,
DB
)从本质上讲就是一个文件系统,它能够将数据有组织地集合在一起,按照一定的规则长期存储到计算机的磁盘中,并且能够供多个用户共享和使用,同时,用户能够对数据库中的数据进行插入、删除、修改和查询等操作。
数据库管理系统
BDMS
数据库管理系统(
DataBase Management System
,
DBMS
从本质讲就是一个为管理数据库中的数据而设计的一套管理系统。它依托数据库,对外提供统一管理数据库中数据的功能和接口能够有效地对数据库的安全、认证、数据 备份、数据恢复、数据传输等进行统一的管理。同时,数据库管理系统能够根据所依托的数据库模型对数据库进行相应的分类。大多数的数据库都是通过数据库管理系统对数据库中的数据进行管理和维护的。
DB
与
DBMS
的关系
数据库的分类
关系型数据库
依据所有存储数据的模型之间的关系建立的数据库。所谓关系模型,指的是
“
一对一、
一对多、多对多
”
等
关系型。常见的关系型数据库如下:
Oracle:是
Oracle
公司的数据库产品
Mysql: 最早属于瑞典的
MysqlAB
公司的,后被
Sun
公司收购,
Sun
在
2009
年
4
月
20
号被
Oracle
收购。
SQLServer:微软旗下的数据库产品
Access:微软旗下的数据库产品
DB2:IBM 公司旗下的数据库产品
非关系型数据库
泛指非关系型的数据库,区别于关系数据库。采用了没有特定关系模型来组织数据。常
见的非关系型数据库如下:
MongoDB:是一个面向文档的开源
NoSQL
数据库
.MongoDB
使用
JSON
之类的文档来存储任何数据.
它是用
c++
写的。
Cassandra:是
Facebook
为收件箱搜索开发的
.Cassandra
是一个用于处理大量结构化数据的分布式数据存储系统
Redis:是最著名的键值存储。
Redis
是用
C
语言编写的。它是根据
BSD
授权的。
HBase:谷歌为
BigTable
数据库设计的分布式非关系数据库。
数据库的安装及配置
安装
安装命令:
sudo apt-get update #
更新软件源
sudo apt-get install mysql-server #
安装
mysql
安装过程会提示设置
mysql root
用户的密码
输入
root
账号的密码
确认
root
账号的密码
然后它会自动安装完成
启动或关闭
MySQL
启动命令
service mysql start
关闭命令
service mysql stop
重启命令
service mysql restart
注意
:
默认安装完成后,
MySQL
为启动状态
确认是否启动成功
命令
:
sudo netstat -tap | grep mysql
注意
:
mysql节点处于
LISTEN
状态表示启动成功
进入
MySQL Shell
命令
:
mysql -u root -p
回车
输入安装mysql
时的密码
mysql
中文乱码
原因
character_set_server
默认设置是
latin1
查看命令
:
show variables like "char%";
查看结果如下
解决方案
:
修改
mysql
配置
步骤
0:
退出
mysql
exit
步骤
1:
编辑配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
步骤
2:
在文件
[mysqld]
下添加
character_set_server=utf8.
保存退出
步骤
3:
重启
mysql
服务
service mysql stop
service mysql start
或
service mysql restart
步骤
4:
登录
MySQL,
并查看
MySQL
目前设置的编码。
show variables like "char%";
外部工具连接
mysql
失败
原因
Ubuntu
下默认安装
MySQL
只支持本地机的
localhost
和
127.0.0.1
进行连接访问
,
不能通
过虚拟机的
IP
地址进行远程访问
MySQL
修改
1,
修改
mysql
1.1:在
Ubuntu
系统的
dos
中打开
mysql
库。
mysql -u root -p
这时会提示你输入 root 的密码,输入
root
密码后登陆进入
mysql
控制
台。
在 mysql 控制台中执行如下
sql
语句
1.2:切换之
mysql
库中
use mysql;
1.3:修改权限表,将
root
的登陆
host
改为
‘%’,
即允许所有
ip
。
update user set host = '%' where user = 'root';
1.4:立刻刷新权限
flush privileges;
注意:如果你还是不能远程连接,则继续执行下一步操作
2,
修改
mysql
配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
修改其中的 bind-address 后面的
ip
值为
0.0.0.0
,如下:
bind-address = 0.0.0.0
保存修改,重启
mysql
,即可。命令如下
:
service mysql restart
至此,即可通过远程 ip 登陆
mysql
了
以上步骤完成后就可以在主机安装
mysql
可视化操作工具了
,
如
sqyog
SQL语句
简介
SQL
(
Structured Query Language
)结构化查询语言,用于存取、查询、更新数据以及管理关系型数据库系统
SQL
是在
1981
年由
IBM
公司推出,一经推出基于其简洁的语法在数据库中得到了广泛的应用,成为主流数据库的通用规范
SQL
由
ANSI
组织确定规范
在不同的数据库产品中遵守
SQL
的通用规范,但是也对
SQL
有一些不同的改进,形成了一些数据库的专有指令
MySQL
:
limit
SQLServer
:
top
Oracle
:
rownum
分类
根据
SQL
指令完成的数据库操作的不同,可以将
SQL
指令分为四类
数据存在表中
,
表是存储在数据库中
,mysql
中可以有多个数据库表:
类似与
Execl
- DDL
(
Data Definition Language
)数据定义语言
-
用于完成对数据库对象(数据库、数据表、视图、索引等)的创建、删除、修改
- DML
(
Data Manipulation Language
)数据操作
/
操纵语言
-
用于完成对数据表中的数据的添加、删除、修改操作
-
添加:将数据存储到数据表
-
删除:将数据从数据表移除
-
修改:对数据表中的数据进行修改
- DQL
(
Data Query Language
)数据查询语言
-
用于将数据表中的数据查询出来
- DCL
(
Data Control Language
)数据控制语言
-
用于完成事务管理等控制性操作
基础语法
在
MySQL Command Line Client
或者
Navicat
等工具中都可以编写
SQL
指令
- SQL
指令不区分大小写
但是在后期编写sql
指令时
,sql
提供的关键字一般使用大写
,
自定义的名称用小写
-
每条
SQL
表达式结束之后都以
;
结束
- SQL
关键字之间以空格进行分隔
- SQL
之间可以不限制换行(可以有空格的地方就可以有换行)
- MySQL
注释:
-
单行注释:
--
注释内容
注意
:
在
--
后要加空格
-
单行注释:
#
注释内容
-
多行注释:
/*
注释内容
*/
DDL:数据定义语言
作用:用于完成对数据库对象(数据库、数据表、视图、索引等)的创建、删除、修改
数据库操作
查询数据库
- >
显示当前
mysql
中的数据库列表
> show databases;
- >
显示指定名称的数据的创建的
SQL
指令
> show create database
库名
;
创建数据库
- >
创建数据库
> create database
库名
;
- >
创建数据库,当指定名称的数据库不存在时执行创建
> create database if not exists
库名
;
- >
在创建数据库的同时指定数据库的字符集(字符集:数据存储在数据库中采用的编码格
式
utf8
、
gbk
)
> CREATE DATABASE IF NOT EXISTS
库名
CHARSET 'utf8';
修改数据库字符集
- >
修改数据库的字符集
> alter database
库名
CHARSET
字符集
;
删除数据库
- >
删除数据库
> drop database
库名
;
- >
如果数据库存在则删除数据库
> drop database if exists
库名
;
使用
/
切换数据库
use
库名
;
数据表操作
创建完数据库之后,接下来就是在数据库中创建数据表。在
MySQL
中,数据表以二维表格的形式展示,表格中的一行代表一条完整的数据记录,表格中的一列代表数据的某个
特定属性。
需要注意:
在数据库中创建表之前,需要查看当前使用的数据库
语法:
select database();
然后切换到你需要操作的数据库
use db_name;
建表
语法
create table
表名
(
字段
1
字段类型
,
字段
2
字段类型
, ...
字段
n
字段类型
);
字段类型
int
:整型
double
:浮点型,例如
double(5,2)
表示最多
5
位,其中必须有
2
位小数,即最大值为
999.99
;
char
:固定长度字符串类型;
char(10): 'aaa '
占
10
位
varchar
:可变长度字符串类型;
varchar(10): 'aaa'
占
3
为
text
:字符串类型;
blob
:字节类型;
date
:日期类型,格式为:
yyyy-MM-dd
;
time
:时间类型,格式为:
hh:mm:ss
timestamp
:时间戳类型
yyyy-MM-dd hh:mm:ss
会自动赋值
datetime:
日期时间类型
yyyy-MM-dd hh:mm:ss
boolean:mysql
不支持
,oracle
支持
示例
创建一张存储学员信息的表
:stu
表中的字段有
:
s_id 一条数据的唯一标识符
int primary key auto_increment
s_name 学员姓名
varchar(30)
s_sex 学员性别
varchar(10)
s_age 学员年龄
int
s_class 学员所在班级
varchar(50)
s_num 学号
varchar(16)
s_type 学员专业
varchar(50)
sql
语句
create table stu(
s_id int primary key auto_increment,
s_name varchar(30),
s_sex varchar(10),
s_age int,
s_class varchar(50),
s_num varchar(16),
s_type varchar(50)
);
查看所有表
语法
SHOW TABLES;
重命名表
rename table
原表名
to
新表名
;
查看表信息
语法
SHOW CREATE TABLE
表名
;
修改字符集
语法
ALTER TABLE
表名
CHARACTER SET
修改后的字符集
;
注意
:
一般使用
utf8(
就是
utf-8)
查表字段信息
语法
DESC 表名;
备份表
语法
create table
新表名
as select * from
要备份的表的名称
;
如
:
create table tname2 as select * from tname1;
备份表结构
语法
create table
新表名
like
要备份的表的名称
;
如
:
create table tname2 like tname1;
删除表
语法
DROP TABLE
表名
;
添加列
语法
ALTER TABLE
表名
ADD
添加的列名 填加的列字段类型
;
修改列
alter table
表名
modify
要修改的列名 修改后的字段类型
;
删除列
alter table
表名
drop
列名
;
注意
:
一次只能删一列
列重命名
ALTER TABLE
表名
CHANGE
原列名 新列名 新字段类型
;
DML:数据操作语言
插入数据
作用
:
给表中添加数据
语法
insert into
表名
(
列名
1,
列名
2....)
values
(
值
1,
值
2....);
示例:
#
向数据表中指定的列添加数据(不允许为空的列必须提供数据)
insert into
stus(stu_num,stu_name,stu_gender,stu_age,stu_tel)
values
(
'20210101'
,
'
张三
'
,
'
男
'
,
21
,
'13030303300'
);
#
数据表名后的字段名列表顺序可以不与表中一致,但是
values
中值的顺序必须与表名
后字段名顺序对应
insert into
stus(stu_num,stu_name,stu_age,stu_tel,stu_gender)
values
(
'20210103'
,
'
王五
'
,
20
,
'13030303302'
,
'
女
'
);
#
当要向表中的所有列添加数据时,数据表名后面的字段列表可以省略,
#
但是
values
中的值的顺序要与数据表定义的字段保持一致
;
insert into
stus
values
(
'20210105'
,
'
孙琦'
,
'
男
'
,
21
,
'13030303304'
,
'666666'
);
#
不过在项目开发中,即使要向所有列添加数据
,
也建议将列名的列表显式写出来
(
增强
SQL
的稳定性
)
insert into
stus(stu_num,stu_name,stu_gender,stu_age,stu_tel,stu_qq)
values
(
'20210105'
,
'
孙琦
'
,
'
男
'
,
21
,
'13030303304'
,
'666666'
);
修改数据
语法:
update
表名
set
列名
1=
值
1
,列名
2=
值
2 [
where
条件
];
示例:
#
将学号为
20210105
的学生姓名修改为
“
孙七
”
(只修改一列)
update
stus
set
stu_name=
'
孙七
'
where
stu_num=
'20210105'
;
#
将学号为
20210103
的学生 性别修改为
“
男
”,
同时将
QQ
修改为
777777
(修改多列)
update
stus
set
stu_gender=
'
男
'
,stu_qq=
'777777'
where
stu_num=
'20210103'
;
#
根据主键修改其他所有列
update
stus
set
stu_name=
'
韩梅
梅
'
,stu_gender=
'
女
'
,stu_age=
18
,stu_tel=
'13131313311'
,stu_qq=
'999999'
where
stu_num=
'20210102'
;
#
如果
update
语句没有
where
子句,则表示修改当前表中所有行(记录)
update
stus
set
stu_name=
'Tom'
;
删除数据
语法:
delete from
表名
[where
条件
];
示例:
#
删除学号为
20210102
的学生信息
delete from
stus
where
stu_num=
'20210102'
;
#
删除年龄大于
20
岁的学生信息
(
如果满足
where
子句的记录有多条,则删除多条记录
)
delete from
stus
where
stu_age>
20
;
#
如果删除语句没有
where
子句,则表示删除当前数据表中的所有记录
(
敏感操作
)
delete from
stus;