2019年6月19日数据库 : 第一天
目录
数据库
数据库简介:
之前通过IO技术可以实现数据的增删改查操作,但是执行效率低,只能保存文本数据,所有功能都由程序员自己实现开发效率很低, 使用现成的数据软件,把数据的具体操作交由数据库软件处理,只需要学习如何使用数据库软件即可
- DBMS: DataBaseManagementSystem(数据库管理系统 俗称数据库软件),常见的DBMS有:MySQL Oracle SQLserver DB2 SQLite
数据库的分类
- 关系型数据库: 经过数学理论验证,可以将现实生活中的任何关系进行保存,以表为单位保存数据
- 非关系型数据库: 一般以键值对的形式保存数据,一般用于处理一些特殊场景如:数据缓存
主流DBMS介绍
- MySQL: Oracle公司产品, 08年被Sun公司收购 09Sun被Oracle收购,开源数据库 原MySQL程序员从Oracle离开创办MariaDB(Maria创始人女儿的名字),市场占有率排名第一
- Oracle: Oracle公司产品, 公司老板拉里.艾莉森,闭源产品,市场占有率排名第二
- SQLServer: 微软公司产品, 主要应用在微软的整套解决方案中,市场占有率排名第三
- DB2: IBM公司产品, 主要应用在IBM整套解决方案中
- SQLite: 轻量级数据库软件, 只具备基础的增删改查操作,一般应用在移动设备或嵌入式设备中
网站: 操作系统+web服务软件+开发语言+数据库软件
开源和闭源
- 开源:开放源代码 通过卖服务盈利 , 有大拿程序员对开源项目进行无偿的维护和升级
- 闭源:不开放源代码 通过卖产品+服务, 有大拿程序员为了刷存在感或获利的需求对闭源项目进行攻击
SQL
- Structured Query Language:结构化查询语言,用于程序员和数据库软件进行交互
如何连接数据库软件
- 打开终端/命令行
- window系统: 开始菜单->所有程序->MariaDB/MySQL->MySQL Client 输入密码回车
- Linux系统:任何位置右键打开终端 输入以下指令
mysql -uroot -p 回车 如果没有密码再次回车 - 退出指令:
exit
数据库相关SQL
1. 查看所有数据库
-
格式: show databases;
show databases;
2. 创建数据库
-
格式: create database 数据库名;
create database db1;
3. 查看数据库详情
-
格式: show create database 数据库名;
show create database db1;
4. 创建数据库指定字符集
-
格式: create database 数据库名 character set utf8/gbk;
create database db3 character set gbk; show create database db3; //验证一下
5. 删除数据库
-
格式: drop database 数据库名;
drop database db3;
6. 使用数据库
-
格式: use 数据库名;
use db1;
表相关SQL
1、创建表
-格式:create table 表名(字段1名 字段1类型,字段2名 字段2类型);
create table person(name varchar(10),age int);
-练习:创建学生表student 字段:学号id 姓名:name 语文:chinese
数学math 英语English
create table student(id int, name varchar(10), chinese int,math int,english int);
2、查看所有表
-格式:show tables;
show tables;
3、查看表详情
-格式:show create table表名;
show create table student;
-表引擎:
1、innoDB(默认):支持事务和外键等高级操作
2、myisam:只支持基础的增删改查操作
4、创建表指定引擎和字符集
-格式:create table 表名(字段1名 字段1类型,字段2名 字段2类型,)
engine=myisam/innoDB charset=utf8/gbk;
create table t1(name varchar(10),age int)engine=myisam charset=gbk;
练习:
1、创建2个数据分别mydb1和mydb2(字符集为gbk)
create database mydb1;
create database mydb2 character set gbk;
2、在mydb1里面创建员工表emp 字段:姓名 年龄 工资(sal)
use mydb1;
create table emp(name varchar(10),age int,sal int);
3、在mydb2里面创建英雄表hero 字段:姓名 年龄 英雄类型(type)引擎为myisam 字符集为gbk
use mydb2;
create table hero(name varchar(10),age int,type varchar(10))
engine=myisam charset=gbk;
4、删除两个数据库
drop database mydb1;
drop database mydb2;
表相关SQL(续)
1、查看表字段
-格式:desc 表名;
desc student;
2、删除表
-格式:drop table 表名;
drop table student;
3、修改表名:
-格式:rename table 原名 to 新名
rename table t1 to t2;
4、修改引擎和字符集
-格式:alter table 表名 engine=myisam/innodb charset=utf8/gbk;
alter table t2 engine=innodb charset=utf8;
5、添加表字段
-格式1:alter table 表名 add 字段名 字段类型;//默认最后
alter table emp add age int ;
-格式2: alter table 表名 add 字段名 字段类型 first; //最前面
alter table emp add id int first;
-格式3: alter table 表名 add 字段名 字段类型 after xxx; //在xxx的后面
alter table emp add gender varchar(5) after name;
6、删除表字段
-格式:alter table 表名 drop 字段名;
alter table emp drop gender;
7、修改表字段名与类型
-格式:alter table 表名 change 原字段名 新名 新类型;
alter table emp change age gender varchar(10);
8、修改字段类型和位置
-
格式:alter table 表名 modify 字段名 新类型 first/after xxx;
alter table emp modify gender varchar(5) first;
alter table emp modify gender varchar(5) after name;
表相关练习
- 创建数据库mydb3 指定字符utf8 并使用
create database mydb3 character set utf8;
use mydb3; - 创建temp表 只有id字段 指定引擎为myisam 字符集为gbk
create table temp(id int)engine=myisam charset=gbk; - 修改表名为t_emp ;
rename table temp to t_emp; - 修改引擎为innodb 修改字符集为utf8
alter table t_emp engine=innodb charset=utf8; - 在最后面添加name字段
alter table t_emp add name varchar(10); - 在name前面添加age字段
alter table t_emp add age int after id; - 在age后面添加工资sal字段
alter table t_emp add sal int after age; - 修改sal字段名称为salary
alter table t_emp change sal salary int; - 修改age字段到最后面
alter table t_emp modify age int after name; - 删除salary字段
alter table t_emp drop salary; - 删除表
drop table t_emp; - 删除数据库
drop database mydb3;
数据相关SQL
create database mydb1 character set utf8;
use mydb1;
create table emp(id int,name varchar(10),age int)engine=innodb charset=utf8;
1、插入数据(增)
id name age 类型要相对应的,不是随便插入的
-全表插入格式:insert into 表名 values(值1,值2,值3);
insert into emp values(1,'Tom',8);
-指定字段插入格式:insert into 表名(字段1名,字段2名) values(值1,值2);
insert into emp(id,name) values(2,'Jerry');
-中文问题
insert into emp values(3,'刘备',30);
****** 如果以上代码报错执行以下命令:set names gbk; ******
通过cmd插入或查询数据时,cmd窗口的编码默认是GBK,
即在插入数据时,发送给服务器的数据使用的编码是GBK的,如果服务器不使用GBK来接收数据的话,
就会出现乱码问题或者是报错。所以,在通过cmd执行插入或者查询操作时,最好先设置编码:
set names gbk;
这条命令是通过mysql服务器,在接收cmd发送的数据时,使用GBK编码来接收,这样一来,
发送数据的编码是GBK,接收数据的编码也是GBK,
数据就不会出现乱码(不管是通过cmd或者第三方工具或者Java程序。)
set names gbk;
这行命令只对当前窗口有效,如果新开一个cmd窗口,还需要重新设置。
-批量插入:
方式1:
insert into emp values(4,'关羽',35),(5,'张飞',18);
方式2:
insert into emp(name) values('孙悟空'),('八戒'),('唐僧');
2、查询数据
-格式:select 字段信息 from 表名 where条件;
select name,age from emp; //查询所有数据的name和age;
select name,age from emp where age<20; //20岁以下的name和age;
select * from emp; //查询所有数据的所有字段信息
3、修改数据
-格式:updata 表名 set 字段名=xxx where 条件;
update emp set age=500 where name='孙悟空';
update emp set age=10 where id=2;
4、删除数据
-格式:delete from 表名 where 条件;
delete from emp where age<20;
delete from emp where age is null;
delete from emp; //删除全部数据
delete from stu;
可以删除stu表中的所有记录,但也只是删除记录本身,对表中的其他内容没有影响,比如,上
次插入的id值为1003,删除表中的所有记录之后,再插入记录,id值会自增为1004。也就是说,保存id自增的变量并没有被重置。
这里还有另外一种删除表记录的方法:
truncate stu;
这种删除会将表摧毁重新创建,不仅表记录被删除,保存id自增的变量也会被重置,重置为1。因此再插入记录,id会从1开始。
数据相关练习
1、创建hero表 id 名字name 类型type 价格money
create table hero(id int,name varchar(10),type varchar(10),money int);
desc hero;
2、保存以下数据
1,'诸葛亮','法师',18888 2,'周瑜','法师',13888
3,'孙悟空','打野',18888 4,'小乔','法师',13888
5,'黄忠','射手',8888 6,'刘备','战士',6888
insert into hero values(1,'诸葛亮','法师',18888),
(2,'周瑜','法师',13888),(3,'孙悟空','打野',18888),
(4,'小乔','法师',13888),(5,'黄忠','射手',8888),
(6,'刘备','战士',6888);
select *from hero;
3、修改所有18888为28888
update hero set money=28888 where money=18888;
select *from hero;
4、修改所有法师为战士
update hero set type='战士' where type='法师';
select *from hero;
5、删除价格为6888的英雄
delete from hero where money='6888';
select *from hero;
6、修改小乔为猪八戒
update hero set name='猪八戒' where name='小乔';
select *from hero;
7、删除价格低于15000的英雄
delete from hero where money<15000;
select *from hero;
8、添加性别gender字段在name的后面
alter table hero add gender varchar(5) after name;
9、修改所有英雄的性别为男
update hero set gender='男' where gender is null;
10、删除所有的数据
delete from hero;
11、删除表
drop table hero;