关系型数据库:Oracle , SQL Server ,DB2,MySQL.
非关系型数据库:Nosql ,MongoDB,Redis.
一、关系型数据库
关系型数据库最典型的数据结构是表,由二维表及其之间的联系所组成的一个数据组织。
优点:
- 易于维护:都是使用表结构,格式一致;
- 使用方便:SQL语言通用,可用于复杂查询;
- 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。
缺点:
- 读写性能比较差,尤其是海量数据的高效率读写;
- 固定的表结构,灵活度稍欠;
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈
二、非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
优点:
- 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 高扩展性;
- 成本低:nosql数据库部署简单,基本都是开源软件。
缺点:
- 不提供sql支持,学习和使用成本较高;
- 无事务处理;
- 数据结构相对复杂,复杂查询方面稍欠。
安装数据库中,命令窗口中的 mysql -u root -p -u表示的是用户名。默认为root。 -p是输入密码。
mysql的数据存储结构:
先数据库,在表,再有数据。
SQL语句:
作用:管理数据库,管理表,管理结构。
SQL(Structured Query Language,结构化查询语言)语言:和数据库交互的语言,进行数据管理的语言。
查询所有数据库:show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | -- mysql元数据,基础数据(不可删除)
| mysql | --mysql配置数据库,其中包含用户信息。(用户名和密码,权限管理)(不可删除)
| performance_schema | --mysql数据库软件的运行数据,日志信息,性能数据(不可删除) 日志信息指的是:操作所引起的问题。
| test | --测试数据库。空的(可随意修改)。
+--------------------+
4 rows in set (0.00 sec)
创建数据库:
create database db_name (db -name指的是创建的数据库的名字)
[DEFAULT] CHARACTER SET charset_name -- CHARACTER SET:指定数据库采用的字符集
[DEFAULT] COLLATE collation_name --COLLATE:指定数据库字符集的比较方式(校对规则)
凡是用[ ]括起来的可以写也可以不写。
create database 数据库名 character set utf8:指的是创建含有中文的数据库。create database 数据库名:指的是创建拉丁文的数据库。
查询当前的数据库:show create database 数据库名。
删除数据库语句:drop database 数据库名。
修改数据库字符集:alter database 数据库名 character set gbk;
gbk与utf-8:
1. GBK是在国家标准GB2312基础上扩容后兼容GB2312的标准(好像还不是国家标准)。GBK编码专门用来解决中文编码的,是双字节的。不论中英文都是双字节的。 2. UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间。另外,如果是外国人访问你的GBK网页,需要下载中文语言包支持。访问UTF-8编码的网页则不出现这问题。可以直接访问。 3. GBK包含全部中文字符; UTF-8则包含全世界所有国家需要用到的字符。
表管理:
查询所有表语句: show tables;
创建表:首先要 use 数据库名;
create table 表的名字(
指定列名 指定列类型,
指定列名 指定列类型,
指定列名 指定列类型,
);
数值类型常用的有:int 整数型 float 浮点型 char()固定长度字符串 varchar() 可变长度字符串 date 日期(年月日) datetime(年月日时分秒)。
查看表结构:desc 表的名字。
删除表:drop table 表的名字。
添加字段:alter table 表的名字 add column 指定列名 指定列类型;
删除字段:alter table 表的名字 drop column 指定列名;
修改字段类型:alter table 表的名字 modify column 指定列名 修改的指定列类型;
修改字段名称:alter table 表的名字 change column 原先的指定列名 修改的指定列名 指定列类型(也可以是要修改的指定列类型);
修改表的名称:alter table 原先的表的名字 rename to 要修改的表的名字。
增加数据:insert into 表的名字 values();
插入所有数据,一定要按顺序插入,既不能少也不能多字段值。
插入部分数据,语法:insert into 表的名字(指定列名1,指定列名2,指定列名3)values(数据1,数据2,数据3)
修改数据:
update 表的名字 set 要修改的列名="要修改的内容" where 指定的作为条件列的名字="内容"。如果要修改多个内容可以,update 表的名字 set 要修改的列名1="要修改的内容1" ,要修改的列名2="要修改的内容2",要修改的列名3="要修改的内容3" where 指定的作为条件列的名字="内容"
删除数据:
delete from 表的名字 where 列的名字="列的内容" 这是带条件的删除
delete from 表的名字 表示的清空表,他所表示的是清空表的内容。而不是删除表,要注意与drop table(删除表)区分开。
truncate table 表的名字 同样表示清空表。
delete from 与truncate table 的区别:前者可以带条件删除,只能删除表的内容,不能删除表的约束。同时删除的数据可以回滚事务。(就是说可以进回收站)。后者与之相反。