数据库
io流文件存储数据的弊端
- 存储效率低
- 不管存还取操作比较麻烦
- 一般只能保存小量字符串数据
DB
- data base 数据库
- 什么是数据库: 数据库实际上就是一个文件集合
- 数据库就是一个存储数据的仓库,本质就是一个文件系统,数据库是按照特定的格式把数据存储起来,用户可以对存储的数据进行增删改查操作
DBMS
- DataBaseManagementSystem:数据库管理系统(软件)
- 什么是DBMS: 用来管理数据库文件的软件,用户需要访问DBMS对数据进行增删改查操作。
常见DBMS: MySQL oracle DB2 sqlite sqlserver..
数据库的分类
分为两类:
- 关系型数据库: 经过数学理论验证 可以保存现实生活中的各种关系数据, 数据库中存储数据以表为单位。
- 非关系型数据库:通常用来解决某些特定的需求如:数据缓存,高并发访问。 存储数据的形式有多种,举例:Redis数据库:通过键值对的形式存储数据。
主流关系型数据库介绍
- MySQL: 08年被sun公司收购 09年sun被oracle收购,开源免费,到oracle发布了5.0版本(使用了oracle核心技术 性能提高30%),因为Oracle数据库地位受到威胁,计划把mysql闭源,原mysql作者们不干了,原程序员出去单干 发布了MariaDB数据库 名字是因为作者女儿叫Maria ,市场排名第一
- Oracle: 闭源, 最贵 性能最高 拉里埃里森32 市场排名第二
- SQLServer:微软公司的产品 市场排名第三,主要应用在.net(C#)开发的网站中
- DB2: IBM公司 有做网站的完整解决方案(操作系统,we服务器(如tomcat),数据库等)主要应用在银行等国有大型企业中
- sqlite:轻量级数据库 只有几十k,一般应用在嵌入式和移动设备中
开源和闭源的区别
- 开源: 开发源代码,盈利方式靠卖服务(赚钱慢,少),用户群大,大牛程序员会无偿帮着升级维护
- 闭源:不开放源代码,盈利方式卖产品+服务(赚钱快,多),大牛们各种攻击找漏洞
数据库的安装
- 两点注意: 端口号默认3306,字符集选择utf-8
SQL
Structured Query Language:结构化 查询 语言
- sql是写在客户端 执行在DBMS中,DBMS解析后执行
打开数据库客户端 并登陆
- 在终端中执行以下命令
mysql -uroot -p 敲回车 因为没有密码 所以再次敲回车 如果有密码则先敲密码再回车 - 退出命令: exit;
数据库相关的SQL
-
查看所有数据库
show databases;
-
创建数据库
-格式:create database 数据库名称;create database db1;
-
查看数据库详情
-格式: show create database 数据库名;show create database db1;
-
创建数据库指定字符集 utf8或gbk
create database db2 character set utf8; create database db2 character set gbk;
-
删除数据库
drop database db2;
练习:把刚才自己创建的都删除
然后再创建db1,db2 字符集为gbk,db3, 然后查看db2是否成功,然后把db2 和db3删除
-
使用数据库
use db1;
和表相关的SQL
- 什么是表: 关系型数据库中保存数据的单元,类似于Excel中的表,创建表时需要指定字段信息
-
创建表
-格式: create table 表名 (字段1名 字段1类型,字段2名 字段2类型);create table person(name varchar(10),
age int);
01.png
-
练习1:创建一个员工表(emp) 有名字(ename)和工资(sal)
create table emp(ename varchar(10),sal int); -
练习2:创建一个学生表(student)有学号(id)姓名(name)性别(gender)语文(chinese)数学(math)英语(english)
create table student(id int,name varchar(10),gender varchar(5),chinese int,math int,english int);
回顾:
- 查看所有数据库
show databases; - 创建数据库
create database db1; - 查看数据库详情
show create database db1; - 创建数据库指定字符集
create database db2 character set gbk/utf8; - 删除数据库
drop database db1; - 使用数据库
use db1; - 创建表
create table t1(name varchar(10),age int);
和表相关的SQL
查询所有表
show tables;
查看单个表属性
show create table person;
表的引擎
- Myisam: 只支持数据基础的增删改查,不支持高级操作,如:事务、外键等
- InnoDB:支持高级操作,默认为InnoDB。
创建表并且指定引擎和字符集
create table t1(id int,name varchar(10)) engine=myisam charset=gbk;
-查询:
show create table t1;
查看表字段信息
desc student;
练习: 创建 5个数据库 每个里面创建一张表 ,第三个数据库字符集为gbk 里面的表引擎为myisam 创建完后 全部删除数据库
对创建好的表进行修改
修改表名
rename table 原名 to 新名;
rename table student to t_stu;
create table hero(name varchar(10));
修改表属性 引擎和字符集
alter table hero engine=myisam charset=gbk;
添加表字段
- 最后位置添加
alter table hero add age int; - 最前面添加
alter table hero add money int first; - 在某个字段的后面添加
alter table hero add gender varchar(5) after name;
删除表字段
alter table hero drop money;
修改表字段名和类型
alter table hero change 原字段名 新字段名 类型;
alter table hero change name heroname varchar(10);
修改表字段类型和位置
alter table hero modify age int first;
alter table hero modify age int after xxx;
删除表
drop table hero;
练习:
- 创建员工表(emp) 字段有 id和name
create table emp(id int,name varchar(10)); - 修改emp表的引擎为myisam 字符集为gbk
alter table emp engine=myisam charset=gbk; - 修改表名为 t_emp
rename table emp to t_emp; - 给t_emp添加age字段在id的后面
alter table t_emp add age int after id; - 给t_emp添加工资sal字段在最后
alter table t_emp add sal int; - 修改sal字段名称为salary
alter table t_emp change sal salary int; - 修改age字段到salary字段的后面
alter table t_emp modify age int after salary; - 删除salary字段
alter table t_emp drop salary; - 删除 t_emp表
drop table t_emp;
数据相关的SQL
插入数据
-
创建学生表
create table student(id int,name varchar(10),chinese int,math int,english int);
-
插入数据 全表插入:每个字段都赋值 顺序要和表字段一致
insert into student values(1,'zhangsan',88,38,98);
-指定字段插入
insert into student (id,name) values (2,'张飞');
-练习: 插入刘备 id为3 语数外成绩 78 22 18
insert into student values(3,'刘备',78,22,18);
插入关羽 id为4 语文90
insert into student (id,name,chinese) values (4,'关羽',90);
插入孙悟空 id为5 英语18
insert into student (id,name,english) values (5,'孙悟空',18);
批量插入
insert into student values(6,'唐僧',56,57,58),(7,'八戒',88,89,99);
insert into student (id,name) values
(8,'吕布'),(9,'貂蝉'),(10,'孙尚香');
查询
-查询全部数据的全部字段信息
select * from student;
-查询指定字段
select id,name from student;
-条件查询
select * from student where id<5;
修改数据
update student set math=100;
update student set english=30 where id=7;
删除数据
delete from student where id=7;
delete from student;
练习
- 创建t_emp表 有 id 名字name 工资sal 如果之前存在t_emp先删除
create table t_emp(id int,name varchar(10),sal int); - 插入以下五条数据
insert into t_emp values(1,'诸葛亮',3000),(2,'司马懿',4000),(3,'李白',8000),(4,'元芳',6000),(5,'狄仁杰',8000); - 修改工资8000的为7888
update t_emp set sal=7888 where sal=8000; - 修改元芳的名字为李元芳
update t_emp set name='李元芳' where id=4; - 删除工资低于5000的
delete from t_emp where sal<5000; - 删除所有数据
delete from t_emp;
编码问题
- sql语句在客户端中写完后需要通过网络发送给数据库服务器,这时需要字符的编解码,数据库保存数据时也需要字符的编解码
- 学校学生电脑保存中文数据只需要确认 数据库和表是否统一为utf8
- 个人电脑如果是windows系统需要保证数据库和表为utf8 之外 还需要在命令行中 执行 set names gbk; 通知数据库客户端传过去的内容需要使用gbk解码。
课程回顾
数据库相关sql
- 查询所有数据库
show databases; - 创建数据库
create database db1; - 查看详情
show create database db1; - 创建数据库指定字符集
create database db1 character set gbk/utf8; - 删除数据库
drop database db1; - 使用数据库
use db1;
表相关sql
- 创建表
create table t1(id int,name varchar(10)); - 查询所有表
show tables; - 查看属性
show create table t1; - 创建表指定引擎和字符集
create table t1(id int,name varchar(10))engine=myisam/innodb charset=gbk; - 查看表字段信息
desc t1; - 修改表
- 修改表名: rename table t1 to t2;
- 修改表属性: alter table t1 engine=myisam/innodb charset=gbk;
- 添加表字段: alter table t1 add age int first/after xxx;
- 删除表字段: alter table t1 drop age;
- 修改表字段名和类型: alter table t1 change age fatherage int;
- 修改表的字段类型和位置: alter table t1 modify age int first;
- 删除表
drop table t1;
数据相关sql
- 插入数据
insert into t1 values(值1,值2,值3);
insert into t1 (字段1名,字段2名)values(值1,值2);
- 批量插入
insert into t1 values(值1,值2,值3),(值1,值2,值3),(值1,值2,值3);
insert into t1 (字段1名,字段2名)values(值1,值2),(值1,值2),(值1,值2);
- 查询数据
select * from t1;
select name,age from t1;
select * from t1 where age<20;
- 修改数据
update t1 set age=18,sal=3000 where id=3;
- 删除
delete from t1 where id=3;
网友评论