Oracle数据库简单使用

0x00 关于Oracle 完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等) Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区 关于部分视图 DBA/ALL/USER/V_$/GV_$/SESSION/INDEX开头的绝大部分都是视图 DBA_TABLES意为DBA拥有的或可以访问的所有的关系表。 ALL_TABLES意为某一用户拥有的或有权限访问的所有的关系表。 USER_TABLES意为某一用户所拥有的所有的关系表。 当某一用户本身就为数据库DBA时,DBA_TABLES与ALL_TABLES等价。 DBA_TABLES >= ALL_TABLES >= USER_TABLES 0x01 关于实例 在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存) 我们访问Oracle都是访问一个实例,通过Oracle数据库实例来访问和控制磁盘中的数据文件 Oracle实例如果关联了数据库文件,就是可以访问的,如果没有,就会得到实例不可用的错误 实例名指的是用于响应某个数据库操作的数据库管理系统的名称,它同时也叫SID,连接数据库时就会用到这个SID,如:jdbc:oracle:thin:@localhost:1521:orcl(orcl就为数据库实例名) 0x02 关于表空间(可以理解为mysql中的数据库) Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。 用户和表空间是多对多的关系,但是一般创建用户时会指定一个默认表空间。 表空间是数据库中最大的逻辑单位,一个表空间可以包含多个数据文件,而一个数据文件只能隶属一个表空间。 0x03 搭建Oracle环境 使用docker拉取Oracle数据库并且运行 [23:36 reber@wyb in ~] ➜ docker pull alexeiled/docker-oracle-xe-11g [23:36 reber@wyb in ~] ➜ docker run --rm -tid --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g 然后在www.oracle.com下载链接Oracle的客户端:instantclient-basic-macos、instantclient-sqlplus-macos [15:41 reber@wyb in ~/Downloads] ➜ unzip instantclient-basic-macos.


SQLServer存储过程

0x00 数据表结构 CREATE DATABASE student; CREATE TABLE info ( id INT IDENTITY(1,1) PRIMARY KEY NOT NULL, name VARCHAR(20) NOT NULL DEFAULT 'xiaoming', sex INT NOT NULL DEFAULT 1, age INT NOT NULL DEFAULT 0, hight INT NOT NULL DEFAULT 0 ) INSERT INTO info(name,sex,age,hight) VALUES('xiaohong',0,23,165); INSERT INTO info(name,sex,age,hight) VALUES('xiaogang',1,24,175); INSERT INTO info(name,sex,age,hight) VALUES('xiaoliu',1,21,160); INSERT INTO info(name,sex,age,hight) VALUES('xiaozhang',1,19,165); INSERT INTO info(name,sex,age,hight) VALUES('xiaoli',1,23,170); INSERT INTO info(name,sex,age,hight) VALUES('xiaohua',0,23,160); INSERT INTO info(name,sex,age,hight) VALUES('xiaoming',1,21,165); INSERT INTO info(name,sex,age,hight) VALUES('xiaowang',1,23,166); INSERT INTO info(name,sex,age,hight) VALUES('xiaojuan',0,21,159); 0x01 存储过程 --如果存在名为get_student_msg(相当于函数)的存储过程则删除 IF EXISTS (SELECT name FROM sysobjects WHERE name='get_student_msg' AND type='p') DROP PROCEDURE get_student_msg CREATE PROCEDURE get_student_msg --创建存储过程 @name VARCHAR(20) --声明全局变量 AS BEGIN SELECT * from info WHERE name=@name END GO --创建好存储过程后在其他地方直接使用函数并传参就行了 EXEC get_student_msg 'xiaoli' 0x02 使用游标的存储过程 -- 使用DECLARE声明局部变量,一般在函数和存储过程中使用 DECLARE @name VARCHAR(20) DECLARE @sex INT DECLARE @age INT DECLARE @hight INT DECLARE stu_cursor CURSOR FOR --定义游标,后面跟sql语句 SELECT name,sex,age,hight --使用游标的对象(根据需要写select语句) FROM dbo.


SQLServer的基本使用

0x00 数据库 -- 创建数据库 CREATE DATABASE student; -- 选择数据库 USE student; -- 查看当前数据库 SELECT DB_NAME(); -- 查看当前数据库 SELECT DB_NAME(); -- 查看数据库版本 SELECT @@version; 0x01 数据表 -- 创建数据库表 CREATE TABLE info ( id INT IDENTITY(1,1) PRIMARY KEY NOT NULL, name VARCHAR(20) NOT NULL DEFAULT 'xiaoming', sex INT NOT NULL DEFAULT 1 ) -- 查看表结构 EXEC sp_help 'info'; -- 更新表结构 ALTER TABLE info add age int; -- 添加一列 ALTER TABLE info DROP COLUMN age; -- 删除一列 -- 插入数据 INSERT INTO info(name,sex) VALUES('xiaohong',0); -- 查看数据 SELECT * FROM dbo.


MongoDB的基本使用

0x00 角色和权限 Mongo的授权采用了角色授权的方法,每个用户都有一组权限,Monog内建角色权限如下: 数据库用户角色 read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 数据库管理角色 dbOwner:包含readWrite、dbAdmin、userAdmin dbAdmin:允许用户在指定数据库中对集合、文档等操作 userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 集群管理角色 clusterAdmin:只在admin数据库中可用,包含clusterManager、clusterMonitor、hostManager clusterManager: clusterMonitor: hostManager 备份和恢复角色 backup restore 所有数据库角色 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 超级用户角色 root:只在admin数据库中可用。超级账号,超级权限 内部角色 __system 0x01 创建用户 #创建管理员用户 > use admin switched to db admin > db.createUser({ ... user:"root", ... pwd:"root123", ... roles:[{"role":"root","db":"admin"}] ... }) Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] } > db.


Python封装MySQL类

0x00 安装 有两种,一个是MySQLdb,一个是pymysql 下载MySQL-python然后安装 sudo pip install pymysql(推荐,因为py3已经不支持MySQLdb了) 0x01 简单表设计如下 insert into mysql.user(Host,User,Password) values('%','python','123456'); drop database if exists python; create database python; use python; drop table if exists msg; create table msg( id int not null auto_increment primary key, ip varchar(40) not null default '127.0.0.1' comment 'ip地址', domain varchar(100) not null default 'www.xx.com' comment '域名' ); grant all privileges on python.* to 'python'@'%' identified by '123456'; flush privileges; 0x02 MySQLdb封装代码 #!


Redis的简单使用

0x00 关于Redis Redis和MySQL这种关系型数据库不一样,它是非关系型数据库,是日志型、Key-Value数据库, 实现了master-slave(主从)同步,数据都是缓存在内存中的,所以可高速读写,但存储成本较高, 不适合做海量数据存储。 0x01 安装 Linux下安装Redis 可在http://download.redis.io/releases/ 下载 $ cd /opt $ wget http://download.redis.io/releases/redis-3.2.3.tar.gz $ tar -zxvf redis-3.2.3.tar.gz $ cd redis-3.2.3 $ make $ make install Windows下安装Redis 下载:点此下载 安装后添加环境变量 添加为系统服务: redis-server.exe --service-install redis.windows.conf --loglevel verbose 启动服务: redis-server.exe --service-start 关闭服务: redis-server.exe --service-stop 为Redis添加密码: 打开安装目录下的文件redis.windows-service.conf, 找到requirepass,配置为requirepass mypassword,然后重启redis 此时仍然可以连接上,但是执行命令时会提示没权限 带密码连接Redis: redis-cli.exe -h 127.0.0.1 -p 6379 -a mypassword 0x02 产生的可执行文件 redis-server:redis服务器启动程序 redis-cli:redis命令行工具,也可为客户端 redis-stat:redis状态检测工具 redis-benchmark:redis性能检测工具(读写) 0x03 配置文件 $ vim /opt/redis-3.


MySQL的information_schema库

0x00 information_schema information_schema这个数据库中保存了MySQL服务器所有数据库的信息。 如数据库名,数据库的表,表栏的数据类型与访问权限等。 再简单点,这台MySQL服务器上,到底有哪些数据库、各个数据库有哪些表, 每张表的字段类型是什么,各个数据库要什么权限才能访问,等等信息都保存在information_schema里面。 information_schema的表schemata中的列schema_name记录了所有数据库的名字 information_schema的表tables中的列table_schema记录了所有数据库的名字 information_schema的表tables中的列table_name记录了所有数据库的表的名字 information_schema的表columns中的列table_schema记录了所有数据库的名字 information_schema的表columns中的列table_name记录了所有数据库的表的名字 information_schema的表columns中的列column_name记录了所有数据库的表的列的名字 0x01 information_schema的SCHEMATA表 0x02 information_schema的TABLES表 0x03 information_schema的COLUMNS表


PHP之封装MySQL类

0x00 config.inc.php内容如下 <?php return array( 'DB_HOST' => '192.168.188.134', 'DB_NAME' => 'scoreboard', 'DB_USER' => 'score', 'DB_PASS' => '123456', 'DB_CHARSET' => 'utf8', 'IS_LOG' => 1,//开启日志 'LOGFILEPATH' => '../log.txt'//日志路径 ); /* $database = require('./config.php'); echo $database['DB_TYPE']; //输出'DB_TYPE' */ ?> 0x01 表设计如下 create database scoreboard; use scoreboard; drop table if exists users; create table users( id int not null auto_increment primary key, gid int not null default 'xiaoming' comment '组id', username varchar(20) not null default 'xiaoming' comment '用户名', password varchar(32) not null default '123456' comment '密码', sex varchar(2) not null default '0' comment '性别', totalscore int not null default '0' comment '个人总积分' ); drop table if exists share; create table share( id int not null auto_increment primary key, uid int not null, content varchar(1024) not null default 'content' comment '分享内容', comment varchar(1024) comment '点评', date varchar(15) not null default '20150101' comment '分享日期' ); drop table if exists score; create table score( id int not null auto_increment primary key, uid int not null default '0' comment '用户id', score int not null default '0' comment '用户单次积分', ); grant all privileges on scoreboard.


PHP之MySQL常用函数

0x00 处理函数 mysql_connect(server,user,pwd,newlink,clientflag) 连接服务器的函数,成功则返回MySQL标识,失败则返回FALSE mysql_select_db(database,connection) 选择数据库的函数,成功则返回true,失败则返回false mysql_query(query,connection) 执行一条查询,返回一个资源标识符(结果集),如果查询执行不正确则返回FALSE mysql_num_rows(data)和mysql_num_fields(data) 函数分别返回结果集中行和列的数目(禁对SELECT语句有效),结果集从 mysql_query()的调用中得到 mysql_fetch_assoc(data) 从结果集中取得一行作为关联数组,若没有更多行则返回false mysql_fetch_row(data) 从结果集中取得一行作为索引数组,若没有更多行则返回false mysql_error(connection) 返回上一个MySQL函数的错误文本,如果没有出错则返回”(空字符串) mysql_affected_rows(link_identifier) 返回前一次MySQL操作(增删改)所影响的记录行数,失败则返回-1 mysql_insert_id(connection) 返回上一步INSERT操作产生的 ID。如果上一查询没有产生AUTO_INCREMENT的ID,则mysql_insert_id()返回 0。 mysql_data_seek(data,row) 结果集data从mysql_query()的调用中得到,行指针移动到指定的行号,接着调用 mysql_fetch_row() 将返回那一行。如果成功则返回 true,失败则返回 false 0x01 例子 <?php $server = "127.0.0.1"; $dbname = "massage"; $user = "msg"; $pass = "123456" $conn = mysql_connect($server,$user,$pass) or die('连接服务器失败:'.mysql_error()); mysql_query("set names 'utf8'");//设置数据库输出编码 mysql_select_db($dbname,$conn) or die(mysql_error($conn)); //选择数据库 $sql = "select username,password from user"; //构造sql语句 $result = mysql_query($sql); //执行sql语句,返回结果集 $num = mysql_num_rows($result);//返回执行结果的行数 echo "<br />结果的行数:{$num}<br />"; while ($row = mysql_fetch_assoc($result)) { echo $row[id].


MySQL语法

0x00 Select语句的一般语法 1.SELECT [ALL|DISTINCT] <目标列表达式> [,<目标列表达式> ]... 2.FROM <表名或视图名> [,<表名或视图名> ]... 3.[ WHERE <行条件表达式> ] 4.[ GROUP BY <列名1> ,[列名2][,...][HAVING组条件表达式] ] 5.[ ORDER BY <列名1> ,[ASC|DESC][,...] ]; 上面5个句子书写时按顺序,尽量一个句子一行,但在机器内部执行时的顺序是2-3-4-1-5, 即先确定从哪个数据源查找, 然后确定过滤条件, 若有分组则对过滤后的记录进行分组,若分组有限制条件则对分组进一步限制, 然后将符合条件的列查询出来, 最后对结果进行排序。 select name as '名字',password as '密码' form user; select * from message where id between 2 and 6; select * from message where title like '%留言_'; //%匹配任意个字符,_匹配一个字符 select * from message where uid in (2,3,4); //删除2、3、4共3条数据 0x01 连接查询 [<表名1>.



可以返回顶部