一、数据库介绍
1、为什么使用数据库
计算机的资源有限因此不可能把数据一直存储在内存中,而且内存一旦掉电数据就会不存在,我们需要所内存中的数据存储到文件中,方便下次的编辑、拷贝。
但随着程序越来越来复杂数据也就会越来越庞大,管理这些数据就会成为编程中最难、最重要的问题。
使用文件保存不安全,可能会被误删除,也可能被覆盖。
而数据库的访问是需要用户名、密码、相应的权限及命令。
文件读取数据并解析需要大量的重复代码,这种操作效率很低。
从数据库中查询数据只需要提供条件即可。
文件中删除一条记录异常麻烦,而且不同的程序对于文件的操作不同接口也不相似,因此访问文件的代码不能被复用。
对于这个问题就有人提出一个设想,统一文件的访问接口和访问方法,对文件进行统一管理,背后再增强对于数据管理、读取的优化操作,使用对数据的管理、使用方便又快捷。
2、什么是数据库
数据库,顾名思义就数据的仓库(电子文件柜),而对数据进行增加、删除、修改、查询等操作由数据库管理系统(DBMS)负责,对于数据库进行设计、维护、管理的人员叫DBA。
3、数据库的类型
层次型数据库:数据的存储类似一棵树,以上下层级关系来组织数据。
网状型数据库:数据的存储类似一副图,各个数据节点和其它节点都连接关系。
关系型数据库:关第模型就是一张二维表,任何数据都可以通过行号和列确定,容易理解、使用方便。
4、目前主注流的关系型数据库
商用的:Oracle、SQL Server、DB2
开源的:MySQL
桌面的:Access
嵌入式的:SQLite,适合于手机、桌面程序。
二、SQL语言介绍
1、什么是SQL
SQL是结构化查询语言的缩写(Structured Query Language),用来操作数据库,主要对数据进行增、删、改、查,高级操作是对数据库进行管理、维护。
目前所有的关系型数据库都支持SQL,因此我们只要学会SQL就能操作所有的数据库。
虽然SQL已经被ANSI组织定义为标准,但不幸的是每个数据库对标准的支持都不太一致,大多数的数据库都对SQL进行了扩展。
理论上SQL可以操作所有的数据库,但如果使用了某个数据库的扩展语句,换一个数据库后就不能再执行了。
但是SQL的核心功能绝大数数据库都是支持。
注意:SQL 语言不区别大小写。
2、SQL语言的分类
数据定义语言:用于建立、修改、删除数据库对象
CREATE 用于创建表或其它对象结构,类似C/C++设计结构体
ALTER 用于修改表或其它对象结构
DROP 用于删除表或其它对象
TRUNCATE 用于删除表中的数据,保留表结构
数据操作语言:用于改变表中的数据
INSERT 将数据插入到表中
UPDATE 修改表中已经存在的数据
DELETE 删除表中的数据
表中数据改变后需要执行事务控制语言才能所改变应用到数据库中。
事务控制语言:用来维护表数据的一致性
COMMIT 提交,确认已经进行修改的数据
ROLLBACK 回滚,消除已经进行修改的数据改变
SAVEPOINT 保存点,用于回滚到指定的保存点
数据控制语言:用于执行权限的授予和回收操作
GRANT 用于给用户或角色授予权限
REVOKE 用于回收用户或角色的权限
数据查询语言:用于查询数据
SELECT
三、如何访问数据库
1、远程登录
ubuntu下开启telnet
sudo apt-get install openbsd-inetd
sudo apt-get install telnetd
sudo /etc/init.d/openbsd-inetd restart
sudo netstat -a | grep telnet 检查是否安装成功
telnet 192.168.0.121 在windows下测试
输入用户名
输入密码
mysql -utest -p123456
telnet 192.168.6.66
sqlplus student/123456 进入Oracle数据库
ubuntu下开启ssh
sudo apt-get install openssh-server
sudo ps -e |grep ssh 检查是否安装成功
ssh zhizhen@192.168.0.121 在windows下测试
输入密码
mysql -utest -p123456
2、客户端连接
连接名 自定义
用户名 student
密码 123456
保存口令
地址:192.168.6.66
端口:1521
SID:orcl
四、SQL中的数据类型
MySQL Oracle
n/a | byte 单字节数据,布尔类型
int | Number 整数
float | Number 浮点型
char | char 定长字符串
varchar | varchar2 变长字符串
date | date 日期
char(n) 表示字符串长度
char(10) 数据是"123",依然存储10个字符
适合存储字符串长度波动不大的字符串
优点:是速度快,缺点:浪费空间
varchar(n) 表示字符串长度
varchar(10) 数据是"123",依然存储4个字符
适合存储字符串长度不确定,波动比较大的字符串
优点:会根据字符串的长度进行存储,节约工存储空间
缺点:与char相比速度稍慢
Oracle中的Number(P,S)
P表示总位置,S表示小数点后面的位数
Number(4) 表示四整数
Number(4,2) 小数后最多两位
五、数据定义语言
1、创建表
CREATE TABLE 表名(字段名 字段类型,...);
CREATE TABLE Student19072(name char(20),sex char(1),age int,id char(8));
查表表结构:DESC 表名;
查看数据库中所有表:show tables;
2、修改表
1、修改表名
RENAME TABLE 旧表名 TO 新表名;
RENAME TABLE student TO Teacher;
2、增加列
ALTER TABLE 表名 ADD (字段名 字段类型);
ALTER TABLE Teacher ADD (id char(6));
注意:只能增加到表的末尾,不能插入到中间。
3、删除列
ALTER TABLE 表名 DROP 字段名;
ALTER TABLE Teacher DROP sex;
4、修改列
ALTER TABLE 表名 MODIFY 字段名 新类型;
ALTER TABLE Teacher MODIFY age long;
3、删除表
删除表数据保留表结构
TRUNCATE 表名;
删除表,数据和结构都不存在
DROP TABLE 表名;
六、数据操作语言
1、插入数据
INSERT INTO 表名(字段名) VALUES(数据);
INSERT INTO Student(name,sex,age,id) VALUES('hehehehehehexxx','w',19,19070002);
注意:SQL中可以使用''表示字符串
2、修改表数据
UPDATE 表名 SET 字段名=数据,... where 条件;
UPDATE Student SET sex='m',name='haha' where id=19070001;
UPDATE Student SET sex='m',name='haha' where not id=19070001;
UPDATE Student SET age=17 where id=19070001 or id=19070002;
3、删除表数据
DELETE TABLE 表名 where 条件;
DELETE from Student where id=19070001;
七、事务控制语言
注意:数据定义语言立即有效,不能进行事务控制,只有数据操作语言才能进行事务控制。
在Oracle数据库,一个用户向表中插入数据(他自己能够查询到),其它用户并不能立即查询到,只有执行了 COMMIT 命令后其它用户才能查询到。
INSERT INTO Student(name,sex,age,id) VALUES('xixi','w',19,19070002);
COMMIT;
在MySQL数据库中,默认设置的 autocommit 一个用户插入的数据其它用户能够立即看到。
set session autocommit=0; --关闭当前连接的自动提交
set global autocommit=0; --关闭所有连接的自动提交,需要root权限
- `