数据库
之前通过流去操作文件保存数据的弊端:
- DataBase 数据库: 代表文件集合
什么是DBMS
- DataBaseManagementSystem 数据库管理系统(软件) ,用于管理保存数据的文件集合,用于和程序员进行交互,常见的DBMS有:Oracle MySQL DB2 SQLServer Sqlite ,DBMS具备网络访问能力
SQL
- Structured Query Language:结构化查询语言,用户程序员和DBMS进行交互,用于程序员告诉DBMS到底对数据进行什么操作的
数据库的分类(了解)
- 关系型数据库:经过数学理论验证可以将现实生活中的各种关系保存到数据库,这种就称为关系型数据库。保存数据以表为单位
- 非关系数据库:一般都是为了解决某些特定场景的问题比如:缓存,高并发访问,Redis数据库(以key-value形式保存数据)
常见的关系型数据
- MySQL: 属于Oracle公司的产品,08被Sun公司收购,09年Sun公司被Oracle收购,开源免费,被收购后发布5.5版本使用Oracle的部分技术,性能提高了30%以上,用户量增多,计划把MySQL闭源 原MySQL程序员离开Oracle创建了MariaDB 老板女儿Maria。市场排名第一
- Oracle: 排名第二,闭源 性能最高 收费最贵
- DB2: IBM公司产品 闭源项目
- SQLServer:微软公司产品 闭源
- Sqlite:轻量级数据库,安装包几十k,应用在嵌入式设备或移动设备上,
开源和闭源
开源:开放源代码 免费试用,通过卖服务盈利,社会上会有一些大牛程序员会无偿的维护和升级
闭源:不开放源代码 收费,通过卖产品+服务盈利 ,有大牛会攻击破坏,但是人家养了一群人维护升级
打开客户端连接MySQL
在终端中执行: mysql -uroot -p 回车 如果有密码写密码 回车 如果没有密码则直接回车
和数据库相关的SQL
查询所有数据库
- show databases;
创建数据库
- create database db1;
查看数据库详情
- show create database db1;
创建数据库指定字符集
- create database db2 character set gbk/utf8;
删除数据库
- drop database db2;
使用数据库
- use db1;
和表相关的SQL
查询所有表
- show tables;
创建表
- create table 表名(字段1名 字段1的类型,字段2名 字段2的类型,…..);
create table person(name varchar(10),age int); - 创建一个学生表(student) 保存学号id,姓名name,年龄age,语文chinese,数学math,英语english
create table student(id int,name varchar(10),age int,chinese int,math int,english int);查看表详情
- show create table 表名;
show create table person;创建表时指定表的引擎和字符集
- create table t1(name varchar(10)) engine=myisam charset=gbk;
表的引擎
- innodb:支持数据库的高级操作如:外键、事务等,默认引擎
- myisam:只支持基础的增删改查操作
SQL格式:
- 可以有换行
- 最后以;结尾
- 关键字之间需要有空格(可以写多个空格,建议写一个)
查看表字段
- desc 表名;
删除表
- drop table 表名;
修改表相关
修改表名——rename table 原名 to 新名;
rename table student to stu;修改表的引擎和字符集——alter table 表名 engine=myisam/innodb charset=utf8/gbk;
alter table stu engine=myisam charset=gbk;添加表字段
最后面: alter table 表名 add 字段名 字段类型;
最前面: alter table 表名 add 字段名 字段类型 first;
xxx的后面: alter table 表名 add 字段名 字段类型 after xxx;
create table hero(name varchar(10));
alter table hero add age int;
alter table hero add id int first;
alter table hero add sal int after name;删除表字段——alter table 表名 drop 字段名;
alter table hero drop sal;修改表字段的名字和类型——alter table 表名 change 原字段名 新字段名 新字段类型;
alter table hero change name heroname varchar(5);修改表字段的类型和位置——alter table 表名 modify 字段名 类型 位置;
alter table hero modify age int first(after xxx);
练习:
- 创建数据库newdb并使用, 里面创建员工表t_emp只有name字段 引擎为myisam 字符集为gbk
1). create database newdb;
2). use newdb;
3). create table t_emp(name varchar(10)) engine=myisam charset=gbk; - 修改表名为emp
1). rename table t_emp to emp; - 修改引擎为innodb 字符集为utf8
1). alter table emp engine=innodb charset=utf8; - 添加部门编号字段deptno 在最后面
1). alter table emp add deptno int; - 添加员工编号 empno在最前面
1). alter table emp add empno int first; - 添加salary字段在name的后面
1). alter table emp add salary int after name; - 修改salary字段名字为sal,把sal放在empno的后面
1). alter table emp change salary sal int;
2). alter table emp modify sal int after empno; - 删除sal字段
1).alter table emp drop sal; - 删除表
1).drop table emp; - 删除数据库
1).drop database newdb;
数据相关
插入数据
create table emp(id int,name varchar(10),age int,sal int);
- 全表插入数据:
- insert into emp values(1,’Tom’,18,3000);
- 指定字段插入数据:
- insert into emp (name,age) values(‘Jerry’,19);
- insert into emp (name) values(‘李白’);
- 批量插入数据:
insert into emp values(3,’刘备’,28,6000),(4,’张飞’,20,5000),(5,’关羽’,25,9000);
insert into emp (name,age) values(‘悟空’,500),(‘八戒’,400),(‘沙僧’,200);查询数据
- 查询全部数据的全部字段信息
select * from emp; - 查询所有员工的姓名和年龄
select name,age from emp; - 查询年龄在25岁以下的员工信息
select * from emp where age<25; - 查询工资3000块钱的员工姓名、年龄、工资
select name,age,sal from emp where sal=3000;修改数据
- 修改Tom的工资为3333
update emp set sal=3333 where name=’Tom’; - 修改30岁以下的工资为666
update emp set sal=666 where age<30; - 修改id等于3的名字为吕布 年龄为55 工资为20000
update emp set name=’吕布’, age=55, sal=20000 where id=3; - 修改工资为null的工资为800
update emp set sal=800 where sal is null;删除数据
- 删除id=1的员工
delete from emp where id=1; - 删除年龄在25岁以下的员工
delete from emp where age<25; - 删除全部数据
delete from emp;
insert into t1 (字段名1,字段名2) values(值1,值2),(值1,值2);
select name,age from t1 where id<5;
update t1 set 字段名=值, 字段名=值 where id=5;
delete from t1 where id<3;
练习:
- 创建hero表如果存在则先删除再创建, id 姓名name 类型type 金币money
- 插入以下数据 1 诸葛亮 法师 18888 , 2 孙悟空 打野 18888 ,3 小乔 法师 6888,4 黄忠 射手 8888, 5 刘备 战士 6888
- 修改所有18888的为28888
- 修改所有打野为刺客
- 删除价格为6888的英雄
- 修改孙悟空为猪八戒
- 删除id为1,2,3的英雄
- 修改所有英雄的类型为已阵亡
- 删除所有数据
- 删除表
中文字符问题
- set names gbk;