一、数据库介绍
1、为什么需要数据库
a、计算机的资源是有限的,不可能把所有的数据存储在内存中,内存掉电后数据回丢失
b、为了让数据在程序关闭重启后还能继续使用,必须把数据存储到磁盘的文件中
c、随着程序的功能越来越复杂、数据越来越多,从文件中读取数据需要大量的重复性操作,
从文件中读取指定的数据需要复杂的逻辑
d、不同的程序它的数据不同、访问数据文件的操作也有所不同,意味着读写文件的代码不能复用
e、所有程序员非常需要一个统一的、快速的访问磁盘数据的工具
f、使用数据库时,程序员不需要自己管理数据,而是通过数据库提供统一的接口进行读写数据即可
至于数据在数据库文件中如何保存、查找、修改等与程序员无关
2、什么是数据库
数据库指的是管理数据的软件,而不是存储数据的仓库
3、数据库的类型
层次型:以上下级层次关系组织数据的一种数据库,层次模型类似于树型结构,是早期的组织管理数据库
网状型:把相互之间有关系的数据进行连接,形成一张数据网,适合复杂数据的存储
关系型:就是把数据看作一张二维表,由行和列组成,这是普通人最容易理解和使用的一种数据组织方式
因此关系型数据库获得了最后的胜利
key/value型:目前比较流行的一种内存数据库,适合存储高频访问的数据、并且对时间有一定要求
4、主流的关系型数据库
商用型: OceanBase、Oracle、DB2、SQL Server
开源型: MySQL、mariaDB、PostgreSQL
桌面型: 以微软的Access为代表,可以通过界面操作数据库
嵌入式: 以SQLLite为代表,适合嵌入式设备使用的小型数据库
二、SQL语言介绍
1、什么是SQL
SQL是结构化查询语言的缩写,是数据库的标准库的标准委员会提供,用于访问和操作数据的统一语言标准
是所有的数据库都支持SQL语言,也就是说我们只需要学习SQL语言就能操作所有的数据
虽然ANSI组织定义了统一的SQL语言标准,但是不同的数据库厂商对SQL的支持不同,甚至有的还添加自己新的语法
把各种数据库中独有的SQL语法称为SQL的方言
标准SQL语句不区分大小写(int或INT),但是自定义的标识符(表名)是区分大小的
2、SQL语句的功能分类
数据控制语句:用于权限的划分的回收
数据定义语句:用于建立、修改、删除数据库对象(表、视图等)
数据操作语句:用于改变表中的数据(增、删、改)
数据查询语句:根据各种不同的条件进行查询数据
事务控制语句:用于维护数据库的统一性
3、SQL语句中的数据类型
数值型:
整型:
TINYINT 1 Byte
SMALLINT 2 Bytes
MEDIUMINT 3 Bytes
INT 4 Bytes
BIGINT 8 Bytes
浮点型:
FLOAT 4 Bytes
DOUBLE 8 Bytes
日期\时间型:
DATE 3 1000-01-01/9999-12-31
TIME 3 '-838:59:59'/'838:59:59'
YEAR 1 1901/2155
DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59
TIMESTAMP 4 1970-01-01 00:00:00/2038
字符串型:
CHAR 0-255 bytes
VARCHAR 0-65535 bytes
LONGTEXT 0-4 294 967 295 bytes
三、如何访问数据库
1、本地访问
mysql -u用户名 -p密码 方便但是容易泄漏密码
mysql -u用户名 -p 建议这样登录
2、远程登录
先使用 ssh 或 telnet 远程登录MySQL服务器
ssh 服务器用户名@ip地址 输入密码
后通过 mysql -u用户名 -p 访问数据库
3、客户端登录
详情见数据库环境搭建
注意:登陆后,一定要选择具体的数据库
use 数据库名;
use testDB;
ctrl + Enter 快速执行选中的语句
四、数据定义语句
1、创建表
create table 表名(字段名 字段类型,...);
2、查看表结构
desc 表名;
3、修改表
--修改表名
rename table 旧表名 to 新表名;
--增加列
alter table 表名 add(新字段名 字段类型);
--删除列
alter table 表名 drop 字段名;
4、删除表
--删除表数据,保留表结构
truncate 表名;
--删除表 包括数据和结构
drop table 表名;
五、数据操作语句
1、插入数据
--按照全字段的顺序插入 必须完全相同
insert into 表名 values(数据);
--按照指定字段顺序插入
insert into 表名(字段名) values(数据);
2、删除数据
delete from 表名 where 条件;
--delete from stu where name="hehe";
注意: 如果where不写,相当于删除整张表的数据
注意: SQL中 = 就是等于号,数据都可以直接=比较
3、修改数据
update 表名 set 字段1=数据,字段2=数据 [where 条件];
注意: 如果不写where,则整张表的数据都修改
六、数据查询语句
select 字段名1,字段名2,... from 表名;
-- * 在SQL语句中也是通配符,代表所有字段
--select * from 表名;
七、事务控制语句
1、commit 提交
在数据库中,一个用户修改、插入一条数据时,只有它自己能查询到结果,其它用户不能立即看到,
只有该用户执行commit语句后,其他用户才能看到
注意:默认情况下会默认自动提交
A转账1000元给B
if(A余额>1000)
{
A-=1000;
if(检查B是否存在)
{
B+=1000;
commit;
}
else
{
取消
//A+=1000;
}
}
else
{}
2、rollback
当用户对数据进行操作后,如果发现想要取消操作,可以使用rollback语句返回到上一次commit时的状态
使用commit\rollback的优点:
1、让数据库批量性提交操作,提高数据库的操作效率
2、减少读写磁盘的次数,延长硬盘的使用寿命
3、使用rollback可以撤销大量操作,提高效率
3、MySQL的自动提交
默认情况下,MySQL是自动进行commit
--查询当前用户的自动提交是否开启
show variables like 'autocommit';
--关闭或开启当前用户的自动提交
set session autocommit = 0 | 1;
注意:这些修改都只能该当前次生效,想要永久生效要修改配置文件
4、设置保存点
使用rollback会取消commit后所有操作,这样就可能浪费一些有意义的操作,可以在某一个节点设置一个保存点,
让rollback返回指定的保存点
insert into stu values("h1",1,'x',1,"中国");
savepoint s1;
insert into stu values("h2",1,'x',1,"中国");
savepoint s2;
insert into stu values("h3",1,'x',1,"中国");
savepoint s3;
insert into stu values("h4",1,'x',1,"中国");
savepoint s4;
insert into stu values("h5",1,'x',1,"中国");
select * from stu;
rollback to savepoint s1;