数据库基础
1、数据库分类
大致分为两类
- 关系型数据库:数据之间彼此有关系或约束,存储数据的表现形式通常是表格存储,每个字段会有存储类型的限制,有MySQL、Oracle、sql server等
- 非关系型数据库:存储数据通常都是以
key - value
键值对的形式存储,有Redis、MongoDB、memcache
2、MySQL
是一款基于网络通信的应用程序,有服务端和客户端只分,通过socket通信,不但支持MySQL的客户端,还支持各种代码书写的客户端,交互需要使用sql语句
下载:https://downloads.mysql.com/archives/community/
启动:
- 下载解压完成,进入bin目录,在终端以管理员权限运行mysqld
- 新开一个终端,进入bin目录,第一次进入是没有密码的,直接进入回车就行
- 如果电脑上之前有就输入之前的密码,如果忘记密码看下面
- 新开一个终端,cd到bin目录
- 输入
mysql -h 127.0.0.1 -P 3306 -uroot -p
,或者mysql -uroot -p
- 输出密码,第一次连接是没有密码的
如果报错Can't connect to MySQL server on '127.0.0.1' (10061)
说明服务没启动,启动一下就好了
启动服务的时候可能出现windows无法启动mysql服务(位于本地计算机上) 找不到指定位置
这个错误,解决办法
- 在cmd打开
bin
目录,在bin
目录下输入mysqld -install
,输出The service already exists!
- 配置环境变量,系统变量为当前这个目录
- 修改windows注册表,windows+r 在运行对话框输入regedit,点击确定,进入注册表编辑器。选择HKEY_LOCAL_MACHINE ->SYSTEM -> CurrentControlSet -> services ->MySQL,修改ImagePath的路径为Mysql安装路径,如:
D:\software\mysql\mysql-5.6.47-winx64\bin
启动服务的时候可能出现windows无法启动mysql服务(位于本地计算机上) 意外停止
这个错误,解决办法
- 在MySQL根目录新建
my.ini
,找一些配置输入进去,或者有my-default.ini
的修改一下 - 我修改
default-storage-engine=INNODB
为default-storage-engine=myisam
或者default-storage-engine=innodb
就可以了
my-default.ini
的内容
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\software\mysql\mysql-5.6.47-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=D:\software\mysql\mysql-5.6.47-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=innodb
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
如果忘记密码Mac系统:
- 点击系统偏好设置->最下边点MySQL,在弹出页面中,关闭服务
- 进入终端输入:
cd /usr/local/mysql/bin/
- 回车后 登录管理员权限
sudo su
- 回车后输入以下命令来禁止mysql验证功能
./mysqld_safe --skip-grant-tables &
- 回车后mysql会自动重启(偏好设置中mysql的状态会变成running)
- 输入命令
./mysql
- 回车后,输入命令
FLUSH PRIVILEGES;
- 回车后,输入命令
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码');
或者SET PASSWORD FOR 'root'@'localhost' = ('你的新密码');
Windows系统:
- 关闭当前mysql服务端
- 命令行的方式启动,跳过用户名密码的验证
mysqld --skip-grant-tables
- 直接以无密码的方式进行连接
mysql -uroot -p
然后回车 - 修改当前用户密码
update mysql.user set password=password(新密码); where user='root' and host='localhost';
,user是当前用户权限,和当前的本地用户名host,改自己要改的那个用户就好了 - 立刻将修改的数据刷到硬盘
flush privileges;
- 关闭当前服务端,以正常校验形式启动服务端
常用软件的默认端口
- mysql:3306
- Redis:6379
- MongoDB:27017
- Tomcat:8080
客户端
3、SQL语句初始
- mysql中的sql语句是以分号为结束的标志
show databases;
查看所有库名- 当输入的命令不对,又不想让服务端执行并返回错误信息可以在命令后面加
\c
,如wdadwawdaw \c
- 进入了之后想退出可以输入
quit 或 exit
- 只输入
mysql
进入的情况下,不是管理员模式,只是游客模式 - MySQL对大小写不敏感
4、环境变量配置及系统服务制作
- 如何查看当前具体进程,Windows:
tasklist | findstr mysql
; Mac:ps aux | grep mysql
- 如何杀死具体进程:在管理员cmd窗口小才可以成功
taskkill /F /PID pid号
,Mac:sudo kill -9 PID | 例如:sudo kill -9 750
环境变量配置:将mysqld的路径添加到环境变量里面
系统服务制作:Windows下,设置为系统服务,开机自启动
- 查看当前计算机的进程任务
- win+r,打开输入
services.msc
或者直接查看任务管理器 - 打开一个管理员窗口的cmd,输入
mysqld --install
回车。这样开机就有了,当需要连接的时候,然后打开一个cmd直接输入mysql -uroot -p
就好了,不需要cd到具体目录。 - 想移除的话输入
mysqld --remove
修改mysql的连接密码:
mysqladmin -uroot -p 原密码 password 新密码
4、MySQL配置文件修改
在sql窗口输入\s
可以查看mysql配置
Windows里MySQL默认的配置文件my-default.ini / my.ini
,ini
结尾的一般都是配置文件,程序启动会先加载配置文件中的配置才真正启动
在Mac里mysql的配置文件叫my.cnf / default_my.cnf
,在Mac电脑下不会自动生成配置文件
打开大概是这样
# Copyright (c) 2007 MySQL AB, 2009, 2010 Sun Microsystems, Inc.
# Use is subject to license terms
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# Use default setting for mysqld processes
!include default_mysqld.cnf
!include default_client.cnf
[mysqld.1]
# Run the master.sh script before starting this process
#!run-master-sh
log-bin= master-bin
# Run tests with the performance schema instrumentation
loose-enable-performance-schema
[mysqlbinlog]
disable-force-if-open
[ENV]
MASTER_MYPORT= @mysqld.1.port
MASTER_MYSOCK= @mysqld.1.socket
其中[mysqld.1]
的意思是,一旦服务端启动立刻加载下面的配置,还会有其他的比如[client]
,其他客户端启动;[mysql]
客户端启动
- 修改完配置需要重启才生效
4.1 统一编码
可以新建一个配置文件,后缀根据自己的系统设置
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
Mac系统
sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
sudo vi /etc/my.cnf
# 把这些复制进去
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
# :wq保存
然后重启
4.2 配置连接mysql的账户密码
不想每次输入账户密码,可以配置客户端的账户密码
[mysql]
user='root'
password=123456
然后重启
5、库的增删改查
# 创建数据库
create database db1;
create database db1 charset='gbk';
# 查数据库
show databases;
show create database db1;
# 改数据库 改编码
alter database db1 charset='gbk';
# 删库
drop database db2;
6、表的增删改查
查表需要先找到库
# 查看当前库的名字
select database();
# 切换库
use db1;
# 创建表 表头只有id 和name两个字段,name的字符串限制长度6位
create table t1(id int, name char(6));
# 查 所有表
show tables;
## 查单表
show create table t1;
# 查看一张表的描述
describe t1;
# 或者简写为
desc t1;
# 改表 修改t1表头name字段长度为12
alter table t1 modify name char(12);
# 删表
drop table t1;
可以在当前库直接操控其他库,写绝对路径就好了,写法db2.t2
create table db2.t2(id int);
desc t1;
的结果,一张表的描述
+-------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | char(6) | YES | | NULL | |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)
7、数据的增删改查
一定先有库然后有表才可以操作数据
-- # 增
insert into t1 values(1, '222');
insert into t1 values(2, '333'),(3,'x3'),(4,'x4');
-- # 查
select * from t1;
-- +------+------+
-- | id | name |
-- +------+------+
-- | 1 | 222 |
-- | 2 | 333 |
-- | 3 | x3 |
-- | 4 | x4 |
-- +------+------+
-- 单独查一个字段的值
select name from t1;
-- # 改
update t1 set name = '222' where id = 1;
-- 删
delete from t1 where id = 2;
-- 清空表
delete from t1;