数据库的基础概念
定义——数据库:保存有组织的数据的容器
定义——管理系统(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数据库定义语言
- 声明列类型
- 常见约束
- 建库建表
- 删库删表
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数据库操作语言
- 增:insert into
- 删:delete form
- 改: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数据库控制语言
- 认证(user、password、host)
- 权限(可以执行的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列为假就打印出来
注
有错请指出,不喜勿喷,不接受喷我小白,虽然这是事实,如果要喷请预约