day 33

什么是数据库

​ 字面意思: 存数据的仓库

为啥使用数据库

之前使用的时excel来进行管理数据

​ excel的缺点: 1.管理不了大量的数据(10w量级的数据
​ 2.不能够并发操作同一个数据表格
​ 2.支持的操作比较少

​ 数据库支持高级的操作,比如: 分组,连表等

数据库的分类

  • 关系型数据库
    对每一列的数据类型会有约束,id(整型),name(字符串类型)

    MySQL, SQL server , Oracle , sqlite , maridb

    MySQL , maridb -----> 用的比较多,免费

    SQL server ------> 微软 , 大学, 政府 (汽车之家)

    Oracle -------> 甲骨文, 收费 , 金融公司

    sqlite -------> 小型的文件数据库

  • 非关系型数据库
    memcache ------> 十年前的产品(新浪微博)

    mongodb -------> 文档型数据库

    redis ------> 微博

最大的区别:

​ 关系型数据库: 把数据存在硬盘中,关系型数据库需要有表结构
​ 非关系型数据库, 把数据存在内存中(mongodb , redis 解决了断电数据丢失的问题
​ 非关系型数据库是key-value储存的,没有表结构

MySQL的构架

​ 类似于 socket 的客户端和服务器

​ 流程:
​ 1.MySQL服务单先启动,监听在某一特定的端口(3306)
​ 2.MySQL客户端连接服务端
​ 3.MySQL客户端就可以发送相关的操作命令,如操作服务端储存的数据

MySQL的安装(windows)

​ Windows安装:

​ 先去官网下载MySQL community server 5.7.16:
http://dev.mysql.com/downloads/mysql/

​ 解压: 如果想要让MySQL安装在指定的目录, 如: C:/mysql-5.7.16 -winx64

​ 添加环境变量: 右击计算机--> 属性---> 高级系统设置 ---> 高级 --> 环境变量 --> 在第二个内容框中找到 变量名为path 的一行,双击 ---> 将MySQL的bin目录路径追加到变量值中,用 ; 分隔

​ 初始化: mysqld --initialize -insecure

​ 启动MySQL服务

​ 启动MySQL客户端并连接MySQL服务: mysql -u root -p

​ 在执行[mysqld]启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:

​ 注意: --insstall前,必须用mysql启动命令的绝对路径
​ #制作MySQL的Windows服务,在终端执行此命令:
​ "c:mysql-5.7.16-winx64inmysqld” --install

​ #移除MySQL的Windows服务,在终端执行此命令:
​ "c:mysql-5.7.16-winx64inmysqld” --remove

​ 注册成功服务后,以后再启用MySQL服务时,仅需执行如下命令:

​ #启动MySQL服务
​ net start mysql

​ #关闭MySQL服务
​ net stop mysql

1.mysql软件基本管理

[root@egon ~]# systemctl start mariadb #启动
[root@egon ~]# systemctl enable mariadb #设置开机自启动
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@egon ~]# ps aux |grep mysqld |grep -v grep #查看进程,mysqld_safe为启动mysql的脚本文件,内部调用mysqld命令
mysql     3329  0.0  0.0 113252  1592 ?        Ss   16:19   0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
mysql     3488  0.0  2.3 839276 90380 ?        Sl   16:19   0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
[root@egon ~]# netstat -an |grep 3306 #查看端口
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN  
[root@egon ~]# ll -d /var/lib/mysql #权限不对,启动不成功,注意user和group
drwxr-xr-x 5 mysql mysql 4096 Jul 20 16:28 /var/lib/mysql

# 安装完mysql 之后,登陆以后,不管运行任何命令,总是提示这个
mac mysql error You must reset your password using ALTER USER statement before executing this statement.
# 解决方法:
step 1: SET PASSWORD = PASSWORD('your new password');
step 2: ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
step 3: flush privileges;

You must reset your password using ALTER USER statement before executing this statement.

2.登录,设置密码

初始状态下,管理员root,密码为空,默认只允许从本机登录localhost
#设置密码
[root@egon ~]# mysqladmin -uroot password "123"        设置初始密码 由于原密码为空,因此-p可以不用
[root@egon ~]# mysqladmin -uroot -p"123" password "456"        修改mysql密码,因为已经有密码了,所以必须输入原密码才能设置新密码

#命令格式:
[root@egon ~]# mysql -h172.31.0.2 -uroot -p456
[root@egon ~]# mysql -uroot -p
[root@egon ~]# mysql                    以root用户登录本机,密码为空

3.忘记密码,操作方式:

方式一:

1 关闭mysql
2 在cmd中执行:mysqld --skip-grant-tables
3 在cmd中执行:mysql
4 执行如下sql:
update mysql.user set authentication_string=password('') where user = 'root';
flush privileges;

5 tskill mysqld #或taskkill -f /PID 7832
6 重新启动mysql


方式二

1. 关闭mysql,可以用tskill mysqld将其杀死
2. 在解压目录下,新建mysql配置文件my.ini
3. my.ini内容,指定
[mysqld]
skip-grant-tables

4.启动mysqld
5.在cmd里直接输入mysql登录,然后操作
update mysql.user set authentication_string=password('') where user='root and host='localhost';

flush privileges;

#6.注释my.ini中的skip-grant-tables,然后启动myqsld,然后就可以以新密码登录了


4.在Windows下,为mysql服务指定配置文件

强调: 配置文件中的注释可以有中文,但是配置项中不能出现中文

#在mysql的解压目录下,新建my.ini,然后配置
#1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效
[mysqld]
;skip-grant-tables
port=3306
character_set_server=utf8
default-storage-engine=innodb
innodb_file_per_table=1


#解压的目录
basedir=E:mysql-5.7.19-winx64
#data目录
datadir=E:my_data #在mysqld --initialize时,就会将初始数据存入此处指定的目录,在初始化之后,启动mysql时,就会去这个目录里找数据



#2. 针对客户端命令的全局配置,当mysql客户端命令执行时,下列配置生效
[client]
port=3306
default-character-set=utf8
user=root
password=123

#3. 只针对mysql这个客户端的配置,2中的是全局配置,而此处的则是只针对mysql这个命令的局部配置
[mysql]
;port=3306
;default-character-set=utf8
user=egon
password=4573


#!!!如果没有[mysql],则用户在执行mysql命令时的配置以[client]为准

my.ini

5.统一字符编码

#1. 修改配置文件
[mysqld]
default-character-set=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

#mysql5.5以上:修改方式有所改动
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

#2. 重启服务
#3. 查看修改结果:
s
show variables like '%char%'

6.初识MySQL语句

mysql服务端软件即mysqld帮我们管理好文件夹以及文件,前提是作为使用者的我们,需要下载mysql的客户端,或者其他的模块来连接到mysqld,然后使用MySQL软件规定的语法格式去提交自己的命令,实现对文件夹或文件的管理.该语法即sql(Structured Query Language 即结构化查询语言)

SQL语言主要用于存取数据,查询数据,更新数据和管理关系数据库系统,SQL语言由IBM开发.SQL语言分为三类:
1. DDL语句	数据库定义语言:  数据库,表,视图,索引,存储过程,例如 create drop alter    
2. DML语句	数据库操纵语言:  插入数据insert,删除数据delete,更新数据update,查询数据select
3. DCL语句	数据库控制语言:  例如控制用户访问权限grant,revoke
1.操作文件夹:
	增: create dataase db1 charset utg8;
	查:show databases;
	改: show database db1 charset latin1;
	删除: drop database db1;
	
2. 操作文件:
	先切换到文件夹下: use db1
		增: create table t1(id int,name char);
		查: show tables
		改: alter table t1 modify name char(3);
			alter table t1 change name name1 char(2)
		删: drop table t1;
		
3. 操作文件中的内容/记录
	增: insert into t1 values(1,'egon1'),(2,'egon2'),(3,'egon3');
	查: select * from t1l
	改: update t1 set name='sb' where id=2;
	删: delete from t1 where id =1
	
	清空表:
		delete from t1; # 如果有自增id,新增的数据,仍然是以删除前的最后一样作为起始.
		truncate table t1; 数据量大,删除速度比上一条快,且直接从零开始
		auto_increment 表示自增
		primary key  表示约束(不能重复且不能为空);加速查找
原文地址:https://www.cnblogs.com/LZF-190903/p/11754401.html