美文网首页
MySQL数据库

MySQL数据库

作者: 辛晓坤Vincent | 来源:发表于2018-07-13 17:29 被阅读0次

数据库的基础概念

定义——数据库:保存有组织的数据的容器
定义——管理系统(DBMS):管理数据的数据库软件
定义——MySQL:客户/服务器模型、开放源码、关系型、SQL、数据库管理系统、多OS

分类

关系型数据库(MySQL、Oracle、SqlServer、MariaDB)、键值型数据库(Redis、Memcached)、面向文档数据库(MongoDB)、列存储数据库(HBase)、图数据库

Mariadb 5.5的软件架构

rpm  -ql  mariadb
#查看软件架构

配置文件: /etc/my.cnf
数据文件:/var/lib/mysql
日志文件:/var/log/mariadb/mariadb.log
服务名:service--mariadb
守护进程名:daemon--mysqld
监听端口:3306

MySQL中的三大数据类型

数值型:整型(int)、浮点型(FLOAT(size,d))、定点型
字符串类型:char{M}(定长,可存储的字符数);varchar{M}(变长,可存储的字符数);M代表字符
时间日期类型

SQL语言

定义:结构化查询语言

DDL数据库定义语言

  1. 声明列类型
  2. 常见约束
  3. 建库建表
  4. 删库删表

DDL命令

create table:创表

create table <tablename> (id int primary key auto_increment,name char(50) not null default 0,age int,btime datetime) char set=utf8;
--创建一个tablename的表,含有列id(primary key:主键,不可重复、不可为空;auto_increment:自增长),name(变长,字符数为50;not null:不可为空),age(default 0:默认为0),btime(datetime为时间日期类型);字符集为utf8;
CREATE TABLE t1 (id int PRIMARY KEY AUTO_INCREMENT, name varchar(20) NOT NULL, btime datetime);
--创建一个t1的表,含有列id(PRIMARY KEY:主键,不可重复、不可为空;AUTO_INCREMENT:自增长),name(变长,字符数为20;not null:不可为空),btime(datetime为事件日期类型);字符集为utf8;
create table reserve (id int primary key auto_increment,bookname varchar (20) not null,writer char(50) not null,price FLOAT(4,2),amount int);

create database:创库
drop table:删表
drop database:删库
alter:(开发常用)

DML数据库操作语言

  1. 增:insert into
  2. 删:delete form
  3. 改:update

DML命令

insert into

insert into <tablename> set col1=<value>,col2=<value>,……,;
insert into <tablename> values (valuse1,valuse2,valuse3);
insert into reserve values (2,'Linux inside','kevin','2008-2-15',83.00,50),(3,'LAMP','tom','2008-2-5',82.5,50);

delete form

delete form <tablename> where <条件>
--delete form是针对行进行删除
--一定要加条件

update

update <tablename> set col1=<value>,col2=<value>,……,where=条件;
--一定要加条件,不然会匹配所有行

DCL数据库控制语言

  1. 认证(user、password、host)
  2. 权限(可以执行的sql语句)

DCL命令

grant:认证和授权;授权不存在用户时会先创建用户再进行授权,越精确越优先

grant <priv> on <databases>.<tables> to <username>@<host> identified by <password>;
--将作用于一个库(databases)一个表(tables)的一个权限(priv)授权给来自于一个地址(host)的一个用户(uesrname),他的密码是(password)
grant all on *.* to kun@'%' identified by 'Kun950512';
--priv:all——除了授权意外的所有权限;
--*.*表示任意库的任意的表
--kun@'%'表示来自任意地址的kun用户;%表示任意
grant all on ecshop.* to php@'localhost' identified by 'php123';
--授权来自localhost的php用户对于ecshop库下所有表的所有权限
flush privileges;
--刷新授权,mysql会在数据库空闲时自动刷新权限,但是不够及时,我们这里手动刷新一下

revoke:回收权限;

revoke <priv> on <databases>.<tables> to <username>@<host>
--将来自于一个地址(host)的一个用户(uesrname)作用于一个库(databases)一个表(tables)的一个权限(priv)回收
revoke all on ecshop.* to php@'localhost';
--回收权限,无法删除用户
flush privileges;
--刷新权限
drop user php@'localhost';
--删除用户

drop user:删除用户
flush privileges:刷新授权

DQL数据库查询语言

1.select
查询的五大字句:where,group,having,order by,limit(了解并知道次序即可,重点掌握where)

关键字

in运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:

select ID,user,password form user WHERE ID IN (1,3,5,7);
--查询user表中的ID,user,password列且ID列等于1,3,5,7的列
select ID,user,password form user WHERE ID NOT IN (1,3,5,7);
--查询user表中的ID,user,password列且ID列不等于1,3,5,7的列

BETWEEN 运算符用于 WHERE 表达式中,选取介于两个值之间的数据范围。BETWEEN 同 AND 一起搭配使用;通常 value1 应该小于 value2。当 BETWEEN 前面加上 NOT 运算符时,表示与 BETWEEN 相反的意思,即选取这个范围之外的值。语法如下:

select ID,user,password form user WHERE ID BETWEEN 1 AND 10
--查询user表中的ID,user,password列且ID列在1-10这个范围的列
select ID,user,password form user WHERE ID NOT BETWEEN 1 AND 10
--查询user表中的ID,user,password列且ID列不在1-10这个范围的列

like运算符,适用于模糊查询,全表搜索,无法使用使用索引,进度较慢语法如下:

select ID,user,password form user WHERE user like 'xin%';
--查询user表中的ID,user,password列且user列以xin开头的列
select ID,user,password form user WHERE user like 'xin___';
--查询user表中的ID,user,password列且user列以xin开头后面只有三个字符的列

group:常用语分类统计,求平均等场景,与一下函数进行配合

max——最大
min——最小
sum——求和
avg——平均
count——总行数
语法如下:

select  cat_id,max(shop_price),min(shop_price),avg(shop_price) from goods group by cat_id;
查询goods表中以cat_id为分组的shop_price列最大的,最小的和平均值

逻辑运算符

NOT或!——非
AND或&&——与
OR或||——或
XOR——异或

基础命令

systemctl start mariadb
#启动mariadb
mysql -uroot -p
#登录到mariadb数据库
mysql -u root password Kun950512
#创建mysql的密码
mysql -u root password  Kun950512
#修改密码
show databases;

--显示所有库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
--information_schema记录了数据库里面所有库和表的信息
--mysql              
--performance_schema记录数据库有木有锁,是否挂了,数据库管理员排错使用
--test公共库,没有限制,任何权限都可以操作 
use mysql;
--进入mysql库
show tables;
--显示所有表
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
--user存放着mysql里面所有的认证(是否能进来)和权限(进来后能作什么)  
select * from user limit 2;
--打印user表的前2行的所有列
--limit显示多少行,非标准sql语句
--select为过滤列
select user,Password,Host from user limit 2;
--显示user表前2行的user列、password列和host列
delete from mysql.user where user=' ' or password=' ' or host=' ';
--删除mysql库下user表中的user为空白或者password为空白或者host为空白的列
--where为过滤行
--过滤为先行后列
select user,password,host from user where 1;
--user表中的user,password,host列为真就打印出来
select user,password,host from user where 0;
--user表中的user,password,host列为假就打印出来

有错请指出,不喜勿喷,不接受喷我小白,虽然这是事实,如果要喷请预约

相关文章

网友评论

      本文标题:MySQL数据库

      本文链接:https://www.haomeiwen.com/subject/cxjspftx.html