标签:源代码 功能 转换 .sql ide 方便 选择 精度 nal
是数据结构化的结合。电子化的文件柜,数据库是指以一定的方式存储在一起的数据的集合。
数据库的组成:
数据库由表组成,数据库映射到系统中是一个目录
表是由相关数据组成,表映射到系统中是文件
记录是由一定数量不同属性的字段组成的
数据库管理系统是为了管理数据库而设计的计算机软件,一般情况下有存储、截取、维护及备份等功能。
关系型数据库
是建立在关系模型基础上的数据库
常见的关系型数据库:
MySQL:开放源代码
MariaDB:Mysql的替代品
Oracle:闭源
SQL Server:微软的
DB2:IBM
Access:微软公司
非关系型数据库:
与关系型数据库最明显的区别:不再使用SQL作为查询语言
MongoDB
hadoop
C/S结构:客户端/服务器结构 客户端和服务器端都的装软件
CentOS7:
Server:mariadb-server
Client :mariadb
RedHat6:
Server:mysql-server
Client :mysql
MySQL默认情况下支持匿名登陆
# mysql
# mysqladmin -u root password New password: Confirm new password:
# mysql -u root -p123456 注意:-p后面一定没有空格
# mysql -u root -h 192.168.1.2 -p123456
官方网站:http://www.mysql.com
http://dev.mysql.com/doc
MariaDB [(none)]>help; 或者 ? 或者 \h MariaDB [(none)]> create databases -> \c 清除当前输入的sql语句,注意一定要在没敲分号的时候使用 MariaDB [(none)]> exit 退出 quit \q MariaDB [(none)]> use farm; 切换数据库 MariaDB [(none)]> \u test MariaDB [(farm)]> source qqfarm.sql; 执行sql脚本 MariaDB [test]> \. qqfarm.sql MariaDB [(none)]> system ls; 调用系统命令 MariaDB [(none)]> \! ls;
#vim /etc/my.cnf
[mysqld] skip-grant-table //添加 跳过权限表 datadir=/var/lib/mysql
# systemctl restart mariadb.service
# mysql
MariaDB [(none)]> select user,password,host from mysql.user; //查看mysql库中user表的user、password、host三个字段 +------+-------------------------------------------+-----------------+ | user | password | host | +------+-------------------------------------------+-----------------+ | root | *23AE809DDACAF96A | localhost | | root | | ula.example.com | | root | | 127.0.0.1 | | root | | ::1 | | | | localhost | | | | ula.example.com | +------+-------------------------------------------+--------------------+ MariaDB [(none)]> update mysql.user set password=password("123") where user="root" and host="localhost"; //更新密码 MariaDB [(none)]> exit Bye
#vim /etc/my.cnf
[mysqld] #skip-grant-table datadir=/var/lib/mysql
# systemctl restart mariadb.service
DML Data Manipulation Language 数据库操纵语言
INSERT 插入数据 insert
DELETE 删除数据 delete
UPDATE 更新数据 update
DDL Data Definition Language 数据库定义语言
数据库、表、索引、存储过程、函数
CREATE 创建 create
DROP 删除drop
ALTER 修改 alter
DCL Data Control Language 数据库控制语言
例:控制用户的访问权限
GRANT 授权 grant
REVOKE 撤销 revoke
DQL Data Query Language 数据库查询语言
SELECT 查询 select
SQL语句中的大小写问题:
1)关键字、函数名、列名和索引名不区分大小写
2)数据库的名字、表名、别名区分大小写的(因为linux是区分大小写的)
#查看所有库 show databases; #创建库 create database 库名; #创建库并指定字符集 create database 库名 DEFAULT CHARACTER SET utf8; #库的字符集 alter database databasename DEFAULT CHARACTER SET utf8; #查看库的属性 show create database 库名; #切换库 use apple; #删除库 drop database apple; #查看现在使用的库 select database();
#创建表 create table t1(id int,name char(10)); #查看表的结构 desc t1; #查看当前库中所以表 show tables; #查看表的属性 show create table t1\G; #添加字段 alter table 表名 操作 字段名 数据类型 [约束]; #追加 alter table t1 add TEL int(11); #在name字段后面插入sex字段 alter table t1 add sex char(10) after name; #添加字段在第一列 alter table t1 add UID int(10) first; #修改字段名及属性 alter table t1 change id ID int(5); #仅修改字段属性 alter table t1 modify ID int(10); #删除字段 alter table t1 drop UID; #修改表名 alter table t1 rename to t2; #删除表 drop table nametable;
#添加记录 insert into t1 set id=2,name=‘jim‘; insert into t1 (id,name) values(3,‘tom‘); #添加多条记录 insert into t1 (id,name) values(8,‘harry‘),(9,‘kitty‘); insert into t1 values (5,‘kiki‘),(6,‘jack‘),(7,‘banana‘); #所有字段都要有数据 insert into t1 values (4,‘apple‘); #更新记录 update t2 set age=18 where name is NULL; #满足where后面的条件做什么事 update info_name set TEL="456789123" where NUM=2 ; #多条件定位,&&=and 两个条件都满足 update info_name set SEX="m" where NUM=2 && AGE=18 ; #||=or 任意满足其一条件 update info_name set SEX="m" where NUM=3 || AGE=18; #删除记录 delete from info_name where NAME=‘tom‘ and SEX=‘m‘; delete from info_name where SEX is null; #清空表记录 delete from info_name;
#database() 查看当前所在的库 select database(); #user() 查看当前登陆的用户 select user();
#sum() 求和函数 select sum(age) from t1; #avg() 平均值函数 select avg(age) from t1; #max() 最大值函数 select max(age) from t1; #min() 最小值函数 select min(age) from t1; #count() 统计sex字段每种有多少条记录 select sex,count(sex) from t1 group by sex; #统计一下mysql成绩在80分以上的人数 select mysql,count(*) from score where mysql>80; #统计表中有多少条非空的记录 select count(*) from pass;
#查看当前时间 select curtime(); #查看当前日期 select curdate(); #查看系统时间 select now(); select sysdate();
#concat() 连接函数 select concat(username,uid) from pass; select concat(username,‘ ‘,uid) from pass; select concat(username,‘:‘,uid) from pass; select concat(username,‘:‘,uid) as ‘username-uid‘ from pass; #lower() 转换成小写 update pass set username=‘ROOT‘ where username=‘root‘; select lower(username) from pass; #upper() 转换成大写 select upper(username) from pass; #length() 求长度 select username,length(username) from pass;
要求:有两张表,但是字段数不同
MariaDB [test]> create table t1(id int primary key,name varchar(20)); MariaDB [test]> insert into t1 values (1,‘jim‘),(2,‘tom‘),(1000,‘jack‘);
#复制全部记录 MariaDB [test]> insert into user1(id,name) select * from user; #复制部分记录 insert into user2(id,name) select * from user where id<1000;
MariaDB [test]> create table user3 select * from user;
MariaDB [test]> create table user4 select name from user;
方法一:不复制主键、外键、索引
MariaDB [test]> create table user5 select * from user where 1<0;
方法二:完全复制
MariaDB [test]> create table user6 like user; MariaDB [test]> select * from user6;
语法:load data infile ‘文件名‘ into table 表名;(分割符为空格后者制表符)
load data infile "/opt/test.txt" into table test;
注意:1)文件不要放在/tmp和/root目录下,MySQL读取不到。
2)mysql用户对导入的文件只要需要读的权限
3)文件用引号引起来
语法:load data infile ‘文件名‘ into table 表名 fields terminated by ‘分隔符‘;(任何分隔符)
load data infile ‘/opt/pass.txt‘ into table pass fields terminated by ‘:‘;
select *from passwd into outfile ‘/test/pass‘ fields terminated by ‘:‘;
注意:1)导出前文件名一定不存在。
2)mysql用户对目录要有读写权限
3)导出文件默认以|t为字段分隔符,\n为行分隔符
MariaDB [(none)]> select user,host,password from mysql.user;
语法:drop mysql.user 用户名@‘主机‘;
MariaDB [(none)]> drop user root@‘ula.example.com‘; MariaDB [(none)]> delete from mysql.user where user!=‘root‘;
创建无限制无密码无ip限制用户
MariaDB [(none)]> create user ‘sonfer‘;
创建本地用户并设置密码
create user sonfer@localhost identified by ‘sonfer123‘;
创建远程登陆的用户
语法:create user 用户名@‘ip‘ identified by ‘sonfer123‘;
create user sonfer@‘192.168.1.71‘ identified by ‘sonfer123‘;
注意:允许所有IP登陆不是‘%‘,应该写‘%.%.%.%‘,可能是MariaDB的一个BUG。
[root@ULA mysql]# mysqladmin -u root -p123 password ‘456‘
MariaDB [(none)]> set password for ‘root‘@‘localhost‘=password(‘123‘);
MariaDB [(none)]> update mysql.user set password=password(‘2‘) where user=‘root‘ and host=‘localhost‘; MariaDB [(none)]> flush privileges;
语法:mysql -u用户名 -p密码 -h服务器IP
mysql -usonfer-h 192.168.1.1 -psonfer123
全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。
数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。
表权限适用于一个给定的表中的所有列。这些权限存储在mysql.tables_priv表中。
列权限适用于一个给定的表中的单一列。这些权限存储在mysql.colummns_priv表中。
语法:grant 权限 on 库名.表名 to 用户名@‘主机名‘ identified by ‘密码‘; (修改密码,可创建用户)
权限列表
MariaDB [(none)]> grant all on *.* to user1@192.168.1.71 identified by ‘test‘; MariaDB [(none)]> flush privileges; //刷新权限
MariaDB [(none)]> grant select,insert,update on test.* to sonfer@‘192.168.1.%‘ identified by ‘123‘;
MariaDB [(none)]> show grants;
MariaDB [(none)]> show grants for sonfer;
语法:revoke 权限 on 库名.表名 from 用户@‘主机‘;
MariaDB [(none)]> revoke all on *.* from root_test@‘%‘; //回收全部权限 MariaDB [(none)]> revoke insert on *.* from root_test@‘%‘; //回收部分权限
根据服务是否在线继续分为热备份、温备份和冷备份
热备份:读写均不受影响
温备份:仅可以执行读操作
冷备份:也称为离线备份,读写操作均终止。
根据备份时是否之间复制数据文件分为物理备份和逻辑备份
物理备份:直接复制数据文件,速度快。
逻辑备份:通常是将数据导出至文本文件中。速度慢、丢失浮点精度;方便使用文本根据直接进行处理、可移植能力强。
根据备份数据内容分为完全备份、增量备份和差异备份
完全备份:备份全部数据。
增量备份:仅备份上次完全备份或增量备份以后变化的数据。
差异备份:仅备份上次完全备份以来变化的数据
备份时间的选择:数据库访问量较小的时候做备份
语法:mysqldump -u root -p2 库名 > /tmp/name.sql
[root@ULA mysql]# mysqldump -u root -p2 data1 > /tmp/data1.sql
备份单个表
语法:# mysqldump -u root -p2 库名 表名 > /tmp/name.sql
备份多个表
语法:mysqldump -u root -p2 库名 表名 表名 > /tmp/name.sql
多库备份 -B,--databases
语法:mysqldump -u root -p2 -B 库名 库名 > /tmp/name.sql
全库备份 -A, --all-databases
语法:mysqldump -u root -p2 -A > /tmp/name.sql
MariaDB [(none)]> drop database data1; //删库 MariaDB [(none)]> create database data1; //再建库 #第一种恢复方式: [root@ULA mysql]# mysql -u root -p2 data1 < /tmp/data1.sql #第二种恢复方式: [root@ULA mysql]# mysql -u root -p2 MariaDB [(none)]> use school MariaDB [school]> source /tmp/data1.sql
[root@ULA mysql]# mysql -u root -p2 school < /tmp/table.sql
[root@ULA mysql]# mysql -u root -p2 < /tmp/ddata.sql
[root@ULA mysql]# mysql -u root -p2 < /tmp/all.sql
日志存放的位置:数据目录下
/var/lib/mysql/ rpm
/var/log/mariadb/mariadb.log MariaDB [(none)]> show variables like ‘log_error‘; +---------------+------------------------------+ | Variable_name | Value | +---------------+------------------------------+ | log_error | /var/log/mariadb/mariadb.log | +---------------+------------------------------+ 1 row in set (0.03 sec)
记录用户对数据库所做的所有的ddl和dml操作,不会记录查询语句,对数据的灾难恢复有至关重要的作用。
ddl:create、drop、alter
dml:insert、update、delete
二进制日志作用:做AB复制、恢复
记录所有对数据库的请求信息(包括登陆、查询),默认不开启
日志量较大、占用磁盘空间,一般不开启
记录的是查询时间超过指定时间的查询语句,一般用于优化查询,默认不开启
MariaDB [(none)]> show variables like ‘general_log‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | OFF | +---------------+-------+S 1 row in set (0.00 sec) MariaDB [(none)]> set global general_log=on; MariaDB [(none)]> show variables like ‘general_log‘; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | general_log | ON | +---------------+-------+ 1 row in set (0.00 sec)
[root@ULA mysql]# cat /var/lib/mysql/name.log
[root@ULA mysql]# vim /etc/my.cnf log=general_select_log //=号右边的日志文件名可自定义 [root@ULA mysql]# systemctl restart mariadb [root@ULA mysql]# cat /var/lib/mysql/general_select_log
[root@ULA mysql]# vim /etc/my.cnf log-slow-queries=slow-log //=号右边的日志文件名可自定义 long_query_time=5 //设置慢查询超时时间 单位是:秒 [root@ULA mysql]# systemctl restart mariadb [root@ULA mysql]# mysql -u root -p2 MariaDB [(none)]> select sleep(6); //执行一个超过5秒的查询操作 [root@ULA mysql]# cat /var/lib/mysql/slow-log
[root@ULA mysql]# vim /etc/my.cnf log-bin=log_bin.log //=号右边的日志文件名可自定义 log-bin-index=log_bin.index [root@ULA mysql]# systemctl restart mariadb
[root@ULA mysql]# mysqlbinlog log_bin.000001 # at 4 //事件发生的位置信息 #170606 14:51:00 //事件发生的时间信息
[root@ULA mysql]# mysqlbinlog --start-position=245 --stop-position=534 log_bin.000001 |mysql -u root -p2 --start-position 起始位置点 --stop-position 结束位置点
# mysqlbinlog --start-datetime=‘17-06-06 15:25:04‘ --stop-datetime=‘17-06-06 15:26:15‘ log_bin.000002 | mysql -u root -p2 --start-datetime 起始时间 --stop-datetime 结束时间
MariaDB [(none)]> show master logs; +----------------+-----------+ | Log_name | File_size | +----------------+-----------+ | log_bin.000001 | 1079 | | log_bin.000002 | 1523 | +----------------+-----------+ 2 rows in set (0.00 sec)
MariaDB [(none)]> show binlog events;
MariaDB [(none)]> show master status\G;
MariaDB [(none)]> purge master logs to ‘log_bin.000002‘; Query OK, 0 rows affected (0.05 sec)
MariaDB [(none)]> purge master logs before date_sub(current_date,interval 1 day);
MariaDB [(none)]> reset master;
MariaDB [(none)]> flush logs;
标签:源代码 功能 转换 .sql ide 方便 选择 精度 nal
原文地址:https://www.cnblogs.com/sonfer/p/8784545.html