MySQL关系型数据库
什么是数据库?
数据库是存放数据的电子仓库。以某种方式存储百万条,上亿条数据,供多个用户访问共享。
数据库分为关系型数据库和非关系数据库
【1】关系型数据库:
1)定义:依据关系模型创建的数据库,把数据保存在不同的表中,表与表存在着某些关系。
2)举例:mysql(甲骨文公司的产品),oracle(甲骨文公司的产品收费的),postgresql,db2,sql server(微软)
3)特点:
安全
保持数据的一致性
实现对表与表进行复杂的数据查询
【2】非关系型数据库:
1)定义:非关系型数据库也叫nosql数据库,全称not only sql。通常数据以对象的形式存储在数据库中,不固定结构,例如列模型,键值对模型。
2)举例:redis(键值对模型),mongodb(文档类模型),hbase(列模型)
3)特点:
效率高
容易扩展
使用更加灵活
数据库存储形式
【1】关系型数据库
关系型数据库当中有很多张表,以表的形式进行存储(类似于xlsx格式的Excel工作簿当中有很多的sheet1,sheet2,sheet3的页面)
【2】非关系型数据库
===========================================
MySQL关系型数据库
【1】在web应用方面,Mysql是最好的关系型数据库管理系统
【2】特点:
1)体积小,安装简单,维护成本低
2)开源,免费
3)使用C++编写
4)支持多系统
【3】原理:MySQL数据库中有很多库,可以是自己定义的库student库,score库,每个库里面有很多张表
=========================================
在Linux中安装MySQL数据库
【安装】
【1】yum install mysql ==》y ==》安装客户端
【2】yum install mysql-server ==》y ==》安装服务端
【3】rpm -qa|grep -i mysql ==》查看MySQL是否安装成功
Linux中安装数据库就类似于Windows中安装APP一样
【启动】
【1】service mysqld status ==》查看MySQL数据库的状态
【2】service mysqld start / restart ==》启动 / 重启 MySQL数据库
mysqld(d代表的是daemon守护进程的意思)
【3】service mysqld stop ==》停止运行MySQL数据库
【登录进入到数据库】
【1】mysql -uroot -p ==》登录进入到MySQL数据库中(第一次登录没有密码)
-uroot(u 代表 user 用户 root 用户)
-p(password 密码)
【2】MySQL> exit ==》退出MySQL数据库
【设置密码】
mysqladmin -uroot password '123456' ==》帮root用户设置密码为123456
设置完之后的登录方式:
1)mysql -uroot -p123456
2)mysql -uroot -p ==》Enter password:(输入123456,密码不显示)
数据库当中有很多表
mysql> 进入库之后一定一定要加分号 ;
【创建库】
mysql> show databases; ==》显示MySQL中所有的数据库
mysql> create database dcs1; ==》创建dcs1这个数据库
mysql> drop database dcs1; ==》删除dcs1这个数据库
mysql> use dcs1; ==》进入dcs1这个数据库
mysql> select database(); ==》显示当前所在的数据库(dcs1)
【创建表】
mysql> show tables; ==》展示当前所在数据库(dcs1)中的表
mysql> create table dcs(id int(20) primary key,score float(20) not null,name varchar(20) not null,phone bigint(20) default 153666777); ==》创建一个dcs表的约束
create table + 表名(字段名称,数据类型,约束........)
mysql> desc dcs; ==》查看dcs表的结构(desc —> description)
==========================================
mysql数据库中的数据类型:
1)数值型:int(存储整数),bigint(超过10位整数用),float(浮点,默认保存6位,Float(20,2)指小数点后面2位)
2)文本型:varchar,char(单个字符)==》插入的数据需要加 ' ' 单引号或者 " " 双引号
3)日期型:date ==》插入的数据需要加 ' ' 单引号或者 " " 双引号
mysql数据库中的约束:
1)非空约束:not null(当前字段id对应的值在表中不能为空)
2)默认值约束:default(当前字段如果没有插入指定的值,默认为153666777)
3)主键约束:primary key 简称:key(当前id这个字段对应的值是唯一的,不能重复的,比如身份证号码不能重复)
4)外键约束:foreign key 对表与表之间的约束(前三个约束是对表和字段之间的约束)
5)自增长约束:auto_increment(作用于主键上面的)
mysql> show tables; ==》展示当前所在数据库(dcs1)中的表(dcs)
【查询数据】
mysql> select * from dcs; ==》查询dcs表中所有的数据内容
mysql> select name from student; ==》只查询student表中name列的数据内容
mysql> select id,name from student; ==》查询student表中name列和id列的数据内容
【查询并筛选数据】
mysql> select * from student where sex=1; ==》查询筛选student表中性别为1的数据内容
mysql> select * from student where sex !=1; ==》查询筛选student表中性别不为1的数据内容
mysql> select * from student where sex <>1; ==》查询筛选student表中性别不为1的数据内容
mysql> select id,name from student where sex=1; ==》查询student表中所有性别为1的id列和name列
mysql> select * from student where age between 25 and 30; ==》查询student表中所有性别为1的id列和name列
mysql> select * from student where age>=25 and age<=30; ==》查询筛选表中年龄在25和30之间
mysql> select * from student where class in(1833,1835); ==》查询student表中class只为1833和1835的数据
mysql> select * from student where sex not in(0,1); ==》查询student表中sex不为0和1的数据
mysql> select * from student where name='xiaoqi' or age=31; ==》有一个满足条件即可
mysql> select * from student where name='xiaoqi' and age=31; ==》需要同时满足条件
mysql> select * from student where class is null; ==》查询class为null的数据
mysql> select * from student limit 5; ==》查询student表的前五行
mysql> select * from student limit 2,5; ==》表示查询student表中3-7行的数据(2表示从第几行开始【默认索引位最开始为0】,5表示取几行)
===========================================
mysql> select * from student where name like'xia%'; ==》查询name列中以xia开头的数据(%表示通配符)
mysql> select * from student where name like'%an%'; ==》查询name列中有包含an的数据
mysql> select * from student where name like'%qi'; ==》查询name列中以qi结尾的数据
(升序降序排列)
mysql> select * from student order by math desc; ==》按math列降序排列整张表(desc —> descend)
mysql> select * from student order by math asc; ==》按math列升序排列整张表(asc —> ascend)
(分组:和聚合函数一起使用)
聚合函数:
sum()求和
min()求最小值
max()求最大值
distinct()去重
avg()求平均数
count()统计
mysql> select class as '班级',count() as '人数' from student group by class; ==》统计每个班级对应的人数(as表示取别名)
============================
mysql> select class,sum(math) from student group by class having sum(math)>100; ==》查询班级数学总成绩大于100分的班级和总成绩
【重点】group by 后面通常接having使用,不能接where
mysql> select class,sum(math) as s from student group by class having sum(math)>100; ==》as s 将sum(math)取别名
mysql> select class,sum(math) s from student group by class having sum(math)>100; ==》s 直接将sum(math)取别名
==============================
(查询聚合函数的简单到复杂顺序)
mysql> select sum(math) from student; ==》求数学成绩的总分
mysql> select sum(math) from student group by class; ==》求每个班级数学成绩的总分
mysql> select class,sum(math) from student group by class; ==》求每个班级数学成绩的总分以及所对应的班级名称
=======================================
mysql> select distinct(name) from student where sex=0; ==》筛选性别为0,在此基础上对名字进行去重
【增加数据】
mysql> insert into dcs(id,score,name,phone)values(1,88.886,'xiaowang',1384222); ==》往dcs表中插入一行数据
mysql> insert into dcs(id,score,name,phone,class)values(2,0.00,'xiaohong',153666777,1),(3,99.00,'xiaoyi',19747766688,0); ==》往dcs表中同时插入两行数据
mysql> insert into dcs values(6,99,'xiaoliu',157567777); ==》不带字段直接插入一行数据
mysql> insert into dcs values(7,86,'xiaoqi',15754277),(8,79,'xiaoba',1487666778); ==》不带字段同时插入两行数据
mysql> insert into dcs(id)values(9); ==》插入单个数据
mysql> drop table dcs; ==》删除dcs整张表(包括表数据和表结构)
【六】对表数据的操作
【增加表数据】
数据库当中所有的约束都属于表结构中的内容
数据库中分
【1】DDL:数据库定义语言
==》定义库和表的命令:create database,create table,alter table,drop table,drop database
【2】DML:数据库操作语言
==》对表中数据的操作比如:增删改查
1)增加:insert into 命令
2)删除:delete from 表名
3)修改:update 表名 set
4)查询:select ... from
mysql> alter table dcs rename duoceshi; ==》改表名(将dcs改为duoceshi)
mysql> alter table dcs change id sid int(20); ==》改为其他字段(将dcs表中的id字段改为sid)
mysql> alter table dcs change class class int(20) not null; ==》改相同字段的约束
mysql> alter table dcs add class int(20) first; ==》添加一个字段(class字段在最前面)
mysql> alter table dcs add age int(20) after name; ==》添加一个字段(age字段在name字段后面)
mysql> alter table dcs add(sex1 int(20),sex2 int(20)); ==》添加两个字段(sex1和sex2)
mysql> alter table dcs drop sex1; ==》删除一个字段(dcs1)
mysql> alter table dcs drop sex2,drop age; ==》删除两个字段(sex2和age)
mysql> alter table dcs modify class int(20) after id; ==》调整字段位置(将class字段放在id字段的后面)
对于表中的一个字段你是怎么去测试的?
思路:表字段的数据类型和约束。
【删除表数据】
null只是一个空的属性,并不是一个确切的值
对表删除的三种方式
1)drop table + 表名 ==》删除整张表(包括表数据和表结构)
2)truncate +表名 ==》只删除所有的表内容,不删除表结构
3)delete from +表名 where +条件 ==》只删除表中对应条件的内容
mysql> drop table dcs; ==》删除dcs整张表(包括表数据和表结构)
mysql> truncate dcs; ==》删除dcs表内容(只删除表内容,不删除表结构)
mysql> delete from dcs where score = '100'; ==》删除dcs表中score等于100对应的行
mysql> delete from dcs where score is null; ==》删除dcs表中name为空对应的行
mysql> delete from dcs where id >5; ==》删除dcs表中id大于5的数据
===============================================
【修改表数据】
mysql> update dcs set phone=13888888888 where score=100; ==》修改dcs表中score等于100所对应的phone为13888888888
【复制备份表数据】
mysql> create table word like dcs; ==》创建新表word数据类型像dcs(只有类型一样,数据内容为空)
mysql> insert into word select * from dcs; ==》创建新表word内容像dcs
mysql> insert into word(id,score) select id,score from dcs; ==》往新表word里插入id和score内容(此时表结构已经按照dcs创建好了)
【复制备份数据库】重开一个窗口,双击ip地址
步骤如下:
【1】右窗口[root@localhost /]# mysqldump -uroot -p123456 dcs2>/dcs/dcs2.sql ==》将dcs2数据库备份到根目录下的dcs目录中并取名为dcs2.sql
【2】左窗口mysql> drop database dcs2; ==》删除dcs2数据库
【3】左窗口mysql> create database dcs2; ==》重新创建一个dcs2的数据库
【4】右窗口[root@localhost dcs]# mysql -uroot -p123456 dcs2</dcs/dcs2.sql ==》将根目录下的dcs目录中的dcs2.sql中的数据还原到数据库中并取名为dcs2(必须先在数据库中创建一个名为dcs2的库才能进行还原)
【mysql的用户权限操作】
mysql数据库中:
localhost是具有本地访问权限的用户
%是具有远程访问权限的用户
mysql> show databases; ==》显示所有的库(其中有一个mysql库)
mysql> use mysql; ==》进入到mysql库(库中有一个user表)
mysql> select * from user; ==》查询user表中的所有内容
mysql> select host,user from user; ==》查询user表里面的host和user字段