http://www.178linux.com/79462 http://iceyao.blog.51cto.com/9426658/1571865 http://blog.csdn.net/taochangchang/article/details/16919289
数据库(Database)是按照数据结构来组织、存储和管理数据的创建在计算机存储设备上的仓库。 简单来讲是自己可视为电子化的文件柜——存储电子文件的处所,用户能够对文件中的数据进行新增、截取、更新、删除等操做。 在经济管理的平常工做中,经常须要把某些相关的数据放进这样的“仓库”,并根据管理的须要进行相应的处理。 例如, 企业或事业单位的人事部门经常要把本单位职工的基本状况(职工号、姓名、年龄、性别、籍贯、工资、简历等)存放在表中,这张表就能够当作是一个数据库。有了这个“数据仓库“咱们就能够根据须要随时查询某职工的基本状况,也能够查询工资在某个范围内的职工人数等等。这些工做若是都能在计算机上自动进行,那咱们的人事管理就能够达到极高的水平。此外,在财务管理、仓库管理、生产管理中也须要创建众多的这种“数据库“,使其能够利用计算机实现财务、仓库、生产的自动化管理。 严格来讲,数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以必定的数据模型组织、描述和储存在一块儿、具备尽量小的冗余度、较高的数据独立性和易扩展性的特色并可在必定范围内为多个用户共享。 这种数据集合具备以下特色:尽量不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。从发展的历史看,数据库是数据管理的高级阶段,它是由文件管理系统发展起来的。
层次模型:用树状<层次>结构来表示实体类型和实体间联系的数据模型。mysql
网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。linux
关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。git
可以用数据或统一的结构加以表示,咱们称之为结构化数据,如数字、符号。传统的关系数据模型、行数据,存储于数据库,可用二维表结构表示。redis
介于彻底结构化数据(如关系型数据库、面向对象数据库中的数据)和彻底无结构的数据(如声音、图像文件等)之间的数据,XML、HTML文档就属于半结构化数据。它通常是自描述的,数据的结构和内容混在一块儿,没有明显的区分。sql
指其字段长度可变,而且每一个字段的记录又能够由可重复或不可重复的子字段构成的数据库,用它不只能够处理结构化数据(如数字、符号等信息)并且更适合处理非结构化数据(全文文本、图象、声音、影视、超媒体等信息)。非结构化数据,包括全部格式的办公文档、文本、图片、XML、HTML、各种报表、图像和音频/视频信息等等数据库
数据库:一个方案、一个项目编程
二维关系:表:row, column 索引:index 视图:view数据结构
结构化查询语言;简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。
其语句,也称为“数据检索 语句”,用以从表中得到数据,肯定数据怎样在应用程序给出。保留字 SELECT是DQL(也是全部SQL)用得最多的动词,其余DQL经常使用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其余类型的SQL语句一块儿使用。
其语句包括动词 INSERT, UPDATE和 DELETE。它们分别用于添加,修改和删除表中的行。也称为动做查询语言。
它的语句能确保被DML语句影响的表的全部行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK
它的语句经过GRANT或REVOKE得到许可,肯定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。
其语句包括动词CREATE和DROP。在数据库中建立新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中得到数据有关的保留字。它也是动做查询的一部分。
DDL:Data Defined Language(数据定义) CREATE, ALTER, DROP、SHOW (增删改查) DML: Data Manapulating Language(数据操做) INSERT, DELETE, UPDATE, SELECT (增删改查)
存储过程:procedure 存储函数:function 触发器:trigger 事件调度器:event scheduler 例程:routine
CREATE建 ALTER改 DROP删oracle
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)
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)
GRANT REVOKE
权限级别:管理权限,数据库,表,字段,存储例程
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)
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)