SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)
MySQL和SQL Server是关系型数据库。
SQL语句:
creat:
creat table persons (
A int;
B varchar(255);
);
insert:
insert into persons values (1,'b');
select:
select * from persons;
select distinct A from persons;
select * from persons where A='1'
and B='b';//or B='b';
当and和or同时使用的时候:
select * from person where (A=’1‘ or B=’b‘) and B=’c‘;
select * from person order by A asc/des;
update:
update person set A=’2‘;
delete:
delete from person where A='1';
drop:
drop table person;
SQL高级语句:
like:
'%a'开头,'%b%'居中,'c%'结尾。
in:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter');
between and:
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter';
常用函数:
avg:
select avg(orderno) from orders;
count:
select count(distinct city) from persons;
max,min,sum:
select max(orderno) from orders;
select min(orderno) from orders;
select sum(orderno) from orders;
group by:
select lastname,count(city) from persons
where city='Beijing'
group by lastname;
数据库优化:
设计优化:
分表,分页,
limit按照范围,
还有全局按照union合并
规范化设计:按照范式。
查询优化:
避免全表扫描,避免用*,避免where语句写的很复杂用函数或者排序,
索引优化:
维护复合索引,避免过多索引。
多表联查:
-
INNER JOIN:返回两个表中匹配的行。
-
LEFT JOIN:返回左表的所有行,即使右表没有匹配。
-
RIGHT JOIN:返回右表的所有行,即使左表没有匹配。
-
FULL JOIN:返回两个表中所有行,无论是否匹配。
-
CROSS JOIN:返回两个表的笛卡尔积。
SELECT a.id, a.name, b.order_id FROM users a INNER JOIN orders b ON a.id = b.user_id;
这里细腻去看。
事务隔离级别:
读未提交:可能导致脏读,可能读到未提交的数据。
读已提交:避免了脏读,但可能导致“不可重复读”,在同一数据读到不同。
可重复读:避免了脏读和不可重复读,但可能导致“幻读”,在同一数据范围读到不同。
串行化:避免了脏读、不可重复读和幻读,但并发性能最差,可能导致大量锁争用。
数据库中各种锁:
行锁:
它允许多个事务同时访问表的不同行,但同一行只能被一个事务访问。订单系统中使用。
表锁:
当一个事务对表加锁时,其他事务无法访问该表的任何数据。整个数据全部移除给其他的表。
乐观和悲观锁:
乐观锁假设事务之间的冲突较少作数据时不加锁,而是在提交时检查数据是否被其他事务修改。
适合读多写少,用于电商用户浏览商品。
悲观锁假设事务冲突最多,因此在操作数据时直接加锁,确保其他事务无法修改数据。
适合写多读少,用于多用户抢购商品。