MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
数据库引擎:
Innodb引擎
- Innodb引擎支持数据库ACID事务,并且实现了SQL标准的四种隔离级别,
- 该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,MySQL运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。
- 但是该引擎不支持FULLTEXT类型的索引,
- 而且它没有保存表的行数,当SELECT COUNT(*) FROMTABLE时需要扫描全表。
当需要使用数据库事务时,该引擎当然是首选。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。但是使用行级锁也不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表。
MyIASM引擎
MyIASM是MySQL默认的引擎
- 没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。
- 和Innodb不同,MyIASM中存储了表的行数,于是SELECT COUNT(*) FROM TABLE时只需要直接读取已经保存好的值而不需要进行全表扫描。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。
两种引擎的选择
大尺寸的数据集趋向于选择InnoDB引擎,因为它支持事务处理和故障恢复。数据库的大小决定了故障恢复的时间长短,InnoDB可以利用事务日志进行数据恢复,这会比较快。主键查询在InnoDB引擎下也会相当快,不过需要注意的是如果主键太长也会导致性能问题,关于这个问题我会在下文中讲到。大批的INSERT语句(在每个INSERT语句中写入多行,批量插入)在MyISAM下会快一些,但是UPDATE语句在InnoDB下则会更快一些,尤其是在并发量大的时候。
数据库
- 新建
creat database db_name
复制代码
- 修改
rename database db_old to db_new
复制代码
- 删除
drop database db_name
复制代码
数据表结构
- 表的新建
creat table t_name
(
id int not null,
name varchar(4),
datetime date
)
复制代码
- 修改表结构
增加列
alter table t_name add lie_name lie_type
修改列
alter table t_name alter column t_name t_type
删除列
alter table t_name drop column lie_name
复制代码
- 删除表
drop table t_name
复制代码
表数据的增删改查
增加
insert into table_name(column1,column2,column3) value (value1,value2,value3)
修改
update table_name set colunm1 =value
删除
delete from table_name where and /or/not
查询
select * from table_name where /group by having /order by
复制代码
约束 constraints
CREATE TABLE Persons
(
Id_P int NOT NULL AUTO INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),DEFAULT 'beijing'
Id_city int
UNIQUE(Id_p)
PRAMARY KEY(Id_p)
FOREIGN KEY(Id_city)REFERENCE City(Id_city)
check(id_p>0)
)
复制代码
not null: 字段不为空
unique:该值唯一,不允许重复
添加唯一unique索引
ALTER TABLE Persons
ADD UNIQUE (Id_P)
删除唯一索引
ALTER TABLE Persons
DROP INDEX uc_PersonID
复制代码
AUTO INCREMENT :自动创建唯一的数字
pramary key:主键唯一
ALTER TABLE Persons
ADD PRIMARY KEY (Id_P)
ALTER TABLE Persons
DROP PRIMARY KEY
复制代码
foreign key:外键,在其他表中为主键
ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
复制代码
check:限制列值的范围
ALTER TABLE Persons
ADD CHECK (Id_P>0)
ALTER TABLE Persons
DROP CHECK chk_Person
复制代码
default:列的默认取值
ALTER TABLE Persons
ALTER city SET DEFAULT 'beijing'
ALTER TABLE Persons
ALTER city DROP DEFAULT
复制代码
功能函数 //where不能同时使用
- avg()
- count()
- max()
- min()
- sum()
查询
distinct:消除重复
top: sql server 中取前几个数据top number或前X% top 50 percent的数据
/limit:mysql中取数据
例如:
limit 5:取前五个
limit 20,-1 :取倒数20 个数据
like: 用于在 where子句中搜索列中的指定模式 like '%jin%'
通配符:
% :任意一个或多个字符
-:任意一个字符
[abc]:a或b或c任意一个字符都可以
[!abc]:a和b和c之外,任意一个字符都可以
复制代码
in :少量数据 select * from T where name in("aa","bb")
between A and B :某列值在A和B之间
as :别名 select * from Table_worker_name as wname
group by :按照某一列,将相同的值进行聚合
having :sum()与where不能同时使用
SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
复制代码
order by:按照某一列进行排序,asc升序,desc降序
联合
序号 | A_no | A_name | A_age | A_cno | B_no | B_city |
---|---|---|---|---|---|---|
1 | 1 | kong | 18 | 1 | 1 | beijing |
2 | 2 | li | 20 | 4 | 4 | tianjin |
3 | 3 | zhao | 21 | 2 | 2 | shanghai |
4 | 4 | qian | 22 | 3 | 3 | shenzhen |
5 | null | null | null | null | 5 | chongqing |
6 | 5 | sun | 20 | 1 | null | null |
内联合 inner join
select * from A inner join B on A_cno = B_no
序号:1、2、3、4
全联合 full join
select * from A full join B on A_cno = B_no
序号:1、2、3、4、5、6
左联合 left join
select * from A left join B on A_cno = B_no
select e.emp_no from employees e left join dept_manager d on e.emp_no=d.emp_no where d.emp_no is NULL
序号:1、2、3、4、6
右联合 right join
select * from A right join B on A_cno = B_no
序号:1、2、3、4、5
复制代码
合并
union 用于合并两个或多个select语句的结果,表要具有相同数量的列,相同的数据类型,且顺序也必须相同。
union :两表中相同的值,只取一个
union all :将多个相同的值全部列出
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
复制代码
索引
创建
creat index index_name on table_name(table_column1,table_column2)
删除
alter table table_name drop index index_name
复制代码
视图
创建视图/更新视图
creat view view_name as
select XXX from table_name where XXX
查询视图
select * from view_name
删除
drop view view_name
复制代码