数据库是一个软件,包含服务端和客户端
一般安装数据库指的是安装服务端(基本上所有数据库都会自带命令行客户端)
学习客户端:MySQL Command Line
Windows CMD
启动服务:net start myaql
停止服务:net stop mysql
连接:mysql -uroot用户名 -p密码 -h主机地址(登录本机的就不用这个)
![](https://img.haomeiwen.com/i6937468/78f31eccfd1f14f1.png)
退出:quit、exit、\q
数据概念:
发展:人工记录(纸质)
软件 (office)
数据库 (MySQL Oracle SQLServer)
数据库分类:
关系型数据库:
MySQL (中小型,开源,Oracle)
Oracle(大型,收费)
SQLServer(中大型,收费,微软)
SQLLinte(安卓包含)
说明:一个数据库内装若干个表格,以表存储数据,
关系指的是行和列的关系和表与表之间关系。
非关系型数据库:
NOSQL ManggoDB
如何查看当前数据库服务器下有哪些数据库:
show databases;
![](https://img.haomeiwen.com/i6937468/8f330347e0227f33.png)
创建数据库
create database 这里写自己取的名称;
![](https://img.haomeiwen.com/i6937468/91e282e601241eac.png)
如何删除数据库:
drop database 创建的数据库的名称;
![](https://img.haomeiwen.com/i6937468/6cba196de241e3fd.png)
如何创建数据表:
先找到需要创建数据表的数据库:
use 数据库名称;
![](https://img.haomeiwen.com/i6937468/5e6891097eeb5343.png)
create table 表名(
编号 int,整数
名称 varchar(范围),字符串
价格 double,小数
日期 date,日期
);
![](https://img.haomeiwen.com/i6937468/6db840a0b2e9f523.png)
如何查看数据库中创建的数据表:
show tables;
![](https://img.haomeiwen.com/i6937468/fc068f0fc644e3f9.png)
删除数据表:
drop table 数据表名称;
查看数据表的结构:
desc 数据表名称;
如何添加数据到数据表中(1):
insert into 数据表的名称 values(列1的值,列2的值,列3的值,列4的值,............);
在需要添加数据的列中插入某列的数据(2):
inert into 数据表名称(列名,列名,列名,列名.......) values(值,值,值,值);
查看数据表中的数据:
select * from 数据表的名称;
数据类型:
![](https://img.haomeiwen.com/i6937468/c44d0fec9a61f71e.png)
![](https://img.haomeiwen.com/i6937468/e6de3bf387cc48c5.png)
日期和时间类型:
![](https://img.haomeiwen.com/i6937468/9aacc11fa88e3ae7.png)
字符串类型:
![](https://img.haomeiwen.com/i6937468/31b970d24b19b1c9.png)
数据表的约束:
一、主键约束:区分表中的数据行,唯一的,不能为空。
create table 数据表名称(
id int primary key,
name varchar(10)
);
![](https://img.haomeiwen.com/i6937468/4630932245e5e628.png)
二、非空约束:要求这一列插入数据时必须给值。
create table 数据表名称(
id int primary key,
name varchar(20) not null
);
三、默认值:在某一列中设置默认值
create table 数据表名称(
id int primary key,
name varchar(20) not null,
age int default '默认的字符'
);
四、唯一约束:不允许重复的
create table 数据表名称(
id int primary key,
name varchar(20) not null,
age int default '默认的字符',
tel varchar(15) unique
);
五、外键约束:
在主键列表中:constrain fk_主外键表名称_副外键表名称_外键列名称 foreign key(主外键列名称) references 副外键表名称(外键列名称)
![](https://img.haomeiwen.com/i6937468/65a52635478a5b97.png)
SQL语言(Struct query language)
![](https://img.haomeiwen.com/i6937468/9454c51bbb40ff05.png)
数据库方言:各个数据库特有的一种语法(不是特别多)。
标准SQL:各个数据库通用的语法。
分类:DDL(数据定义语言) create alter drop
DML(操作语言) insert delete update
DQL(数据查询语言) select
DCL(数据控制语言)事务控制语言
alter 修改表结构的语句:
1、重命名表
alter table 原数据表名 rename to 新数据表名;
![](https://img.haomeiwen.com/i6937468/00a262408dd7f83b.png)
2、添加列
alter table 数据表名 add 列名 类型 约束;
![](https://img.haomeiwen.com/i6937468/08f5445f5d20a7b4.png)
3、删除列
alter table 数据表名 drop 列名;
![](https://img.haomeiwen.com/i6937468/85a6e4a4853ad5a2.png)
4、修改列
alter table 数据表名 change 旧列名 新列明 类型 约束;
![](https://img.haomeiwen.com/i6937468/12f9aaa0364d2cc8.png)
5、添加约束
主键约束:
alter table 主键数据表名 add constraint 主键名 primary key(主键列);
![](https://img.haomeiwen.com/i6937468/62d324cf36a197ac.png)
非空约束:
alter table 数据表名 change 列名 列名 数据类型 not null;
alter table 数据表名 modify 列名 数据类型 not null;
![](https://img.haomeiwen.com/i6937468/4527d7b2cad74eb0.png)
唯一约束:
alter table 数据表名 modify 列名 数据类型 unique;
![](https://img.haomeiwen.com/i6937468/801b4eb1f5b6a214.png)
默认值:
alter table 数据表名 modify 列名 数据类型 ;
![](https://img.haomeiwen.com/i6937468/24df4738759bb2b8.png)
外键约束:
alter table 主键数据表名 add constraint fk_主键数据表名_副键数据表名_主键列名 foreign key(主外键列名称) references 副外键表名称(外键列名称);
![](https://img.haomeiwen.com/i6937468/d26d225c9ebf9de8.png)
6、删除约束
删除主键约束:
alter table 主键数据表名 drop primary key;
这样删除不彻底,还需要删除非空约束:
alter table 数据表名 modify 列名 数据类型 null;
删除外键约束:
alter table 主键数据表名 drop foreign key fk_主键数据表名_副键数据表名_主键列名;
![](https://img.haomeiwen.com/i6937468/6331534469483e0a.png)
删除唯一约束:
alter table 主键数据表名 drop index 列名;
插入语句:
![](https://img.haomeiwen.com/i6937468/29029181fea319d4.png)
删除数据:
delete from 数据表名 where 数据表列名 过滤条件
过滤条件:
运算符过滤:=、<、>、<=、>=、!=或者 <>
关键字过滤:is null(为空) in('关键字','关键字',.......)
between 数值 and 数值
模糊筛选: like '字符'
_一个任意字符
%任意多个任意字符
逻辑运算符:
and 两个条件同时满足,只能在一个单元(一行)内使用。
or 满足任意一个条件
注意过滤条件的使用:当多个条件时,需把同一个条件用()隔开
![](https://img.haomeiwen.com/i6937468/6e3d5d51709895e6.png)
修改数据:
update 数据表名 set 列名='新值',列名='新值',.........where 列名 过滤条件;
注:更改多个列时用,隔开
查询数据:
select 要查询的列 from 数据表名;
给列取临时别名:
select 列名 as '别名';
select 列名 '列名';
注意:在开发中尽量避免使用*,因为*效率低!
排序:
select 列名 from 表名 order by 列名 asc(升序);
select 列名 from 表名 order by 列名 desc(降序);
结果限定:
select 列名 from 表名 limit 跳过的长度 ,要取出的长度;(如果没有跳过的长度,那就代表要跳过的长度为零)
列运算:
把查询结果进行数学运算,不会影响表中的数据,只是这次查询中生效
用+ - * / %
当有null时,和任何数据运算都为null
![](https://img.haomeiwen.com/i6937468/7bfb152e864bc9fe.png)
ifnull(列名,0),取代原列名
concat('字符',原列名),原列名前加字符
![](https://img.haomeiwen.com/i6937468/ed1c8b17a2186351.png)
分组,方便统计
统计总数:count(列名,*)
注意:null 不计入统计
去除重复 distinct
统计最大值:max(列)
统计最小值:min(列)
统计平均值:avg(列)
统计和:sum(列)
![](https://img.haomeiwen.com/i6937468/3e48fa619f90f381.png)
日期函数:
获取年:year(列名)
获取月:month(列名)
获取号:day(列名)
获取本地日期时间:now()
![](https://img.haomeiwen.com/i6937468/e34d30e932480f35.png)
![](https://img.haomeiwen.com/i6937468/03ad8865149701e0.png)
分组:
select 列名 from 表名 group by 分组列
注:如果是用列名进行筛选在group by前用where进行条件筛选,如果是用统计函数进行筛选在group by后用having进行条件筛选!
![](https://img.haomeiwen.com/i6937468/c5fa23b257d5be0a.png)
SQL语言执行顺序:
from→where→group→select→having→order by→limit
复合查询:
子查询(嵌套查询)
select 列名 from 表名 where 列名 运算符(select 列名 from 表名)
![](https://img.haomeiwen.com/i6937468/139f67d33976d018.png)
处理多行子查询:子查询返回了多个值。
![](https://img.haomeiwen.com/i6937468/b3fe4bc43defb03b.png)
any:任意
>any:大于最小的那一个
<any:小于最大的那一个
![](https://img.haomeiwen.com/i6937468/6f8f2f88f45cdb79.png)
all:全部
>all:大于最大的那一个
<all:小于最小的那一个
![](https://img.haomeiwen.com/i6937468/057f98d693cb87ed.png)
in:集合
![](https://img.haomeiwen.com/i6937468/7fa234eb6af83b49.png)
连接查询:
等值连接
select 列名 from 表名 ,表名......where 连接条件;
多表连接查询时尽量使用别名,以解决列名冲突;没有表名要使用表名.列名如图:
![](https://img.haomeiwen.com/i6937468/ac86df1828e2823f.png)
外链接:
左外连接:左外全部显示,右边无法匹配的显示null
select 列名 from 表名 left join 表名 on 连接条件
![](https://img.haomeiwen.com/i6937468/10c2f531a4ef30f7.png)
右外连接:右外全部显示,左边无法匹配的显示null
select 列名 from 表名 right join 表名 on 连接条件
![](https://img.haomeiwen.com/i6937468/7df4b9e83e0611c1.png)
全外连接:
注:MySQL中不支持使用 ,只能用union,同时union all 合并结果不会去掉重复,使用union合并结果会去掉重复
select 列名 from 表名 left join 表名 on 连接条件union select 列名 from 表名right join表名 on 连接条件
![](https://img.haomeiwen.com/i6937468/8bd6cb1bfa458660.png)
数据库软件:navicat.11.2.16.premium_cs_x64.zip
在数据库软件中查询多个外连接表:
![](https://img.haomeiwen.com/i6937468/ff68cf5febc87c8f.png)
虚表:不是数据库物理存在的表,是把一个查询结果视为一张表使用,使用虚表要使用别名。
![](https://img.haomeiwen.com/i6937468/31d174e59523c9db.png)
视图表:
创建视图表:
create view 自定义表名 as 后面跟上自己所需要显示的表列和条件
使用视图表:select * from 视图表名
![](https://img.haomeiwen.com/i6937468/e9c3126e97cf7d98.png)
删除视图表:drop view 视图表名
注意:可以修改视图表中的数据,但是不能删除视图表中的数据(使用连接查询的视图包含 join)不能添加视图表中的数据,原数据表里的数据发生变化会在视图表中变化体现出来。
索引:
![](https://img.haomeiwen.com/i6937468/4a4c95b97605a1bd.png)
网友评论