数据库
-
以前通过IO技术对数据进行增删改查操作,需要书写大量相关代码,并且不能保证程序的执行效率,开发周期会很长,互联网行业,凡是遇到频繁使用并且实现又很复杂的 肯定会有一个通用的解决方案,我们只需要学会如何使用即可,数据库软件就是这样一个三方的对数据进行增删改查的解决方案,学习数据库软件主要就是学习一门语言 叫做SQL(Structed Query Language结构化查询语言).
-
DBMS: Database Management System数据库管理系统(数据库软件),常见的DBMS有:
- MySQL: Oracle公司产品, 08年被Sun公司收购,09年Sun被Oracle收购, 开源产品 免费使用, MariaDB , 市占率第一
- Oracle: Oracle公司产品, 性能最高价格最贵. 市占率第二, 拉里埃里森32创业创办Oracle
- SQLServer:微软公司产品, 闭源产品, 应用在微软整套解决方案中,市占率第三
- DB2: IBM公司产品,闭源产品,应用在IBM整套解决方案中
- SQLite: 轻量级数据库,应用在嵌入式设备和移动设备
网站: 开发语言 + 操作系统 + webServer + 数据库软件
-
开源和闭源:
- 开源: 开放源代码, 免费, 盈利方式: 通过卖服务 , 有人会无偿维护和升级
- 闭源: 不公开源代码, 盈利方式:卖产品+卖服务 , 有人会攻击找漏洞(闭源产品公司会养一帮人负责维护升级)
如何连接数据库软件
- linux: 桌面右键打开终端 ->
mysql -uroot -p
回车->有密码写密码 没有直接回车 - windows: 开始菜单->所有程序 -> MySQL->MySQL Client->输入密码 回车
- 退出:
exit
; 回车
DDL 数据定义语言
- 数据库软件中保存数据需要先建库再建表
数据库相关SQL
- 查询所有数据库
show databases;
- 创建数据库
- 格式:
create database 数据库名 character set utf8/gbk;
create database db1 character set utf8;
create database db2 character set gbk;
- 查询数据库详情
- 格式:
show create database 数据库名;
show create database db1;
- 删除数据库
- 格式:
drop database 数据库名;
drop database db1;
- 使用数据库
- 格式:
use 数据库名;
use db2;
练习:
- 分别创建mydb1和mydb2数据库 第一个是gbk第二个是utf8
create database mydb1 character set gbk;
create database mydb2 character set utf8;
- 创建完后查询所有表检查是否存在
show databases;
- 查询两个数据库的字符集是否正确
show create database mydb1;
show create database mydb2;
- 先使用mydb1 再使用mydb2
use mydb1;
use mydb2;
- 删除两个数据库
drop database mydb1;
drop database mydb2;
表相关SQL
- 操作表和数据时 一定要保证已经使用了某个数据库
create database db1 character set utf8;
use db1;
- 创建表
- 格式:
create table 表名(字段1名 类型,字段2名 类型) charset=utf8/gbk;
create table person(name varchar(10),age int) charset=utf8;
- 练习: 创建学生表student 有姓名name和语chinese数math外english
create table student(name varchar(10),chinese int,math int,english int) charset=gbk;
- 查询所有表
- 格式:
show tables;
- 查看表详情
- 格式:
show create table 表名;
show create table student;
- 查看表字段
- 格式:
desc 表名;
desc student;
- 删除表
- 格式:
drop table 表名;
drop table student;
- 添加表字段
- 最后面添加字段:
alter table 表名 add 字段名 类型;
alter table person add gender varchar(5);
- 最前面添加字段:
alter table 表名 add 字段名 类型 first;
alter table person add id int first;
- xxx字段后面添加字段:
alter table 表名 add 字段名 类型 after xxx;
alter table person add salary int after name;
- 删除表字段
- 格式:
alter table 表名 drop 字段名;
alter table person drop salary;
- 修改表字段
- 格式:
alter table 表名 change 原名 新名 新类型;
alter table person change gender salary int;
数据库和表相关练习:
- 创建数据库mydb1 字符集为utf8 并使用该数据库
create database mydb1 character set utf8;
use mydb1;
- 在mydb1中创建员工表emp 字段有name 字符集为utf8
create table emp(name varchar(10))charset=utf8;
- 添加表字段age在最后面
alter table emp add age int;
- 添加id字段在最前面
alter table emp add id int first;
- 添加sal字段在name的后面
alter table emp add sal int after name;
- 修改字段sal为salary
alter table emp change sal salary int;
- 删除age字段
alter table emp drop age;
- 删除emp表
drop table emp;
- 删除数据库
drop database mydb1;
DML 数据操作语言
create database mydb1 character set utf8;
use mydb1;
create table person(id int,name varchar(10),age int)charset=utf8;
show create table person; #检查是不是utf8
- 插入
- 全表插入格式:
insert into 表名 values(值1,值2,值3);
insert into person values(1,'Tom',18);
- 指定字段格式:
inaert into 表名(字段1名,字段2名) values(值1,值2);
insert into person(name,age) values('Jerry',20);
- 批量插入:
insert into person values(10,'aaa',20),(11,'bbb',21),(12,'ccc',22);
insert into person(name) values('xxx'),('yyy'),('zzz');
- 中文问题:
insert into person values(20,‘刘德华’,18);
中文乱码的执行:set names gbk;
- 查询
- 格式:
select 字段信息 from 表名 where 条件;
-举例:
# 查询表中所有的名字
select name from person;
# 查询表中所有的名字和年龄
select name,age from person;
# 查询表中的所有数据;
select * from person;
# 查询id为1的名字
select name from person where id=1;
- 修改
- 格式:
update 表名 set 字段名=值 where 条件;
update person set name='张三' where id=1;
- 删除
- 格式:
delete from 表名 where 条件;
delete from person where id=1;
delete from person where id>10;
delete from person;
练习:
- 创建hero表 id 名字name 类型type 价格money 字符集为utf8
create table hero(id int,name varchar(10),type varchar(10),money int)charset=utf8;
- 保存以下数据:
insert into hero values(1,'诸葛亮','法师',18888),
(2, '周瑜','法师',13888),(3,'孙悟空', '打野', 18888),
(4, '小乔', '法师', 13888),(5,'黄忠', '射手',8888),
(6, '刘备', '战士', 6888);
- 修改所有18888为28888
update hero set money=28888 where money=18888;
- 修改所有法师为战士
update hero set type='战士' where type='法师';
- 删除价格为6888的英雄
delete from hero where money=6888;
- 修改小乔为猪八戒
update hero set name='猪八戒' where name='小乔';
- 删除价格低于15000的英雄
delete from hero where money<15000;
- 添加性别gender字段在name的后面
alter table hero add gender varchar(5) after name;
- 修改所有英雄的性别为男
update hero set gender='男';
- 删除所有数据
delete from hero;
- 删除表
drop table hero;
数据类型
- 整数:
int
和bigint
(等效long) - 浮点数:
double(m,d)
m代表总长度 d代表小数长度 23.567 m=5 d=3
超高精度浮点数decimal(m,d)
涉及超高精度运算时使用 - 字符串
char(m)
: 固定长度, char(10) “abc” 占10个长度, 执行效率略高 ,最大长度255varchar(m)
:可变长度, varchar(10) “abc” 占3个长度 ,更节省资源 ,最大长度65535 但是建议保存255以内的 ,超过255建议使用texttext(m)
:可变长度,最大长度65535
- 日期
date
: 保存年月日time
: 保存时分秒datetime
: 默认值为null, 最大值 9999-12-31timestamp
: 默认值为当前系统时间, 最大值 2038-1-19
create table t_date(t1 date,t2 time,t3 datetime,t4 timestamp);
insert into t_date values('2019-11-8',null,null,null);
insert into t_date values(null,'17:30:18','2019-10-10 10:10:10',null);
小结:
- DDL 数据定义语言
- 数据库相关SQL
- 查询所有 show databases;
- 创建 create database db1 character set utf8/gbk;
- 查询详情 show create database db1;
- 删除 drop database db1;
- 使用 use db1;
- 表相关SQL
- 创建 create table t1(name varchar(10),age int) charset=utf8/gbk;
- 查询所有 show tables;
- 查询详情 show create table t1;
- 查询表字段 desc t1;
- 删除表 drop table t1;
- 添加字段 alter table t1 add age int first/after xxx;
- 删除字段 alter table t1 drop 字段名;
- 修改字段 alter table t1 change 原名 新名 新类型;
- DML数据操作语言 数据相关
- 插入数据 insert into t1(xxx,xxx,xxx) values(值1,值2,值3),(值1,值2,值3);
- 查询数据 select * from t1 where 条件;
- 修改数据 update t1 set xxx=xxx where 条件;
- 删除数据 delete from t1 where 条件;
- 数据类型
- 整数: int和bigint(long)
- 浮点数: double(m,d) m代表总长度 d代表小数长度 超高精度浮点数decimal
- 字符串:
char: 固定长度 最大 255
varchar:可变长度 最大65535超过255建议使用text
text:可变长度 最大65535 - 日期:
date: 保存年月日
time: 保存时分秒
datetime: 默认值是null 最大9999-12-31
timestamp: 默认值当前系统时间 最大2038-1-19
练习:
- 创建数据库mydb2 字符集utf8 并使用
create database mydb2 character set utf8;
use mydb2;
- 在数据库中创建员工表emp 字段:id,name,sal,deptId(部门id) 字符集utf8
create table emp(id int,name varchar(10),sal int,deptId int)charset=utf8;
- 创建部门表dept 字段:id,name,loc(部门地点) 字符集utf8
create table dept(id int,name varchar(10),loc varchar(10)) charset=utf8;
- 部门表插入以下数据:
1 神仙部 天庭 2 妖怪部 盘丝洞
insert into dept values(1,'神仙部','天庭'),(2,'妖怪部','盘丝洞');
- 员工表中插入以下数据:
1 悟空 5000 1 2 八戒 2000 1
3 蜘蛛精 8000 2 4 白骨精 9000 2
insert into emp values(1,'悟空',5000,1),(2,'八戒',2000,1),(3,'蜘蛛精',8000,2),(4,'白骨精',9000,2);
- 查询工资6000以下的员工姓名和工资
select name,sal from emp where sal<6000;
- 修改神仙部的名字为取经部
update dept set name='取经部' where name='神仙部';
- 给员工表添加奖金comm字段
alter table emp add comm int;
- 修改部门id为1的奖金为500
update emp set comm=500 where deptId=1;
- 把取经部门的地址改成五台山
update dept set loc='五台山' where name='取经部';
如果这篇文章有帮助到您,请简单给个赞吧,谢谢~