数据库
数据库(DataBase,简称DB)
数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的,过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用
数据库是长期存放在计算机内、有组织、可共享的数据即可。
数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种 用户共享
数据库管理系统(DataBase Management System 简称DBMS)
MySQL、Oracle、SQLite、Access、MS SQL Server
mysql主要用于大型门户,例如搜狗、新浪等,它主要的优势就是开放源代码,因为开放源代码这个数据库是免费的,他现在是甲骨文公司的产品。
oracle主要用于银行、铁路、飞机场等。该数据库功能强大,软件费用高。也是甲骨文公司的产品。
sql server是微软公司的产品,主要应用于大中型企业,如联想、方正等。
数据库服务器、数据管理系统、数据库、表与记录的关系
记录:1 某某 121212323156 12(多个字段的信息组成一条记录,即文件中的一行内容)
表:student,scholl,class_list(即文件)
数据库:oldboy_stu(即文件夹)
数据库管理系统:如mysql(是一个软件)
数据库服务器:一台计算机(对内存要求比较高)
总结:
数据库服务器---运行--->数据库管理软件
数据库管理软件--->管理--->数据库
数据库---组织--->表,即文件夹---组织--->文件
表---存放--->多条记录,即文件---存放--->多行内容
mysql安装
Linux版本 下载安装
#二进制rpm包安装 [ yum -y install mysql-server mysql ]

1.解压tar包 cd /software tar -xzvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.21-linux-glibc2.5-x86_64 mysql-5.6.21 2.添加用户与组 groupadd mysql useradd -r -g mysql mysql chown -R mysql:mysql mysql-5.6.21 3.安装数据库 su mysql cd mysql-5.6.21/scripts ./mysql_install_db --user=mysql --basedir=/software/mysql-5.6.21 --datadir=/software/mysql-5.6.21/data 4.配置文件 cd /software/mysql-5.6.21/support-files cp my-default.cnf /etc/my.cnf cp mysql.server /etc/init.d/mysql vim /etc/init.d/mysql #若mysql的安装目录是/usr/local/mysql,则可省略此步 修改文件中的两个变更值 basedir=/software/mysql-5.6.21 datadir=/software/mysql-5.6.21/data 5.配置环境变量 vim /etc/profile export MYSQL_HOME="/software/mysql-5.6.21" export PATH="$PATH:$MYSQL_HOME/bin" source /etc/profile 6.添加自启动服务 chkconfig --add mysql chkconfig mysql on 7.启动mysql service mysql start 8.登录mysql及改密码与配置远程访问 mysqladmin -u root password 'your_password' #修改root用户密码 mysql -u root -p #登录mysql,需要输入密码 mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; #允许root用户远程访问 mysql>FLUSH PRIVILEGES; #刷新权限 源码安装mysql

1. 解压 tar zxvf mariadb-5.5.31-linux-x86_64.tar.gz mv mariadb-5.5.31-linux-x86_64 /usr/local/mysql //必需这样,很多脚本或可执行程序都会直接访问这个目录 2. 权限 groupadd mysql //增加 mysql 属组 useradd -g mysql mysql //增加 mysql 用户 并归于mysql 属组 chown mysql:mysql -Rf /usr/local/mysql // 设置 mysql 目录的用户及用户组归属。 chmod +x -Rf /usr/local/mysql //赐予可执行权限 3. 拷贝配置文件 cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf //复制默认mysql配置 文件到/etc目录 4. 初始化 /usr/local/mysql/scripts/mysql_install_db --user=mysql //初始化数据库 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //复制mysql服务程序 到系统目录 chkconfig mysql on //添加mysql 至系统服务并设置为开机启动 service mysql start //启动mysql 5. 环境变量配置 vim /etc/profile //编辑profile,将mysql的可执行路径加入系统PATH export PATH=/usr/local/mysql/bin:$PATH source /etc/profile //使PATH生效。 6. 账号密码 mysqladmin -u root password 'yourpassword' //设定root账号及密码 mysql -u root -p //使用root用户登录mysql use mysql //切换至mysql数据库。 select user,host,password from user; //查看系统权限 drop user ''@'localhost'; //删除不安全的账户 drop user root@'::1'; drop user root@127.0.0.1; select user,host,password from user; //再次查看系统权限,确保不安全的账户均被删除。 flush privileges; //刷新权限 7. 一些必要的初始配置 1)修改字符集为UTF8 vi /etc/my.cnf 在[client]下面添加 default-character-set = utf8 在[mysqld]下面添加 character_set_server = utf8 2)增加错误日志 vi /etc/my.cnf 在[mysqld]下面添加: log-error = /usr/local/mysql/log/error.log general-log-file = /usr/local/mysql/log/mysql.log 3) 设置为不区分大小写,linux下默认会区分大小写。 vi /etc/my.cnf 在[mysqld]下面添加: lower_case_table_name=1 修改完重启:#service mysql restart
Window版本
1、下载
1
2
3
|
MySQL Community Server 5.7 . 16 http: / / dev.mysql.com / downloads / mysql / |
2、解压
如果想要让MySQL安装在指定目录,那么就将解压后的文件夹移动到指定目录,如:C:mysql-5.7.16-winx64
3、初始化
MySQL解压后的 bin 目录下有一大堆的可执行文件,执行如下命令初始化数据:
1
2
3
|
cd c:mysql - 5.7 . 16 - winx64 bin mysqld - - initialize - insecure |
4、启动MySQL服务
执行命令从而启动MySQL服务
1
2
3
4
5
|
# 进入可执行文件目录 cd c:mysql - 5.7 . 16 - winx64 bin # 启动MySQL服务 mysqld |
5、启动MySQL客户端并连接MySQL服务
由于初始化时使用的【mysqld --initialize-insecure】命令,其默认未给root账户设置密码
1
2
3
4
5
6
7
|
# 进入可执行文件目录 cd c:mysql - 5.7 . 16 - winx64 bin # 连接MySQL服务器 mysql - u root - p # 提示请输入密码,直接回车 |
输入回车,见下图表示安装成功:
到此为止,MySQL服务端已经安装成功并且客户端已经可以连接上,以后再操作MySQL时,只需要重复上述4、5步骤即可。但是,在4、5步骤中重复的进入可执行文件目录比较繁琐,如想日后操作简便,可以做如下操作。
a. 添加环境变量
将MySQL可执行文件添加到环境变量中,从而执行执行命令即可
1
2
3
4
|
【右键计算机】 - - 》【属性】 - - 》【高级系统设置】 - - 》【高级】 - - 》【环境变量】 - - 》【在第二个内容框中找到 变量名为Path 的一行,双击】 - - > 【将MySQL的 bin 目录路径追加到变值值中,用 ; 分割】 如: C:Program Files (x86)ParallelsParallels ToolsApplications; % SystemRoot % system32; % SystemRoot % ; % SystemRoot % System32Wbem; % SYSTEMROOT % System32WindowsPowerShellv1. 0 ;C:Python27;C:Python35;C:mysql - 5.7 . 16 - winx64 bin |
如此一来,以后再启动服务并连接时,仅需:
1
2
3
4
5
|
# 启动MySQL服务,在终端输入 mysqld # 连接MySQL服务,在终端输入: mysql - u root - p |
b. 将MySQL服务制作成windows服务
上一步解决了一些问题,但不够彻底,因为在执行【mysqd】启动MySQL服务器时,当前终端会被hang住,那么做一下设置即可解决此问题:
注意:--install前,必须用mysql启动命令的绝对路径
1
2
3
4
5
|
# 制作MySQL的Windows服务,在终端执行此命令: "c:mysql-5.7.16-winx64inmysqld" - - install # 移除MySQL的Windows服务,在终端执行此命令: "c:mysql-5.7.16-winx64inmysqld" - - remove |
注册成服务之后,以后再启动和关闭MySQL服务时,仅需执行如下命令:
1
2
3
4
5
|
# 启动MySQL服务 net start mysql # 关闭MySQL服务 net stop mysql |
mysql软件基本管理
1. 启动查看
[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;
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. 忘记密码
方法一:删除授权库mysql,重新初始化
[root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!!
[root@egon ~]# systemctl restart mariadb
[root@egon ~]# mysql
方法二:启动时,跳过授权库
[root@egon ~]# vim /etc/my.cnf #mysql主配置文件
[mysqld]
skip-grant-table
[root@egon ~]# systemctl restart mariadb
[root@egon ~]# mysql
MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost";
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> q
[root@egon ~]# #打开/etc/my.cnf去掉skip-grant-table,然后重启
[root@egon ~]# systemctl restart mariadb
[root@egon ~]# mysql -u root -p123 #以新密码登录
windows平台下,5.7版本mysql,破解密码的两种方式:

#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]为准
初识sql语句
#操作库(文件夹) - 增 create database db1 charset utf8; - 查 show databases; show create database db1; - 改 alter database db1 charset gbk; - 删 drop database db1; #操作表(文件) 切换到某一个库(文件夹) use db1; select database();#查看当前所在的库 - 增 create table t1(id int,name char(10),age int)egine=innodb default charset utf8; #最后一个字段一定不要加逗号 - 查 show tables; show create table t1; desc t1;#查看表结构 - 改 alter table t1 charset gbk; alter table t1 add sex char; alter table t1 drop sex; alter table t1 modify sex char(6); alter table t1 change sex Sex char(6); - 删 drop table table66; #操作记录 - 增 insert into db1.t1(id,name,age,Sex) values (1,'egon1',18,'male'), (2,'egon2',28,'male'), (3,'egon3',38,'male'), (4,'egon4',48,'male'); insert into db1.t1(id,name) values(5,'egon5'); - 查 select name,id from db1.t1; select * from db1.t1; - 改 update db1.t1 set name='EGON4'; update db1.t1 set name='alexsb' where id=5; update db1.t1 set name='aaaa' where Sex='male'; - 删 delete from db1.t1; #仅仅只有删除记录的效果,没有把表重置到初始状态的功能 truncate db1.t1; #清空+重置 delete from db1.t1 where id=3; delete from db1.t1 where name='dddd'; #自增id create table t1(id int not null unique auto_increment,name char(4)); #自增的字段必须是 insert into db1.t1(name) values ('egon1'), ('egon2'), ('egon3'), ('egon4');
用户授权

#创建用户 create user 'egon'@'1.1.1.1' identified by '123'; create user 'egon'@'192.168.1.%' identified by '123'; create user 'egon'@'%' identified by '123'; #授权:对文件夹,对文件,对文件某一字段的权限 查看帮助:help grant 常用权限有:select,update,alter,delete all可以代表除了grant之外的所有权限 #针对所有库的授权:*.* grant select on *.* to 'egon1'@'localhost' identified by '123'; #只在user表中可以查到egon1用户的select权限被设置为Y #针对某一数据库:db1.* grant select on db1.* to 'egon2'@'%' identified by '123'; #只在db表中可以查到egon2用户的select权限被设置为Y #针对某一个表:db1.t1 grant select on db1.t1 to 'egon3'@'%' identified by '123'; #只在tables_priv表中可以查到egon3用户的select权限 #针对某一个字段: mysql> select * from t3; +------+-------+------+ | id | name | age | +------+-------+------+ | 1 | egon1 | 18 | | 2 | egon2 | 19 | | 3 | egon3 | 29 | +------+-------+------+ grant select (id,name),update (age) on db1.t3 to 'egon4'@'localhost' identified by '123'; #可以在tables_priv和columns_priv中看到相应的权限 mysql> select * from tables_priv where user='egon4'G *************************** 1. row *************************** Host: localhost Db: db1 User: egon4 Table_name: t3 Grantor: root@localhost Timestamp: 0000-00-00 00:00:00 Table_priv: Column_priv: Select,Update 1 row in set (0.00 sec) mysql> select * from columns_priv where user='egon4'G *************************** 1. row *************************** Host: localhost Db: db1 User: egon4 Table_name: t3 Column_name: id Timestamp: 0000-00-00 00:00:00 Column_priv: Select *************************** 2. row *************************** Host: localhost Db: db1 User: egon4 Table_name: t3 Column_name: name Timestamp: 0000-00-00 00:00:00 Column_priv: Select *************************** 3. row *************************** Host: localhost Db: db1 User: egon4 Table_name: t3 Column_name: age Timestamp: 0000-00-00 00:00:00 Column_priv: Update 3 rows in set (0.00 sec) #删除权限 revoke select on db1.* to 'alex'@'%';
本章总结
#1 登录
mysql -uroot -p123
#2 查看用户
select user();
#3 退出
quit
exit
q
#3 查看帮助信息
help create user;
#4 创建帐号
create user 'egon'@'192.168.32.*' identified by '123';
create user 'egon'@'192.168.32.3' identified by '123';
create user 'egon'@'%' identified by '123';
#5 授权
grant all privileges
grant all on db1.t1 to 'egon'@'%';
grant all on *.* to 'egon'@'%';
flush privileges;
#创建帐号同时授权
grant all on *.* to 'alex'@'%' identified by '123';
flush privileges;
#6 远程连接mysql
mysql -uegon -p123 -h 192.168.11.55
#7 查看所有的数据库
show databases;
#8 修改密码
命令行>mysqladmin -uroot -p'123' password 123
命令行>mysql -uroot -p123
#9 破解密码
#杀死mysqld服务
C:UsersAdministrator>tasklist |findstr mysql
mysqld.exe 5320 Console 1 456,832 K
C:UsersAdministrator>taskkill -f /PID 5320
C:UsersAdministrator>tskill mysqld
C:UsersAdministrator>mysqld --skip-grant-tables #跳过授权表启动
mysql> update mysql.user set password=password('') where user='root' and host='l
ocalhost';
mysql> flush privileges;
C:UsersAdministrator>tskill mysqld
C:UsersAdministrator>tasklist |findstr mysql
C:UsersAdministrator>mysqld
#重新以新密码登录