零、 复习昨日
第一阶段: Java基础知识(会编程,懂编程)
第二阶段: Web开发(前端,后端,数据库)
一、MySQL
数据库是“按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
- 网状结构数据库:美国通用电气公司IDS(Integrated Data Store),以节点形式存储和访问。
- 层次结构数据库:IBM公司IMS(Information Management System)定向有序的树状结构实现存储和访问。
- 关系结构数据库:Oracle、DB2、MySQL、SQL Server,MariaDB以表格(Table)存储,多表间建立关联关系,通过分类、合并、连接、选取等运算实现访问。
- 非关系型数据库:ElastecSearch、MongoDB、Redis,多数使用哈希表,表中以键值(key-value)的方式实现特定的键和一个指针指向的特定数据。
关系型和非关系型的区别: 主要是指 表和表之间的关系
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
RDBMS 关系数据库管理系统(Relational DataBase Management System,RDBMS)
- Oracle:被认为是业界目前比较成功的关系型数据库管理系统。Oracle数据库可以运行在UNIX、Windows等主流操作系统平台,完全支持所有的工业标准,并获得最高级别的ISO标准安全性认证。
- DB2:IBM公司的产品,DB2数据库系统采用多进程多线索体系结构,其功能足以满足大中公司的需要,并可灵活地服务于中小型电子商务解决方案。
- SQL Server:Microsoft 公司推出的关系型数据库管理系统。具有使用方便可伸缩性好与相关软件集成程度高等优点。
- SQLLite:应用在手机端的数据库。
- MySQL
- MariaDB
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS(Relational Database Management System,关系数据库管理系统) 应用软件之一。
官方网站:https://www.mysql.com/
下载地址:https://dev.mysql.com/downloads/mysql/
目前安装的版本: 5.7+ , 8.0+
版本选择 |
---|
下载页面 |
---|
两种安装方案,详见安装文档
- 启动mysql
- 命令net start mysql
- 任务管理器启动(ctrl+shift+esc)–服务 --mysql(mysql57)
- 登录mysql
- mysql -uroot -pxxxxx
- 退出mysql
- exit
SQL(Structured Query Language)结构化查询语言,用于存取数据、更新、查询和管理关系数据库系统的程序设计语言。
SQL语言有标准,ISO定制了SQL99标准
定义
语言,定义数据库,表,列等操作
语言,操作内部数据(增,删除,修改)查询
语言,对数据的查询控制
语言,定义数据的访问控制和安全mysql是RDBMS: 是关系型数据库管理系统,它管理很多个数据库
库: 一个项目一个数据库,数据库内有很多表
表: 一个分类一个表,表内有很多列
列:一个列代表一个特性(属性/字段)
行:一行代表一个具体实例
查看MySQL中所有数据库
mysql> SHOW DATABASES; #显示当前MySQL中包含的所有数据库
数据库名称 | 描述 |
---|---|
information_schema | 信息数据库,其中保存着关于所有数据库的信息(元数据)。 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。 |
mysql | 核心数据库,主要负责存储数据库的用户、权限设置、关键字等, 以及需要使用的控制和管理信息,不可以删除。 |
performance_schema | 性能优化的数据库,MySQL 5.5版本中新增的一个性能优化的引擎。 |
sys | 系统数据库,MySQL5.7版本中新增的可以快速的了解元数据信息的系统库 便于发现数据库的多样信息,解决性能瓶颈问题。 |
创建自定义数据库[重点]
mysql> CREATE DATABASE mydb1; #创建mydb数据库
mysql> CREATE DATABASE mydb2 CHARACTER SET gbk; #创建数据库并设置编码格式为gbk
mysql> CREATE DATABASE IF NOT EXISTS mydb4; #如果mydb4数据库不存在,则创建;如果存在,则不创建。
查看数据库创建信息
mysql> SHOW CREATE DATABASE mydb2; #查看创建数据库时的基本信息
修改数据库
mysql> ALTER DATABASE mydb2 CHARACTER SET gbk; #修改数据库的字符集
ps: 数据库一旦创建不能修改名字,只能修改编码格式,但是我们在安装mysql时已经确定了数据格式为UTF-8,所以不需要动!!
删除数据库
mysql> DROP DATABASE mydb1; #删除数据库mydb1
查看当前所使用的数据库
mysql> select database(); #查看当前使用的数据库
使用数据库
mysql> USE mydb1; #使用mydb1数据库
总结: 关于数据库的操作,重点记住
- 建库 create database 库名;
- 删库 drop database 库名;
- 涉及的单词很重要
查询当前库下的所有表
mysql> show tables;
创建数据表[重点]
CREATE TABLE 表名(
列名 数据类型(长度) [约束],
列名 数据类型(长度) [约束],
…
列名 数据类型 [约束] //最后一列的末尾不加逗号
)[charset=utf8] //可根据需要指定表的字符编码集
列名 | 数据类型 | 说明 |
---|---|---|
subject_id | INT | 课程编号 |
subject_name | VARCHAR(20) | 课程名称 |
subject_hours | INT | 课程时长 |
CREATE TABLE subject(
subject_id int,
subject_name varchar(20),
subject_hours int
);
# 注释
-- 注释
-- int后长度可以不要,因为默认长度11
-- char,varchar必须加长度
-- varchar,var是单词variable变量的意思,即varchar是指可变长度字符串
-- char(10),存储10个字符串,假如存储的是abc,那么所占空间还是10个,'abc '
-- varchar(10),假如存储的是abc,那么所占空间会改变个,'abc'
-- 字符串取值范围0-255
mysql> -- 创建表
mysql> -- 创建学生表(stu),列: id 数字类型,name 字符串类型,性别 字符型,score 浮点型 ,birthday 日期类型
mysql> create table stu( -- 创建表
-> id int, -- id是列名,int是数据类型,长度是11,默认可以不写
-> name varchar(20), -- name是列名,varchar是可变长字符类型
-> sex char(1), -- sex性别,char定长字符串
-> score double(10,2),-- score 是列名,double浮点型,10是总长度,2其中小数点个数
-> birthday date -- birthday是列名,date是日期类型,不需要长度
-> );
id | name | sex | score | birthday |
---|
数据类型 | 解释 | 长度 |
---|---|---|
int | 整形 | 11,固定,可以省略 |
double | 浮点型 | (x,y) 总长x位,其中包含y位小数 |
char | 定长字符 | 0-255,声明(10)的字符,即使字符不够,也会占用10位 |
varchar | 可变长字符 | 0-255,声明(10)的字符,会根据实际存储缩放 |
date | 日期 | 没有长度,年月日 |
datatime | 日期时间 | 没有长度,年月日时分秒 |
timestamp | 时间戳 | 没有长度,年月日时分秒 |
练习
-- 创建教师表(teacher),教师id(tid),教师名字(tname),所教科目(subject),年龄(age),工资(salary),入职时间(hiredate)
mysql> create table teacher(
-> tid int,
-> tname varchar(20),
-> subject varchar(20),
-> age int,
-> salary double(10,2),
-> hiredate date
-> );
查看表结构
# 查看表结构
desc stu;
向现有表中添加列
#在课程表基础上添加gradeId 列
ALTER TABLE subject ADD gradeId int;
删除表中的列
#删除课程表中 gradeId 列
ALTER TABLE subject DROP gradeId;
修改列名
#修改课程表中 subjectHours 列为 classHours
ALTER TABLE subject CHANGE subjectHours classHours int ;
修改表名
#修改课程表的subject 为 sub
ALTER TABLE subject rename sub;
删除学生表
#删除学生表
DROP TABLE subject;
DDL语句: 增加create,查询show,更新alter,删除drop
-- 库操作
show databases;
create database 名字;
drop database 名字;
alter database 名字 xxxx
-- 表操作
show tables;
create table 名字 (列名 数据类型,列名 数据类型,...)
alter table 名字 xxx
drop table 名字
-- 以上命令,熟悉即可
-- 最重要的是 创建表 语句和图形化操作
Navicat是一套快速、可靠并价格相宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。
MySQL可能是世界上最流行的开源数据库引擎,但是使用基于文本的工具和配置文件可能很难进行管理。SQLyog提供了完整的图形界面,即使初学者也可以轻松使用MySQL的强大功能。其拥有广泛的预定义工具和查询、友好的视觉界面、类似 Excel 的查询结果编辑界面等优点。
DML 数据操作语言,其实对表中的数据进行
- 增
- 删
- 改
插入,就是向数据库表中插入数据,语法
insert into 表名 (字段1,字段2,...) values (值1,值2,...); insert into 表名 values (值1,值2,...);
-- 注释
# 注释
/*
* 多行注释
*/
CREATE TABLE `stu` (
`sid` int(11) DEFAULT NULL,
`sname` varchar(10) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`score` double(5,2) DEFAULT NULL,
`birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ================= 插入 =================
/*
insert into 表名 (字段1,字段2,...) values (值1,值2,...);
注意事项:
1) 数字直接写
2) 字符串用单引号
3) 日期用单引号,格式yyyy-MM-dd
4) 可以单独向部分字段插入数据
5) 插入的字段顺序和原表没有关系,
但是值顺序要和插入字段顺序一致
6) 当插入表中全部字段时,可以省略字段,直接写值
此时字段顺序和原表一模一样
7) 可以同时插入多行数据
*/
-- 向表的全部字段插入数据
insert into stu (sid,sname,age,score,birthday)
values (1,'彩云',20,98.2,'2020-01-01');
-- 插入部分字段
insert into stu (sid,sname,age)
values (2,'贝贝',20);
-- 字段顺序和原表没关系
insert into stu (age,sname,sid)
values (18,'老邢',3);
-- 给全部列插入值,省略字段
insert into stu values (4,"骚磊",20,99.9,'2020-01-01');
-- 同时插入多行
insert into stu (age,sname,sid) values
(18,'博哥',5),
(19,'阳哥',6),
(20,'万哥',7),
(21,'邱哥',8)
语法
update 表名 set 字段 = 值 [, 字段2 = 值2, ... ] [where 字段 = 值]; -- [, 字段2 = 值2, ... ] 是指,可选的,可以同时修改多个列的值 -- [where 字段 = 值] 是指,可选的,加上是指过滤,只更新符合条件的数据 -- 不加,就是更新全表数据, 不推荐!!
/*
update 表名 set 字段 = 值;
update 表名 set 字段 = 值 , 字段2 = 值2 ;
update 表名 set 字段 = 值 , 字段2 = 值2 where 字段 = 值;
推荐使用带条件的.条件有很多 = > < >= 等等
*/
-- 更新学生的id为2的成绩为100
update stu set score = 100 where sid = 2;
-- 同时更新多个字段
update stu set score = 100, birthday = '1970-01-01' where sid = 3;
-- 同时更新多条数据
update stu set score = 100 where sid >= 5;
-- 不加条件,更新全部数据
-- 不推荐使用,将来工作中数据表中的数据100w以上
update stu set score = 0;
-- 字段是可以做运算
-- 更新贝贝的年龄+2岁
update stu set age = age + 2 where sname = '贝贝';
update stu set age = age + 100;
语法
delete from 表名; -- 删除全表数据 delete from 表名 where 字段 = 值; -- 只删除符合条件的数据
-- 删除id为8的学生数据
delete from stu where sid = 8;
delete from stu where sid >= 5;
-- 删除全部[慎用]
delete from stu;
/*
一般实际开发中,都是逻辑删除,其实是没有进行物理删除
执行都是更新.
在设计表时,会设计一个状态字段,例如status
status = 1 活跃
status = 2 不活跃
status = 3 僵尸号
status = 1 用户 2 vip用户 3 注销用户
*/
/*
删除数据固然容易,但是实际生产环境中是不会真的删数据的
设计表时,会单独多设计一个字段叫做状态字段(status)
例如 status=1 正常数据 status=2 已删除数据
即用户点击的删除数据,其实真正执行的是更新,将字段更新成2
将来查询数据时,只查询状态=1
这就是逻辑删除
*/
-- 删除全部[慎用]
delete from stu;
-- 删除全表
truncate table stu;
delete | truncate | |
---|---|---|
语句类型 | DML | DDL |
原理 | 逐条删除数据 | 删除表结构和数据,重建表 |
空间 | 删除数据在内存中有删除后碎片 | 很干净,没有空间碎片 |
效率 | 慢 | 快 |
恢复 | 可以恢复 | 数据不能恢复 |
自增 | 不影响自增顺序 | 影响,从1开始 |
create alter drop show
insert update delete select
------
insert into 表名
update 表名 set
delete from 表名