博文参考
http://www.178linux.com/79462
http://iceyao.blog.51cto.com/9426658/1571865
http://blog.csdn.net/taochangchang/article/details/16919289
什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。
简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。
在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。
例如, 企业或事业单位的人事部门常常要把本单位职工的基本情况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就可以看成是一个数据库。有了这个“数据仓库“我们就可以根据需要随时查询某职工的基本情况,也可以查询工资在某个范围内的职工人数等等。这些工作如果都能在计算机上自动进行,那我们的人事管理就可以达到极高的水平。此外,在财务管理、仓库管理、生产管理中也需要建立众多的这种“数据库“,使其可以利用计算机实现财务、仓库、生产的自动化管理。
严格来说,数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。
这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
数据管理模型
层次模型:用树状<层次>结构来表示实体类型和实体间联系的数据模型。
网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
数据分类
结构化数据
能够用数据或统一的结构加以表示,我们称之为结构化数据,如数字、符号。传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。
半结构化数据
介于完全结构化数据(如关系型数据库、面向对象数据库中的数据)和完全无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它一般是自描述的,数据的结构和内容混在一起,没有明显的区分。
非结构化数据
指其字段长度可变,并且每个字段的记录又可以由可重复或不可重复的子字段构成的数据库,用它不仅可以处理结构化数据(如数字、符号等信息)而且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。非结构化数据,包括所有格式的办公文档、文本、图片、XML、HTML、各类报表、图像和音频/视频信息等等
关系模型:
数据库:一个方案、一个项目
二维关系:表:row, column 索引:index 视图:view
结构化查询语言包含6个部分
结构化查询语言;简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
数据查询语言(DQL:Data Query Language)
其语句,也称为“数据检索 语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字 SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。
数据操作语言(DML:Data Manipulation Language)
其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。
事务处理语言(TPL:Dransaction Processing Language)
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK
数据控制语言(DCL:DataBase Control Language)
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
数据定义语言(DDL:Data Definition Language)
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。
指针控制语言(CCL)
DDL:Data Defined Language(数据定义)
CREATE, ALTER, DROP、SHOW (增删改查)
DML: Data Manapulating Language(数据操作)
INSERT, DELETE, UPDATE, SELECT (增删改查)
SQL代码:
存储过程:procedure
存储函数:function
触发器:trigger
事件调度器:event scheduler
例程:routine
SQL语言
CREATE建 ALTER改 DROP删
创建数据库
mysql> SHOW DATABASES; #查看MySQL中的数据库
+--------------------+
| Database |
+--------------------+
| information_schema|
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> CREATE DATABASE Oracle; #创建数据库Oracle
Query OK, 1 row affected (0.00 sec)
mysql> SHOW DATABASES; #查看是否创建成功
+--------------------+
| Database |
+--------------------+
| information_schema |
| Oracle |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
创建表
mysql> SELECT DATABASE(); #查看当前所在数据库位置DATABASE()为MySQL内置函数
+------------+
| DATABASE() |
+------------+
| NULL |
+------------+
1 row in set (0.00 sec)
mysql> USE Oracle #切换到我们之前创建的Oracle数据库中
Database changed
mysql> SELECT DATABASE(); #查看是否切换到Oracle
+------------+
| DATABASE() |
+------------+
| Oracle |
+------------+
1 row in set (0.00 sec)
mysql> CREATE table BranchTab( #创建表
-> Id INT,
-> Name CHAR(30)
-> );
Query OK, 0 rows affected (0.09 sec)
mysql> SHOW TABLES; #查看BranchTab表是否创建成功
+------------------+
| Tables_in_Oracle|
+------------------+
| BranchTab |
+------------------+
1 row in set (0.00 sec)
修改表
mysql> SELECT DATABASE(); #查看当前所在数据库为准
+------------+
| DATABASE() |
+------------+
| Oracle |
+------------+
1 row in set (0.00 sec)
mysql> SHOW TABLES; #查看当前所在数据库位置中的表
+------------------+
| Tables_in_Oracle |
+------------------+
| BranchTab |
+------------------+
1 row in set (0.00 sec)
mysql> ALTER TABLE BranchTab RENAME branchtab; #修改表BranchTab为branchtab
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES; #查看是否修改成功
+------------------+
| Tables_in_Oracle |
+------------------+
| brannhtab |
+------------------+
1 row in set (0.00 sec)
删除表
mysql> SELECT DATABASE(); #查看当前所在数据库位置
+------------+
| DATABASE() |
+------------+
| Oracle |
+------------+
1 row in set (0.00 sec)
mysql> SHOW TABLES; #查看当前所在数据库位置中的表
+------------------+
| Tables_in_Oracle |
+------------------+
| branchtab |
+------------------+
1 row in set (0.00 sec)
mysql> DROP TABLE bracnhtab; #DROP掉branchtab表
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW TABLES; #查看branchtabs是否被删除
Empty set (0.00 sec)
删除数据库
mysql> SHOW DATABASES; #查看MySQL中的所有库,发现Oracle库
+--------------------+
| Database |
+--------------------+
| information_schema |
| Oracle |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> DROP DATABASE Oracle; #DROP掉Oracle数据库
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW DATABASES; #查看Oracke是否被删
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
DML操作语言命令
INSERT增 DELETE删 SELECT查 UPDATE改
mysql> CREATE DATABASE oracle; #创建oracle数据库
Query OK, 1 row affected (0.00 sec)
mysql> use oracle #切换到oracle数据库
Database changed
mysql> CREATE TABLE branch(
-> Id INT,
-> Name CHAR(30)
-> );
Query OK, 0 rows affected (0.16 sec)
mysql> DESC branch; #查看表结构,简要增加数据最好看下别弄错
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> SELECT * FROM branch; #查看表结构明细
Empty set (0.00 sec)
mysql> SHOW CREATE TABLE branch\G
*************************** 1. row ***************************
Table: branch
Create Table: CREATE TABLE `branch` (
`Id` int(11) DEFAULT NULL,
`Name` char(30) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 #可以看出我们使用的是MyISMA
1 row in set (0.00 sec)
mysql> SELECT @@version;
+-----------+
| @@version |
+-----------+
| 5.1.73 |
+-----------+
1 row in set (0.00 sec)
插入数据
mysql> SELECT DATABASE(); #查看自己所在数据库位置是否正确
+------------+
| DATABASE() |
+------------+
| oracle |
+------------+
1 row in set (0.00 sec)
mysql> DESC branch; #查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO branch VALUES #插入数据到branch表中
-> (1,'Tom'),
-> (2,'Sunshine');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM branch; #查看是否插入成功
+------+----------+
| Id | Name |
+------+----------+
| 1 | Tom |
| 2 | Sunshine |
+------+----------+
2 rows in set (0.00 sec)
删除数据
mysql> SELECT DATABASE(); #查看所在数据库位置
+------------+
| DATABASE() |
+------------+
| oracle |
+------------+
1 row in set (0.00 sec)
mysql> DESC branch; #查看branch表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> DELETE FROM branch; #删除表数据,没加WHERE条件就是删除这张表里面的所有内容
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM branch; #查看是否删除成功
Empty set (0.00 sec)
mysql> INSERT INTO branch VALUES #插入新的数据
-> (1,'Alis'),
-> (2,'jeery');
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM branch; #查看是否插入成功
+------+-------+
| Id | Name |
+------+-------+
| 1 | Alis |
| 2 | jeery |
+------+-------+
2 rows in set (0.00 sec)
mysql> DELETE FROM branch WHERE Id=1; #删除branch表里面的内容加了条件判断WHERE Id=1
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM branch; #查看是否删除我们指定的数据
+------+-------+
| Id | Name |
+------+-------+
| 2 | jeery |
+------+-------+
1 row in set (0.00 sec)
mysql> DELETE FROM branch WHERE Name=jeery; #删除branch表里面的内容加了条件判断 WHERE Name=jeery;但是jeery没加单引号报错
ERROR 1054 (42S22): Unknown column 'jeery' in 'where clause'
mysql> DELETE FROM branch WHERE Name='jeery'; #删除branch表里面的内容加了条件判断 WHERE Name='jeery';加了单引号成功
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM branch; #查看是否删除我们指定你的数据
Empty set (0.00 sec)
查看数据
mysql> DESC branch; #查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO branch VALUES #插入一些数据
-> (1,'Sunshine'),
-> (2,'jeery'),
-> (3,'Alis'),
-> (4,'Tom');
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT * FROM branch; #查看branch表中的数据
+------+----------+
| Id | Name |
+------+----------+
| 1 | Sunshine |
| 2 | jeery |
| 3 | Alis |
| 4 | Tom |
+------+----------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM branch WHERE Id=1; #查看branch表中的数据,以条件 "WHERRE Id=1"
+------+----------+
| Id | Name |
+------+----------+
| 1 | Sunshine |
+------+----------+
1 row in set (0.00 sec)
mysql> SELECT Name FROM branch; #查看branch表中Name字段的数据
+----------+
| Name |
+----------+
| Sunshine |
| jeery |
| Alis |
| Tom |
+----------+
4 rows in set (0.00 sec)
mysql> SELECT Name FROM branch WHERE Id=1; #查看branch表中Name字段的数据,以条件 "WHERRE Id=1"
+----------+
| Name |
+----------+
| Sunshine |
+----------+
1 row in set (0.00 sec)
mysql> SELECT count(*) FROM branch; #使用count内置函数查看branch表中有多少行
+----------+
| count(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT count(*) FROM bransh where Id=1; #使用count内置函数查看branch表中有多少行,以条件 "WHERE Id=1"
ERROR 1146 (42S02): Table 'oracle.bransh' doesn't exist
mysql> SELECT count(*) FROM bransh;
ERROR 1146 (42S02): Table 'oracle.bransh' doesn't exist
mysql> SELECT count(*) FROM branch WHERE Id=1;
+----------+
| count(*) |
+----------+
| 1 |
+----------+
1 row in set (0.00 sec)
更改数据
mysql> DESC branch; #查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> UPDATE branch SET Id=5; #更改数据,Id=5,生产环境中最好加条件,不然就呵呵了~
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
mysql> SELECT * FROM branch; #不加条件就变成这样了,不是我们想要的
+------+----------+
| Id | Name |
+------+----------+
| 5 | Sunshine |
| 5 | jeery |
| 5 | Alis |
| 5 | Tom |
+------+----------+
4 rows in set (0.00 sec)
mysql> UPDATE branch SET Id=1 WHERE Name='Sunshine'; #更改数据Id=1,加了条件 "WHERE Name='Sunshine'"
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> SELECT * FROM branch; #查看是否是更改成我们所想要的
+------+----------+
| Id | Name |
+------+----------+
| 1 | Sunshine |
| 5 | jeery |
| 5 | Alis |
| 5 | Tom |
+------+----------+
4 rows in set (0.00 sec)
DCL控制语言命令
GRANT REVOKE
权限级别:管理权限,数据库,表,字段,存储例程
权限管理 GRANT
mysql> CREATE TABLE branchone( #为了区别,我们这里在创建一个表
-> Id INT,
-> Name CHAR(30)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> SHOW TABLES; #查看oracle库有几张表
+------------------+
| Tables_in_oracle |
+------------------+
| branch |
| branchone |
+------------------+
2 rows in set (0.00 sec)
mysql> GRANT SELECT ON oracle.branch TO 'sunshine'@'192.168.11.28' IDENTIFIED BY 'sunshine'; #授权sunshine用户只能通过192.168.11.28这个IP访问数据库,而且只有oracle数据库branch的查看权限
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR 'sunshine'@'192.168.11.28'; #查看是否授权成功,我们看到GRANT SELECT ON `oracle`.`branch` TO 'sunshine'@'192.168.11.28'
+---------------------------------------------------------------------------------------------------------------------+
| Grants for sunshine@192.168.11.28 |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'sunshine'@'192.168.11.28' IDENTIFIED BY PASSWORD '*D6B63C1953E7F096DB307F8AC48C4AD703E57001' |
| GRANT SELECT ON `oracle`.`branch` TO 'sunshine'@'192.168.11.28' |
+---------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
[root@redis_master ~]# ifconfig | grep "inet addr:192.168" #使用Linux系统,查看本机IP,为192.168.11.28
inet addr:192.168.11.28 Bcast:192.168.11.255 Mask:255.255.255.0
[root@redis_master ~]# mysql -h192.168.11.28 -usunshine -psunshine #使用sunshine用户连接数据库
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> SHOW DATABASES; #查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| oracle |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> USE oracle #进入oracle数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SHOW TABLES; #查看自己是否只能看到我们设定branch表
+------------------+
| Tables_in_oracle |
+------------------+
| branch |
+------------------+
1 row in set (0.00 sec)
mysql> DESC branch; #查看表结构
+-------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| Id | int(11) | YES | | NULL | |
| Name | char(30) | YES | | NULL | |
+-------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> INSERT INTO branch VALUES #插入数据,提示权限拒绝command denied
-> (10,'Test');
ERROR 1142 (42000): INSERT command denied to user 'sunshine'@'gitlab.jinr.com' for table 'branch'
mysql> DELETE FROM branch; #删除数据,提示权限拒绝 command denied
ERROR 1142 (42000): DELETE command denied to user 'sunshine'@'gitlab.jinr.com' for table 'branch'
mysql> UPDATE branch SET Id=1; #更改数据,提示权限拒绝 command denied
ERROR 1142 (42000): UPDATE command denied to user 'sunshine'@'gitlab.jinr.com' for table 'branch'
mysql> SELECT * FROM branch; #查看数据,正常
+------+----------+
| Id | Name |
+------+----------+
| 1 | Sunshine |
| 5 | jeery |
| 5 | Alis |
| 5 | Tom |
+------+----------+
4 rows in set (0.00 sec)
[root@jroa ~]# ifconfig | grep "inet addr:192.168" #使用另外一台Linux系统,查看IP,为192.168.11.21
inet addr:192.168.11.21 Bcast:192.168.11.255 Mask:255.255.255.0
[root@jroa ~]# mysql -h192.168.11.28 -usunshine -psunshine #尝试连接,提示需'192.168.11.28' (113) 才能登入
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.11.28' (113)
回收授权 REVOKE
mysql> SHOW GRANTS FOR 'sunshine'@'192.168.11.28'; #查看权限,发现 GRANT SELECT ON `oracle`.`branch` TO 'sunshine'@'192.168.11.28'
+---------------------------------------------------------------------------------------------------------------------+
| Grants for sunshine@192.168.11.28 |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'sunshine'@'192.168.11.28' IDENTIFIED BY PASSWORD '*D6B63C1953E7F096DB307F8AC48C4AD703E57001' |
| GRANT SELECT ON `oracle`.`branch` TO 'sunshine'@'192.168.11.28' |
+---------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql> REVOKE SELECT ON oracle.branch FROM 'sunshine'@'192.168.11.28'; #收回授权
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GRANTS FOR 'sunshine'@'192.168.11.28'; #查看权限,没发现 GRANT SELECT ON `oracle`.`branch` TO 'sunshine'@'192.168.11.28'
+---------------------------------------------------------------------------------------------------------------------+
| Grants for sunshine@192.168.11.28 |
+---------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'sunshine'@'192.168.11.28' IDENTIFIED BY PASSWORD '*D6B63C1953E7F096DB307F8AC48C4AD703E57001' |
+---------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
[root@redis_master ~]# !if #查看本机IP,为192.168.11.28
ifconfig | grep "inet addr:192.168"
inet addr:192.168.11.28 Bcast:192.168.11.255 Mask:255.255.255.0
[root@redis_master ~]# !mys #连接mysql,因为第一次授权了,就算收回,公共库的权限还是有的
mysql -h192.168.11.28 -usunshine -psunshine
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.73 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; #查看数据库,发现oracle数据不见啦
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
+--------------------+
2 rows in set (0.00 sec)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。