什么是数据库
字面意思: 存数据的仓库
为啥使用数据库
之前使用的时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 表示约束(不能重复且不能为空);加速查找