目录
- 数据库(Database-DB)是一种用来存储信息和维护信息的容器,严格地说数据库是“按照数据结构来组织、存储和管理信息的仓库”。
- 数据库管理系统(Database Management System-DBMS)是一种管理数据库的软件。具有对数据存储、安全、一致性、并发操作、恢复和访问等功能。
- 数据结构化
- 实现数据共享
- 减少数据冗余
- 数据独立性
- 网状型数据库
- 层次型数据库
- 关系型数据库
表用来保存数据,每个表由一组字段来定义其结构,记录则是表中的一条数据。
- 行是一条记录。
- 列是一组命名的属性,也称字段,需要定义数据类型,比如整数或者字符型。
- 行和列的交集称为数据项,指出了某列在某行上的值,也称为字段值。

- Oracle
- DB2
- Sybase
- Microsoft SQL Server
- MySQL
MySQL是当前Web开发中使用最为广泛的数据库。
MySQL是由瑞典 MySQL AB公司开发的一种开放源代码的关系型数据库管理系统,目前属于甲骨文公司旗下产品。由于MySQL是开放源代码的,任何人都可以在General Public License的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。
下载MySQL的安装包 如下是6.0.11的下载地址:mysql6.0下载-MySQL数据库6.0下载 v6.0.11官方版(32位/64位)--pc6下载站

























- drop TABLE emp;
- drop TABLE dept;
- drop TABLE salgrade;
- create table dept
- (
- deptno integer(4) not null,
- dname varchar(14),
- loc varchar(13)
- );
- alter table dept add constraint pk_dept primary key (deptno);
- create table emp
- (
- empno integer(4) not null,
- ename varchar(10),
- job varchar(9),
- mgr integer(4),
- hiredate date,
- sal decimal(7,2),
- comm decimal(7,2),
- deptno integer(2)
- );
- alter table emp add constraint pk_emp primary key (empno);
- alter table emp add constraint fk_deptno foreign key (deptno) references dept (deptno);
- create table salgrade
- (
- grade integer(1),
- losal decimal(7,2),
- hisal decimal(7,2)
- );
- insert into DEPT (DEPTNO, DNAME, LOC) values (10, 'ACCOUNTING', 'NEW YORK');
- insert into DEPT (DEPTNO, DNAME, LOC) values (20, 'RESEARCH', 'DALLAS');
- insert into DEPT (DEPTNO, DNAME, LOC) values (30, 'SALES', 'CHICAGO');
- insert into DEPT (DEPTNO, DNAME, LOC) values (40, 'OPERATIONS', 'BOSTON');
- insert into SALGRADE (GRADE, LOSAL, HISAL) values (1, 700, 1200);
- insert into SALGRADE (GRADE, LOSAL, HISAL) values (2, 1201, 1400);
- insert into SALGRADE (GRADE, LOSAL, HISAL) values (3, 1401, 2000);
- insert into SALGRADE (GRADE, LOSAL, HISAL) values (4, 2001, 3000);
- insert into SALGRADE (GRADE, LOSAL, HISAL) values (5, 3001, 9999);
- -- 下面要特别注意,%d-%m-%Y 里的 d 和 m 一定要小写
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7369, 'SMITH', 'CLERK', 7902, STR_TO_DATE('17-12-1980', '%d-%m-%Y'), 800.00, null, 20);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7499, 'ALLEN', 'SALESMAN', 7698, STR_TO_DATE('20-02-1981', '%d-%m-%Y'), 1600.00, 300.00, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7521, 'WARD', 'SALESMAN', 7698, STR_TO_DATE('22-02-1981', '%d-%m-%Y'), 1250.00, 500.00, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7566, 'JONES', 'MANAGER', 7839, STR_TO_DATE('02-04-1981', '%d-%m-%Y'), 2975.00, null, 20);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7654, 'MARTIN', 'SALESMAN', 7698, STR_TO_DATE('28-09-1981', '%d-%m-%Y'), 1250.00, 1400.00, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7698, 'BLAKE', 'MANAGER', 7839, STR_TO_DATE('01-05-1981', '%d-%m-%Y'), 2850.00, null, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7782, 'CLARK', 'MANAGER', 7839, STR_TO_DATE('09-06-1981', '%d-%m-%Y'), 2450.00, null, 10);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7788, 'SCOTT', 'ANALYST', 7566, STR_TO_DATE('19-04-1987', '%d-%m-%Y'), 3000.00, null, 20);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7839, 'KING', 'PRESIDENT', null, STR_TO_DATE('17-11-1981', '%d-%m-%Y'), 5000.00, null, 10);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7844, 'TURNER', 'SALESMAN', 7698, STR_TO_DATE('08-09-1981', '%d-%m-%Y'), 1500.00, 0.00, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7876, 'ADAMS', 'CLERK', 7788, STR_TO_DATE('23-05-1987', '%d-%m-%Y'), 1100.00, null, 20);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7900, 'JAMES', 'CLERK', 7698, STR_TO_DATE('03-12-1981', '%d-%m-%Y'), 950.00, null, 30);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7902, 'FORD', 'ANALYST', 7566, STR_TO_DATE('03-12-1981', '%d-%m-%Y'), 3000.00, null, 20);
- insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
- values (7934, 'MILLER', 'CLERK', 7782, STR_TO_DATE('23-01-1982', '%d-%m-%Y'), 1300.00, null, 10);

- 存储引擎就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎简而言之就是指表的类型。数据库的存储引擎决定了表在计算机中的存储方式。
- 在Oracle和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎,MySQL的核心就是存储引擎。
InnoDB存储引擎的特点:
- 支持外键(Foreign Key)
- 支持事务(Transaction):如果某张表主要提供OLTP支持,需要执行大量的增、删、改操作(insert、delete、update语句),出于事务安全方面的考虑,InnoDB存储引擎是更好的选择。
- 最新版本的MySQL已经开始支持全文检索。
MyISAM存储引擎的特点:
- MyISAM具有检查和修复表的大多数工具。
- MyISAM表可以被压缩
- MyISAM表最早支持全文索引
- 但MyISAM表不支持事务
- 但MyISAM表不支持外键(Foreign Key)。
- 如果需要执行大量的select语句,出于性能方面的考虑,MyISAM存储引擎是更好的选择。
- MEMORY存储引擎的特点:
- MEMORY存储引擎是MySQL中一类特殊的存储引擎。该存储引擎使用存在于内存中的内容来创建表,每个表实际对应一个磁盘文件,格式为.frm。这类表因为数据在内存中,且默认使用HASH索引,所以访问速度非常快;但一旦服务关闭,表中的数据会丢失。
- 每个MEMORY表可以放置数据量的大小受max_heap_table_size系统变量的约束,初始值为16MB,可按需求增大。此外,在定义MEMORY表时可通过MAX_ROWS子句定义表的最大行数。
- 该存储引擎主要用于那些内容稳定的表,或者作为统计操作的中间表。对于该类表需要注意的是,因为数据并没有实际写入磁盘,一旦重启,则会丢失。
- MySQL5.7默认的默认的存储引擎是InnoDB。
| 功 能 | InnoDB | MyISAM | Memory |
| 存储限制 | 64TB | 256TB | RAM |
| 支持事务 | 支持 | 无 | 无 |
| 空间使用 | 高 | 低 | 低 |
| 内存使用 | 高 | 低 | 高 |
| 支持数据缓存 | 支持 | 无 | 无 |
| 插入数据速度 | 低 | 高 | 高 |
| 支持外键 | 支持 | 无 | 无 |
- 字符(Character)是指人类语言最小的表义符号,例如'A'、'B'等。
- 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这个数值就是字符的编码(Character Encoding)。
- 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。MySQL中提供了多种字符集,例如latin1、utf8、gbk等。
- 字符序(Collation)是指在同一字符集内字符之间的比较规则。只有确定字符序后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系。每个字符序唯一对应一种字符集,一个字符集可以对应多种字符序,其中有一个是默认字符序(Default Collation)。
- MySQL中的字符序命名规则:以字符序对应的字符集名称开头,以国家名居中(或以general居中),以ci或cs或bin末尾。例如:latin1字符集对应有latin1_swedish_ci、latin1_spanish_ci、latin1_german1_ci等字符序。以ci结尾的字符序表示大小写不敏感;以cs结尾的字符序表示大小写敏感;以bin结尾的字符序表示按编码值比较。例如在字符序gbk_general_ci规则中,字符'a'和'A'是等价的。
- MySQL提供的下列命令可以在不影响其它数据库字符集的基础上临时修改当前的字符集
- SET character_set_client = gbk;
- SET character_set_connection = gbk;
- SET character_set_database = gbk;
- SET character_set_results = gbk;
- SET character_set_server = gbk;
- SET collation_connection = gbk_chinese_ci ;
- SET collation_database = gbk_chinese_ci ;
- SET collation_server = gbk_chinese_ci ;