数据据库的英文单词:DataBase 简称:DB
什么是数据库?
用于存储和管理数据的仓库
数据库的特点
持久化储存数据。其实数据库就是一个文件系统
方便存储和管理数据
使用了统一的方式操作数据库 SQL
常见的数据库软件
MYSQL, DB2, SQLSever, SyBase, SQLife, Oracle
手动 在此电脑管理 服务里面
* cmd-> services.mcs 打开服务的窗口
mysql -uroot -p密码
mysql -hip -uroot –连接目标的密码
mysql –host=ip –user=root –password=连接目标的密码
MySQL退出
1.exit
2.quit
Mysql目录结构
1.安装目录
* 配置文件 My.ini
单行注释:- - 注释内容 或#注释内荣
多行注释:/* 注释* /
操作数据库:CRUD
1.C(Create):创建
* 创建数据库:
creste database 数据库名称
创建数据库,判断不存在,在创建:
*create database if not exists 数据库名称;
创建数据库,并指定字符集
*create database 数据库名称 character set字符集名;
练习:创建db4数据库,判断是否存在,并制定字符集为gbk
*create database if not exists db4 character set gbk;
2. R(Retrieve):查询
* 查询所有数据库名称:
show databases;
* 查询某个数据库的字符集:查询某个数据库的创建语句
show create database 数据库名称;
3.U(Update):修改
* 修改数据库的字符集
alter database 数据库名称 character set 字符集名称
4.D(Delete):删除
* 删除数据库
drop database 数据库名称;
* 判断数据库存在,存在再删除
drop database if exists 数据库名称;
5.使用数据库
* 查询当前正在使用的数据库名称
select databaessh ();
* 使用数据库
use 数据库名称;
1.C(Create)创建
1.语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2
…
列名n 数据类型n
);
*注意:最后一列不需要加逗号(,)
*数据库类型
1.int:整数类型
2.double:小数类型
*score double(5,2)
3.date:日期,只包含年月日,
4.datetime:日期,包含年月日时分秒
5.timestamp:时间类型 包含年月日时分秒
6.varchar:字符串
*创建表
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
*复制表
create table 表名 like 被复制的表名;
2.R(Retrieve)查询
*查询某个数据库中所有表名称
*show tables;
*查询表结构
*desc 表名
3.U(Update):修改
1.修改表名
alter table 表名 rename ti 新的名字
2.修改表的字符集
alter table 表名 character set 字符集名称;
3.添加一列
alter table 表名 add 列名 数据类型;
4.修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
5.删除列
alter table 表名 drop 列名;
4.D(Delete):删除
*drop table 表名
*drop table if exists 表名
### DML:增删改表中数据(重点)
1.添加数据
*语法:
*insert into 表名(列名1,列名2, , , ,列名n)values(表1,表2 , , 表n);
*注意:
1.列名和值一一对应
2.如果表名后,不定义列名,则默认给所有列添加值
insert into 表名 values(值1,值2,…值n);
3.除了数字类型,其他类型要用引号
2.删除数据
*语法:
*delete from 表名 where 条件}
*注意:
1.如果不加条件,则删除表中所有记录
2.如果要删除所有数据:TRUNCATE TABLE 表名; /先删除表,然后再创建一张一样的表
3.修改数据
*语法:
*update 表名 set 列名1 = 值1,列名2 = 值2,…{where 条件};
*注意:
1.如果不加条件,则删除表中所有记录
* slect* from 表名;
1.语法:
select
字段列表
from
表名列数
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询
1.多个字段的查询
select 字段名1.字段名2…from 表名;
*注意:
如果查询所有字段,则可以使用代替字段列表
2.去除重复
*distinct
3.计算列
*一般可以使用四则运算来计算一些列额值。(一般只会进行数值型的计算)
*ifnull(表达式1,表达式2)
*表达式1:哪个字段需要判断是否为null
*如该字段为null后的替换值
4.起别名
*as:as也可以省略 打个空格就行
3.条件查询
1.where子句后面跟条件
2.运算符
*<,>,<=,>=,=,<>
*between and
*in(集合)
*like:模糊查询
*占位符:
*-单个任意字符
*%多个任意字符
*is null
*and 或&&
*or 或||
*not 或 |
查询年龄大于20岁
select *from student where age > 20;
select *from student where age >= 20;
查询年龄等于20岁
select *from student where age = 20;
查询年龄不等于20岁
select *from student where age <> 20;
select *from student where age |= 20;
查询年龄大于等于20小于等于30
select *from student where age >= 20; && age <=30;
select *from student where age >= 20; and age <=30;
select *from student where age between 20 and 30;
查询年龄22岁,18岁,25岁的信息
select *from student where age = 22 or age = 18 or age = 25;
select *from student where age in (22.18,25);
查询英语成绩为null
select *from student where english = null;这是不对的。null值不能用= (|=)判断
select *from student where english is null;
查询英语成绩不为null
select *from student where english is not null;
1.排序查询
*语法:order by 子句
*order by 排序字段1 排序方式1,排序字段2,排序方式2…
*排序方式:
*ASC:升序
*DESC:降序
*注意:
如果有多个排序条件,则当前边的条件值一样时,才会判断第二条件
2.聚合查询:将一列数据作为一个整体,进行纵向的计算
1.count:计算个数
1.一般选择非空的列;主键
2.count()
2.max:计算最大值 select max(math) from student;
3.min:计算最小值
4.sun:计算和
5.avg:计算平均值
*注意;聚合函数的计算,排除null值
解决方案:
1.选择不包含非空的列进行计算
2.ifunll函数
3.分组查询
1.语法:group by 分组字段
2.注意:
1.分组之后查询的字段:分组字段。聚合函数
2.where和having 的区别?
where 在分组之后进行限定,如果不满足条件,则不参与分组。having在分组之后进行限定,如果不满足结果,则不会被查询出来
where后不可以跟聚合函数,having 可以进行聚合函数的判断
4.分页查询
1.语法:limit 开始的索引,每页查询的条数;
2.公式:开始的索引 = (当前的页码 - 1 ) * 每页显示的条数
–每页显示三条记录
select * from student limit 0,3; --第一页
select * from student limit 3,3; --第二页
select * from student limit 6,3; --第三页
3.limit是一个“方言”
*概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
*分类:
1.主键约束:primary key
2.非空约束:not null
3.唯一约束:nuique
4.外键约束:foreign key
*非空约束:not full
1.创建表是添加约束
create table stu(
id int,
name varchar(20)not null --name为非空
);
2.创建表完后,添加非空约束
alter table stu modify name varchar(20) not null;
3.删除name的非空约束
alter table stu modify name varchar(20);
*唯一约束:unique ,值不能重复
1.创建表时,添加唯一约束
create table stu(
id int,
phone_number varchar(20) unique --添加了唯一约束
);
*注意:在mysql中,唯一约束限定的列的值可以有多个null
2.删除唯一约束
alter table stu drop index phone _number;
3.在创建表后,添加唯一约束
alter table stu modify phone_number varchar(20) unique;
*主键约束:primary key
1.注意:
1.含义:非空并唯一
2.一张表只能有一个字段为主键
3.主键就是记录的唯一标识
2.在创建表时,添加主键约束
create table stu(
id int primary key,–给id添加主键约束
name varchar(20)
);
3.删除主键
错误形式 alter table stu modify id int;
正确 alter table stu drop primary key;
4.创建完表之后,添加主键
alter table stu modify id int primary key;
5.自动增长:
1.概念:如果某一列是数值型的,使用auto_increment 可以来完成值得自动增长
2.在创建表时,添加主键约束,并且完成主键自动增长
create table stu(
create table stu(
id int primary key auto_increment, --给Id添加主键约束
name varchar(20)
);
3.删除自动增长
alter table stu modify id int;
4.添加自动增长
alter table stu modify id int auto_increment,;
*外键约束:foreign key,让表与表产生关系,从而保证数据的正确性
1.在创建表时,可以添加外键
*语法:
create table 表名(
…
外键列
costraint 外键名称 foreign key (外键列名称) rferences 主表名称 (主表列名称)
);
*概念:对表中的数据进行限定,保证数据的正确性,有效性和完整性。
*分类:
1.主键约束:primary key
2.非空约束:not null
3.唯一约束:nuique
4.外键约束:foreign key
*非空约束:not full
*唯一约束:unique ,值不能重复
1.创建表时,添加唯一约束
create table stu(
id int,
phone_number varchar(20) unique --添加了唯一约束
);
*注意:在mysql中,唯一约束限定的列的值可以有多个null
2.删除唯一约束
alter table stu drop index phone _number;
3.在创建表后,添加唯一约束
alter table stu modify phone_number varchar(20) unique;
*主键约束:primary key
1.注意:
1.含义:非空并唯一
2.一张表只能有一个字段为主键
3.主键就是记录的唯一标识
2.在创建表时,添加主键约束
create table stu(
id int primary key,–给id添加主键约束
name varchar(20)
);
3.删除主键
错误形式 alter table stu modify id int;
正确 alter table stu drop primary key;
4.创建完表之后,添加主键
alter table stu modify id int primary key;
5.自动增长:
1.概念:如果某一列是数值型的,使用auto_increment 可以来完成值得自动增长
2.在创建表时,添加主键约束,并且完成主键自动增长
create table stu(
create table stu(
id int primary key auto_increment, --给Id添加主键约束
name varchar(20)
);
3.删除自动增长
alter table stu modify id int;
4.添加自动增长
alter table stu modify id int auto_increment,;
*外键约束:foreign key,让表与表产生关系,从而保证数据的正确性
1.在创建表时,可以添加外键
*语法:
create table 表名(
…
外键列
costraint 外键名称 foreign key (外键列名称) rferences 主表名称 (主表列名称)
);
2.删除外键
alter table 表名 drop foreign key 外键名称 ;
3.创建表之后,添加外键
alter table 表名 adda costraint 外键名称 foreign key (外键字段名称) references 主表名称(主表列名称);
4.级联操作
1.添加级联操作
语法:alter table 表名 add costraint 外键名称
foreign key (外键字段名称) references 主表名称(主表列名称) on update cascade on delete cascade;
2.分类:
1.级联更新:on update cascade
2.级联删除:on delete cascade
1.多表之间的关系
1.一对一:
2.一对多(多对一)
如:部门和员工. 一个部门对应多个员工 但是一个员工值对应一个部门
3.多对多:
如:学生和课程
2.实现关系:
1.一对多(多对一)
实现方式:在多的一方建立外键,指向一的一方的主键!
2.多对多
实现方式:需要借助第三张中间表。
中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
用到了“联合主键”
3.一对一
实现方式:可以在任意一方添加‘唯一’外键指向另一方的主键。
2.数据库设计的范试
*概念:设计数据时,需要遵循的一些规范。要遵循后边的,必循先遵循前面的范式要求
*分类:
1.第一范式1NF:每一列时不可分割的原子数据项
2.第二范式:基于第一范式(消除部份依赖)
*几个概念:
1.函数依赖:A-->B 如果A属性的值可以确定唯一B属性的值,则称B依赖于A
2.完全函数依赖:A-->B,如说A是一个属性组,则B属性值的确定要一依赖A属性组中的所有属性值
3.部分函数依赖:A-->B,如说A是一个属性组,则B属性值的确定只需要依赖于A属性组中某一些值即可
4.传递函数依赖:A-->B,B-->C,如果通过A属性(属性组),可以确定唯一B属性(属性组),可以确定唯一C属性的值,则称C传递函数依赖于A
5.码:如果在一张表中,一个属性或属性组被其他所有属性完全依赖,则称这个属性(属性组)为该表的码
* 主属性:码属性组中的所有属性
* 非主属性:
3.第三范式:基于第二范式(消除传递依赖)
1.命令行:
语法:
备份:mysqldump -u用户名 -p密码 数据库名称 > 保存的路径
还原:
登录数据库
创建数据库
使用数据库
执行文件。source 文件路径
用命令行:mysqldump -uroot -p密码 db1 > d://a.db1
show databases;
drop batabase db1;
create batabase db1;
use db1;
source d://a.sql;
show tables;
图形化工具
2.图形化工具