数据库的相关知识——学习笔记

一、数据库介绍
1、为什么使用数据库

     计算机的资源有限,因此不可能把数据一直存储在内存中,而且内存一旦掉电数据就会不存在,我们需要所内存中的数据存储到文件中,
方便下次的编辑、拷贝。
        但随着程序越来越复杂,数据也就会越来越庞大,管理这些数据就会成为编程中最难、最重要的问题。
        使用文件保存不安全,可能会被误删,也可能被覆盖。
            而数据库的访问是需要用户名、密码、相应的权限及命令。
        文件读取数据并解析需要大量的重复代码,这种操作效率很低。
            从数据库中查询数据只需要提供条件即可。
        文件中删除一条记录异常麻烦,而且不同的程序对于文件的操作不同接口也不相似,因此访问文件的代码不能被复用。
        对于这个问题就有人提出一个设想,统一文件的访问接口和访问方法,对文件进行统一管理,背后再增强对于数据管理、读取的优化
操作,使用对数据的管理、使用方便又快捷。

2、什么是数据库

 数据库,顾名思义就是数据的仓库(电子文件柜),而对数据进行增加、删除、修改、查询等操作由数据库管理系统(DBMS)进行,对于数据
 库进行设计、维护、管理的人员叫DBA。

3、数据库的类型

层次型数据库:数据的存储类似一棵树,以上下层级关系来组织数据。
网状型数据库:数据的存储类似一副图,各个数据节点和其他节点都连接关系。
关系型数据库:关系模型就是一张二维表,任何数据都可以通过行号和列确定,容易理解、使用方便。

4、目前主流的关系型数据库

  商用的:Oracle、SQL Server、DB2
  开源的:MySQL
  桌面的:Access
  嵌入式的:SQLite,适合于手机、桌面程序

二、SQL语言介绍
1、什么是SQL

SQL是结构化查询语言的缩写,用来操作数据库,主要对数据用来增、删、改、查,高级操作是对数据库进行管理、维护。
    目前所有的关系型数据库都支持SQL,因此我们只要学会SQL就能操作所有的数据库。
    虽然SQL已经被ANSI组织定义为标准,但不幸的是每个数据库对标准的支持都不太一致,大多数的数据库都对SQL进行了扩展。
    理论上SQL可以操作所有的数据库,但如果使用了某个数据库的扩展语句,换一个数据库后就不能再执行了。
    但是SQL的核心功能绝大数数据库都是支持。

2、SQL语言的分类

    数据定义语言:用于建立、修改、删除数据库对象
        CREATE 用于创建表或其他对象结构
        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

3、补充(安装Ubuntu12.04安装mysql)
安装MySQL数据库

sudo apt-get update
sudo apt-get install mysql-server

确认是否安装成功

sudo netstat -tap | grep mysql

当mysql节点处于LISTEN状态表示启动成功

登录数据库

mysql -u root -p

或者直接在-p后面跟密码,如下

mysql -uroot -proot

再装个mysql-client, libmysqlclient-dev

sudo apt-get install mysql-client
sudo apt-get install libmysqlclient-dev

// 创建新用户test

create user 'test'@'localhost' identified by 'test';

// 给test用户所有权限

grant all privileges on *.*  to test@localhost identified by 'test'

// 刷新权限

flush privileges;

mysql中文乱码问题解决 / C程序插入仍是乱码解决

四、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) 小数后最多两位

五、数据定义语言
创建数据库
CREATE DATABASE 数据库名;
然后
USE 数据库名;

1、创建表


 CREATE TABLE 表名(字段名 字段类型,...);
    CREATE TABLE Student(
        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 id char(8);
    ALTER TABLE Teacher MODIFY id char(8);

3、删除表

    1.删除表数据
    TRUNCATE 表名;

    2.删除表,数据和结构都不存在
    DROP 表名;

六、数据操作语言

   1、插入数据
   INSERT INTO 表名(字段名) VALUES(数据);
   INSERT INTO Student(name,sex,age,id) VALUES('hehehehehehe','m',18,1907123);
   注意:SQL中可以使用''表示字符串

   2、修改表数据
    UPDATE 表名 SET 字段名=数据,... where 条件;
    UPDATE Student SET sex='w',name='hehe' where not id=1907123;
    UPDATE Student SET age=17 where id=1907123 or id=1907124;
    
   3、删除表数据
    DELETE FROM 表名 where 条件;
    DELETE FROM Student where id=1907123;

七、事务控制语言

   注意:数据定义语言立即有效,不能进行事务控制,只有数据操作语言才能进行事务控制。
    1、COMMIT 提交
    在Oracle数据库,一个用户向表中插入数据(他自己能够查询到),其它用户并不能立即查询到,只有执行了 COMMIT 命令后其他用户才
能查询到。
        INSERT INTO Student(name,sex,age,id) VALUES('xixi','w',20,1907125);
        COMMIT;
    在MySQL数据库中,默认设置的 autocommit 一个用户插入的数据,其他用户也能立即查看到。
    set session autocommit=0; --开启当前连接的自动提交
    set global autocommit=0;  --开启所有连接的自动提交,需要root权限
    set session autocommit=1; --关闭当前连接的自动提交
2、回滚
当使用数据操作语言对数据进行更改后,如果没有进行COMMIT,那么就可以撤销(反悔),使用 ROLLBACK 命令,可以把数据还原到数据
更改前的样子。

3、保存点
如果向表中插入了四条记录,此时如果直接rollback,则四条记录都会消失,如果只想保留一条、两条或三条,需要在每插入一个记录后设置
一个保存点,使用 rollback to savepoint 保存点;可以回到任意一条记录后。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love丶伊卡洛斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值