一.数据库分类:
数据库:存放各种数据的仓库。
1.关系型数据库:MySQL,Oracle,SQL Server系列...
2.非关系型数据库:redis,mongodb....
关系型数据库特征点:所有的数据都是以表的形式来存储的
===>关系型数据库存储数据的方式(形式):表
二.什么是数据库技术(数据库技术所研究的问题)
1.科学的组织和存储数据
2.高效的获取和处理数据
数据库存储的基本对象:数据
三.SQL语言
SQL:结构化查询语言,专为关系型数据库而建立的操作语言
小技巧:SQL语言是有通用的原则,只要接触到的数据库属于关系型数据库,这些语法结构是可以直接拿来使用的
在使用SQL语言时,只需要发出"做什么"的命令,具体"怎么做"使用者不需要参与
四.关系型数据库典型代表之一-----MySQL数据库
为什么许多中小型企业会把MySQL数据库作为网站开发的首选数据库?
MySQL数据库特征:
1.开源免费:开放源代码,可以供开发根据实际项目需求做出修改
2.体积小:MySQL的安装与使用不会消耗太多系统资源
3.成本低:毕竟是免费的,所以技术支持相对来说比较便宜
4.速度快:对于数据的运行和处理速度也是比较可观的
5.可移植性(跨平台的):可以在多个操作系统中来使用
6.MySQL数据库技术也可以和开发技术相结合,提供开发人员所需要的大多数功能(了解)
五.MySQL数据库的安装
安装成之后的验证:连接mysql数据库
六.MySQL数据库的连接使用
连接使用方式一:使用mysql自带的命令行工具
MySQL5.6 Command Line Client
连接使用方式二:找到了第三方软件---->Navicat工具:连接mysql数据库
打开连接之后,如果能看到mysql自带的四个系统库,就代表着Navicat已成功连接本地安装的MySQL数据库
七.MySQL数据库的创建与删除
1.创建数据库
语法:create database 数据库名字;
2.库创建完成之后,也可以进行查看
查看现有数据库的语法:show databases;
3navicat的编写
4.MySQL数据库中的注释--->只是起到解释说明的作用,不参与执行
单行注释: -- 单行注释的内容
多行注释: /*多行注释的内容*/
5.删除数据库
语法:drop database 数据库名字;
八.表的创建与使用
数据库创建完成,就可以向库中存储数据,但是,数据的存储,在mysql中也是有自己的组织方式:表,所以在存数据之前,把库中对应的表先创建出来。
结构:数据库----->生成表---->存数据
表:由行和列组成
1.创建表语法结构
create table 表名(列名1 数据类型,列2 数据类型,列名3 数据类型,列名n 数据类型);
注意:最后一个列是不加逗号,所有的标点符号都是英文版的
2.MySQL常见的数据类型
2.1数值型
2.1.1整数:默认的是int,微整型tinyint,小整型smallint,大整型bigint
2.1.2小数:被称为浮点数,默认的是decimal(总位数,小数位数)
例:价格 decimal(5,2) 234.99
2.2字符串类型
2.2.1char(字符长度) 例:姓名 char(10) 名字值长度不能超过10个字符
2.2.2varchar(字符长度) 例:籍贯 varchar(4) 籍贯值长度不能超过4个字符
区别:char(长度),属于定长字符串操作,给定的长度空间会被占满,即使有空余,也会被系统补上空格进行填充。
例:name char(10) ---->tom--->只占了3个长度空间的字符,剩下7个长度空间未被利用,这时候系统不会做释放,会填充空格把剩余的空间给占用。
varchar(长度),属于变长字符串操作,长度占用是以实际的值来决定,未占用的空间,会被系统释放出来。
例:name varchar(10)---->tom--->占了3个字符,剩下7个字符长度空间未被利用,这个时候系统会把未占用的空间给释放出来做其它的事情。
2.3日期时间类型
data 数据
date 日期
MySQL默认的是datetime,'yyyy-mm-dd hh:mm:ss'
date 年月日 time 时分秒 year 年
3.创建表的操作
需求:创建一个数据库:teststudent,在该库下方创建一张student表
姓名 字符串类型7;年龄 整数类型;入学日期 日期事件类型;
籍贯和性别 字符串类型10
方式一:通过语句,先来进行数据库的切换工作
切换数据库:use 数据库的名字;
例:切换teststudent库:use teststudent;
创建表完成之后,也可以查看表结构:Navicat中,选中建立的表:
方式二:直接在某个库的结构中,选择"查询"--->右键--->"新建查询"
需求:建立一个教师表,教师编号 字符串类型10;姓名 字符串类型6;年龄 整型;薪资 小数类型(7,2) 籍贯 字符串类型8
create table 教师表(教师编号 varchar(10),教师姓名 varchar(6),年龄 int,薪资 decimal(7,2),籍贯 char(8));
九.表的删除
语法格式:drop table 表名;
删除多张表:drop table 表名1,表名2....;
十.修改表结构 alter table系列语句
1.添加列
alter table 表名 add 列名 数据类型;
2.删除表中的列
alter table 表名 drop 列名;
3.修改列的数据类型
alter table 表名 modify 列名 新的数据类型;
4.修改列名(也可以修改数据类型)
alter table 表名 change 原列名 新列名 数据类型;
-- 给student表添加学号 字符串类型10
alter table student add 学号 varchar(10);
alter table student drop 籍贯;
-- 把student表中学号的数据类型类型改为int
alter table student modify 学号 int;
-- 把student表中姓名的长度改为15
alter table student modify 姓名 varchar(15);
-- 把student表中的入学日期 改成 毕业日
alter table student change 入学日期 毕业日期 datetime;
5.显示表结构
语法:desc 表名;
-- 查看student表结构
desc student;
desc 教师表;
十一.在MySQL中一些话语的描述
表:关系
例:一张表,也可以被称为一个关系
表名:关系名
表中的列:又被称为属性,字段
列名:属性名,字段名
表中的行:又被称为元组,记录
例:一个元组,一条记录,指的就是表中的一行数据
表中单元格里面填充的值,被称为属性值,字段值
b.针对已经存在的表,来关联主键约束
格式一:
alter table 表名 add constraint 约束的名字 primary key(列名);
格式二:
alter table 表名 add primary key(列名);
格式三:
alter table 表名 modify 列名 数据类型 primary key;
-- 切换数据库
use teststudent;
alter table student add constraint PK_S学号 primary key(学号);
alter table 教师表 modify 教师编号 varchar(10) primary key;
c.删除主键约束
alter table 表名 drop primary key;
-- 删除教师表中教师编号的主键约束
alter table 教师表 drop primary key;
2.联合主键
需求:选课表(学号,课程号,成绩),学号和课程号都得保证唯一,不重复,不为空
思想:指的是把表中的两个列,看成是一个整体,让该整体遵循主键约束的规则
a.创建表的同时创建联合主键
格式二:
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
primary key(列名1,列名2)
);
格式三:
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
constraint 约束名字 primary key(列名1,列名2)
);
b.针对已经存在的表来创建联合主键
格式一:
alter table 表名 add constraint 约束名字 primary key(列名1,列名2);
格式二:
alter table 表名 add primary key(列名1,列名2);
注意:一个表中不管是单列的主键约束,还是两个列的联合主键,有且也只能有一个,它俩是互斥的
-- 切换到db02库中
use db02;
-- 创建一个选课表(学号,课程号,设置成联合主键,成绩)
create table 选课表(学号 varchar(10),课程号 varchar(10),成绩 int,primary key(学号,课程号));
-- 注意:一个表中不管是单列的主键约束,还是两个列的联合主键,有且也只能有一个,它俩是互斥的
-- 删除学生表中的学号主键约束
alter table 学生表 drop primary key;
-- 把学生表中学号和手机号设置为联合主键
alter table 学生表 add primary key(学号,手机号);
-- 删除学号和手机号联合主键
alter table 学生表 drop primary key;
3.唯一约束 unique
思想:一旦把表中的列关联上(设置为)唯一约束,要求该列的值一定是不重复,但是可以为空;一个表中可以设置多个唯一约束;唯一约束的名字如果没有指定,默认是和列名保持一致;唯一约束一旦创建成功,系统会自动给有唯一约束的列捆绑上一个索引。
表中的索引:等同于书本中的目录,方便快速查找需要的数据,加快数据查询.
a.创建表的同时,创建(关联)唯一约束
格式一:
create table 表名(
列名1 数据类型 unique,
列名2 数据类型 unique,
列名3 数据类型
);
格式二:
create table 表名(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
constraint 唯一约束的名字 unique(列名1),
constraint 唯一约束的名字2 unique(列名2)
);
意:唯一约束的名字:如果需求给了名字,直接照搬;名字自定义,建议写法:UN_列名 见名知意
b.针对已经存在的表,来添加唯一约束
格式:alter table 表名 add unique(列名);
c.删除唯一约束
格式:alter table 表名 drop index 唯一约束的名字;
-- 创建一个商品表(商品编号 唯一约束,名称,价格 唯一约束)
create table 商品表(
商品编号 varchar(10) unique,
名称 varchar(10),
价格 int unique
);
-- 创建一个订单表(订单编号 主键约束,订单名称,收获地址,手机号,唯一约束)
create table 订单表(
订单编号 varchar(15) primary key,
订单名称 varchar(10),
收货地址 varchar(20),
手机号 varchar(11),
constraint UN_收货地址 unique(收货地址),
constraint UN_手机号 unique(手机号)
);
-- 给订单表中订单名称设置一个唯一约束
alter table 订单表 add unique(订单名称);
-- 删除订单表中收货地址的唯一约束
alter table 订单表 drop index UN_收货地址;
-- 删除订单表中订单名称的唯一约束
alter table 订单表 drop index 订单名称;
Ⅱ.域完整性约束
基本思想:确保在表中不会输入无效的值
1.默认约束 default
思想:一旦表中的列设置为默认约束,就代表着该列是要给出一个默认值,当用户不添加数据时,默认值自动填充。一个表中可以有多个默认约束。
a.创建表的同时,创建默认约束
create table 表名(
列名1 数据类型 default '值',
列名2 数据类型 default 值,
列名3 数据类型
);
注意:default后面默认的值,如果是字符串类型,或者日期时间类型的值,需要用单引号包裹起来,如果是数值型的值,直接写即可。
b.针对已经存在的表,来关联默认约束
格式:alter table 表名 modify 列名 数据类型 default '值';
c.删除默认约束
格式:alter table 表名 modify 列名 数据类型;
-- 给学生表中性别添加默认约束 默认:男
alter table 学生表 modify 性别 char(2) default '男';
-- 给学生表中年龄也添加一个默认约束 默认:20
alter table 学生表 modify 年龄 int default 20;
-- 删除学生表中年龄的默认约束
alter table 学生表 modify 年龄 int;
2.非空约束 not null
思想:保证列中的值不能有空的;一个表中可以有多个非空约束
a.创建表的同时,创建非空约束
create table 表名(
列名1 数据类型 not null,
列名2 数据类型 not null,
列名3 数据类型
);
b.针对已经存在的表,来关联非空约束
格式:alter table 表名 modify 列名 数据类型 not null;
c.删除非空约束
格式:alter table 表名 modify 列名 数据类型;
-- 创建一个会员表(会员编号 主键约束,姓名 不能为空,性别,手机号 不能为空)
create table 会员表(
会员编号 varchar(10) primary key,
姓名 varchar(10) not null,
性别 varchar(2),
手机号 varchar(11) not null
);
-- 把会员表的性别设置为非空约束
alter table 会员表 modify 性别 varchar(2) not null;
-- 删除会员表中手机号的非空约束
alter table 会员表 modify 手机号 varchar(11);
创建一张表tempStudent,包括sno,sname,sdept,sage四列,为sno添加主键、sname唯一、sdept默认”软件测试”,sage非空约束
1.创建表的同时,创建外键约束
create table 主表(
列名1 数据类型 primary key,
列名2 数据类型
);
create table 从表(
列名1 数据类型,
列名2 数据类型,
列名3 数据类型,
constraint 外键约束的名字 foreign key(从表列名1) references 主表(主表列名1)
);
注意:外键约束的名字:如果需求给了,直接照搬;名字自定义,建议写法:
FK_列名 见名知意
2.针对已经存在的表,来关联外键约束
格式:alter table 从表 add constraint 外键约束的名字 foreign key(从表列名) references 主表(主表列名);
3.删除外键约束
格式:alter table 表名 drop foreign key 外键约束的名字;
/*课程表(Course)
列名 说明 数据类型 约束
Cno 课程号 字符串,长度为10 主码
Cname 课程名 字符串,长度为20 非空
Credit 学分 小整型 非空
Category 课程性质 字符串,长度为10 默认值“必修”,非空*/
create table course(
cno varchar(10) primary key,
cname varchar(20) not null,
credit smallint not null,
category varchar(10) default '必修' not null
);
/*授课表(TC) 参照引用 教师表和课程表
列名 说明 数据类型 约束
Tno 教师号 字符串,长度为7 参照教师表Tno
Cno 课程号 字符串,长度为10 参照课程表Cno
Hours 授课时 小整型 默认是4*/
create table tc(
tno varchar(7),
cno varchar(10),
hours smallint default 4,
constraint FK_tno foreign key(tno) references teacher(tno),
constraint FK_cno foreign key(cno) references course(cno)
);
-- 给学生表的学号添加一个主键约束
alter table 学生表 add primary key(学号);
-- 设置成绩表学号的外键约束,参照引用学生表的学号
alter table 成绩表 add constraint FK_学号 foreign key(学号) references 学生表(学号)
-- 删除tc表中课程号外键约束
alter table tc drop foreign key FK_cno;
===========================================================