数据库笔记 数据+索引

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_noA_nameA_ageA_cnoB_noB_city
11kong1811beijing
22li2044tianjin
33zhao2122shanghai
44qian2233shenzhen
5nullnullnullnull5chongqing
65sun201nullnull
内联合 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
复制代码

转载于:https://juejin.im/post/5bc735b6e51d456f3852c6c2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值