数据库基础

2021/10/14 数据库

数据库基础

1、数据库分类

大致分为两类

  1. 关系型数据库:数据之间彼此有关系或约束,存储数据的表现形式通常是表格存储,每个字段会有存储类型的限制,有MySQL、Oracle、sql server等
  2. 非关系型数据库:存储数据通常都是以key - value键值对的形式存储,有Redis、MongoDB、memcache

2、MySQL

是一款基于网络通信的应用程序,有服务端和客户端只分,通过socket通信,不但支持MySQL的客户端,还支持各种代码书写的客户端,交互需要使用sql语句

下载:https://downloads.mysql.com/archives/community/

启动:

  1. 下载解压完成,进入bin目录,在终端以管理员权限运行mysqld
  2. 新开一个终端,进入bin目录,第一次进入是没有密码的,直接进入回车就行
  3. 如果电脑上之前有就输入之前的密码,如果忘记密码看下面
  4. 新开一个终端,cd到bin目录
  5. 输入mysql -h 127.0.0.1 -P 3306 -uroot -p,或者mysql -uroot -p
  6. 输出密码,第一次连接是没有密码的

如果报错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服务(位于本地计算机上) 意外停止这个错误,解决办法

  1. 在MySQL根目录新建my.ini,找一些配置输入进去,或者有my-default.ini的修改一下
  2. 我修改default-storage-engine=INNODBdefault-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系统:

  1. 点击系统偏好设置->最下边点MySQL,在弹出页面中,关闭服务
  2. 进入终端输入:cd /usr/local/mysql/bin/
  3. 回车后 登录管理员权限 sudo su
  4. 回车后输入以下命令来禁止mysql验证功能 ./mysqld_safe --skip-grant-tables &
  5. 回车后mysql会自动重启(偏好设置中mysql的状态会变成running)
  6. 输入命令 ./mysql
  7. 回车后,输入命令 FLUSH PRIVILEGES;
  8. 回车后,输入命令 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码'); 或者 SET PASSWORD FOR 'root'@'localhost' = ('你的新密码');

Windows系统:

  1. 关闭当前mysql服务端
  2. 命令行的方式启动,跳过用户名密码的验证 mysqld --skip-grant-tables
  3. 直接以无密码的方式进行连接 mysql -uroot -p 然后回车
  4. 修改当前用户密码 update mysql.user set password=password(新密码); where user='root' and host='localhost';,user是当前用户权限,和当前的本地用户名host,改自己要改的那个用户就好了
  5. 立刻将修改的数据刷到硬盘 flush privileges;
  6. 关闭当前服务端,以正常校验形式启动服务端

常用软件的默认端口

  1. mysql:3306
  2. Redis:6379
  3. MongoDB:27017
  4. Tomcat:8080

客户端

3、SQL语句初始

  1. mysql中的sql语句是以分号为结束的标志
  2. show databases; 查看所有库名
  3. 当输入的命令不对,又不想让服务端执行并返回错误信息可以在命令后面加\c,如wdadwawdaw \c
  4. 进入了之后想退出可以输入quit 或 exit
  5. 只输入mysql进入的情况下,不是管理员模式,只是游客模式
  6. MySQL对大小写不敏感

4、环境变量配置及系统服务制作

  1. 如何查看当前具体进程,Windows: tasklist | findstr mysql; Mac:ps aux | grep mysql
  2. 如何杀死具体进程:在管理员cmd窗口小才可以成功 taskkill /F /PID pid号,Mac:sudo kill -9 PID | 例如:sudo kill -9 750

环境变量配置:将mysqld的路径添加到环境变量里面

系统服务制作:Windows下,设置为系统服务,开机自启动

  1. 查看当前计算机的进程任务
  2. win+r,打开输入services.msc或者直接查看任务管理器
  3. 打开一个管理员窗口的cmd,输入mysqld --install 回车。这样开机就有了,当需要连接的时候,然后打开一个cmd直接输入mysql -uroot -p就好了,不需要cd到具体目录。
  4. 想移除的话输入mysqld --remove

修改mysql的连接密码:

  1. mysqladmin -uroot -p 原密码 password 新密码

4、MySQL配置文件修改

在sql窗口输入\s可以查看mysql配置

Windows里MySQL默认的配置文件my-default.ini / my.iniini结尾的一般都是配置文件,程序启动会先加载配置文件中的配置才真正启动

在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;

Search

    Table of Contents