数据库
- 通过IO流操作文件的形式保存数据存在的弊端
- 业务代码繁琐开发效率低
- 执行效率低
- 一般只能保存字符串
- 一般只能保存小量数据
什么是DB
什么是DBMS
- DataBaseManagementSystem:数据库管理系统(数据库软件) ,常见的数据库软件:Oracle、MySQL、SqlServer、DB2、sqlite等
数据库分类(了解)
- 关系型数据库:经过数学理论验证可以将现实生活中存在的任何关系保存起来的数据库,以表为存储数据的单位
- 非关系型数据库:解决一些特定的应用场景如:高并发、缓存等, 非关系型数据库存储数据并非以表为单位,如Redis数据库通过key-value形式保存数据
常见关系型数据库介绍
- MySQL: 开源数据库 08年被Sun公司收购,09被Oracle收购,被收购后MySQL性能大幅提高,公司计划要将MySQL闭源,原MySQL程序员离开Oracle创办了MariaDB,宝贝女儿叫Maria, 市场占有率排名第一
- Oracle:闭源数据库,性能最高,价格最贵, 拉力.艾莉森 32 市场占有率排名第二
- SQLServer:微软公司产品,闭源数据库,应用在微软整体解决方案中
- DB2:IBM公司产品,闭源数据库,应用在IBM的整体解决方案中
- sqlite:轻量级数据库 只有几十k,应用在嵌入式和移动设备中
开源和闭源
- 开源:开放源代码,免费,盈利方式:通过卖服务或等产品用户群足够大的时候改成闭源 ,会有技术大拿无偿维护和升级
- 闭源:不公开源代码,收费,盈利方式:靠卖产品和卖服务,会有技术大拿攻击和破坏,但是闭源公司会有更多的钱养一帮程序员维护和升级
SQL
- Structured Query Language:结构化 查询 语言,用于程序员和数据库软件进行交互, sql语句执行在客户端(windows的命令行、Linux的终端或三方的可视化客户端) 或者通过java代码执行
如何连接数据库软件
- windows系统 开始菜单-》所有程序-》MariaDB或MySQL-》MySQL Client,然后直接输入密码 学生机没有密码直接回车,如果自己电脑 密码自己想
-
Linux系统 桌面右键打开终端 执行以下命令
mysql -uroot -p 回车 输入密码 学生机无密码直接回车
退出: exit;
数据库相关的SQL
-
查看所有数据库
show databases;
- 创建数据库
-
格式: create database 数据库名称;
create database db1;
- 查看数据库详情
-
格式: show create database 数据库名称;
show create database db1;
- 创建数据库指定字符集
-
格式: create database 数据库名称 character set utf8/gbk;
create database db11 character set gbk;
- 删除数据库
-
格式: drop database 数据库名称;
drop database db11;
show databases;
- 使用数据库
-
格式: use 数据库名称;
create database db1 character set utf8;
use db1;
表相关的sql
-
操作表的sql一定要先使用数据库不然会报以下错误:
ERROR 1046 (3D000): No database selected
- 创建表
-
格式: create table 表名(字段1名 字段1类型,字段2名 字段2类型,.....);
create table person(name varchar(10),age int,gender varchar(2));
-
练习:创建学生表student 有学号id,姓名name,语文chinese,数学math,应用english 这些字段
create table student(id int,name varchar(10),chinese int,math int,english int);
- 查询所有表
-
格式: show tables;
-
查看表详情
-
格式: show create table 表名;
show create table student;
-
表引擎:(了解)
- innodb:支持数据库的高级操作如事务、外键等
- myisam:不支持数据库的高级操作,仅支持数据基础的增删改查操作
- 创建表时指定引擎和字符集
-
格式: create table 表名(字段1名 字段1类型,字段2名 字段2类型,.....) engine=innodb/myisam charset=utf8/gbk;
create table t1(name varchar(10),age int) engine=myisam charset=gbk;
show create table t1;
- 查看表字段信息 description描述
-
格式: desc 表名;
desc person;
- 删除表
-
格式: drop table 表名;
drop table t1;
练习:
-
创建数据库newdb1 字符集为utf8
create database newdb1 character set utf8;
-
使用数据库newdb1
use newdb1;
-
在newdb1中创建英雄表hero 字段有:名字name、年龄、类型type(字符串) 字符集为utf8引擎为innodb
create table hero(name varchar(10),age int,type varchar(5))engine=innodb charset=utf8;
-
查看表详情
show create table hero;
- 查看表字段 desc hero;
- 删除表 drop table hero;
- 删除数据库 drop database newdb1;
- 再创建一个newdb2 并且把上面操作重复一遍加深印象
修改表相关
- 修改表名
-
格式:rename table 原名 to 新名;
rename table student to stu;
- 修改表引擎和字符集
-
格式:alter table 表名 engine=innodb/myisam charset=utf8/gbk;
alter table stu engine=myisam charset=gbk;
-测试 show create table stu;
- 添加表字段
- 最后添加格式:alter table 表名 add 字段名称 字段类型;
- 最前面格式:alter table 表名 add 字段名称 字段类型 first;
-
某个字段的后面:alter table 表名 add 字段名称 字段类型 after 字段名;
最后添加一个地址字段
alter table person add addr varchar(20);
最前面添加一个id字段
alter table person add id int first;
在name字段后面添加工资salary
alter table person add salary int after name;
- 删除表字段
-
格式: alter table 表名 drop 字段名称;
alter table person drop addr;
- 修改表字段的名称和类型
-
格式: alter table 表名 change 原字段名 新字段名 新字段类型;
alter table person change salary sal int;
- 修改表字段的类型和位置
-
格式: alter table 表名 modify 字段名 新类型 first/after xxx;
alter table person modify age int first;
alter table person modify sal int after gender;
数据库相关
查看所有 show databases;
创建 create database db1 character set utf8/gbk;
查看详情 show create database db1;
删除 drop database db1;
使用 use db1;
表相关
创建 create table t1(id int,name varchar(10)) engine=innodb/myisam charset=utf8/gbk;
查看所有表 show tables;
查看详情 show create table t1;
查看表字段 desc t1;
删除表 drop table t1;
修改表
改表名 rename table t1 to t2;
改引擎字符集 alter table t1 engine=innodb/myisam charset=utf8/gbk;
添加表字段 alter table t1 add 字段名 类型 first/after xxx;
删除表字段 alter table t1 drop 字段名;
修改字段名和类型 alter table t1 change 原字段名 新名 新类型;
修改类型和位置 alter table t1 modify 字段名 类型 first/after xxx;
练习:
-
创建数据库newdb1 并使用 字符集为utf8
create database newdb1 character set utf8;
use newdb1;
-
创建一个hero表 有id name type三个字段 引擎为innodb 字符集为gbk
create table hero(id int,name varchar(10),type varchar(5)) engine=innodb charset=gbk;
-
修改表引擎为myisam 字符集为utf8
alter table hero engine=myisam charset=utf8;
-
给hero表添加一个money字段在name字段的后面
alter table hero add money int after name;
-
修改表名为heros
rename table hero to heros;
-
添加age字段在最前面
alter table heros add age int first;
-
修改type字段名为herotype
alter table heros change type herotype varchar(5);
-
修改id字段到最前面
alter table heros modify id int first;
-
删除herotype字段
alter table heros drop herotype;
-
删除heros表
drop table heros;
-
删除数据库newdb1
drop database newdb1;
数据相关SQL
drop database db1;
create database db1 character set utf8;
use db1;
create table person(id int,name varchar(10),age int);
1. 插入数据
- 全表插入格式: insert into 表名 values(值1,值2,值3);
insert into person values(1,'Tom',8);
- 指定字段插入: insert into 表名 (id,name) values(值1,值2);
insert into person (id,name) values(2,'Jerry');
insert into person (name) values('张飞');
-
如果插入中文报错执行以下指令 通过以下指令修改网络传输的字符集
set names gbk;
-
批量插入数据
insert into person values(10,'悟空',500),(11,'八戒',250);
- 查询数据
-
格式: select 字段信息 from 表名 where id<5;
select name from person;
select name,age from person where age<20;
select * from person;
- 修改数据
-
格式:update 表名 set age=10 where id=2;
update person set age=10 where id=2;
- 如果不写条件则修改表内所有数据
- 删除数据
-
格式:delete from 表名 where id=2;
delete from person where id=2;
- 如果不写条件则删除表内所有数据
练习:
- 创建数据库mydb1 字符集为utf8,并使用
- 创建emp员工表 字段:id,名字name,年龄age,引擎为myisam 字符集为utf8
- 添加部门dept字段在最后
- 添加salary字段在部门字段的前面
- 添加以下数据:1 诸葛亮 22 3000 法师部,2 周瑜 30 4000 法师部,3 关羽 3500 战士部,4 张飞 1500 战士部,5 孙尚香 18 6000 射手部,
6 狄仁杰 50 射手部
- 查询所有员工的姓名和工资
- 修改法师部的名字为销售部
- 修改20岁以下的员工 工资为888
- 删除射手部的所有员工
- 删除年龄小于20岁的员工
- 删除表内所有数据
- 删除表 删除数据库