mysql数据库知识点总结

mysql属于关系型数据库,关系型数据库是指采用了关系模型来组织数据的数据库,而关系模型就是指二维表格模型,所以,关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
1.mysql数据库中常用的概念有:
(1)字段:表中的一列,(也叫属性);
(2)记录:表中的一行,(也叫元组);
(3)关键字:一组可以唯一标识记录的字段,(能根据它快速分类,检索到目的数据的关键词);
(4)域:字段的取值范围,(即某一列的取值限制);
(5)关系:就是数据库的表,(即数据库的表名);
(6)关系模式:定义关系的描述叫关系模式,通常表示为:表名(字段1,字段2,……),(也叫表结构);
(7)事务:是作为单个逻辑单元执行的一系列操作,(也就是一组不可分割的sql语句);
(8)ACID:事务必须具备ACID特性,
A ——>Atomic(原子性),事务必须是原子工作单位,对于数据的修改,要么全部执行,要么全部不执行。
C ——>Consistency(一致性),事务在完成时,必须使所用的数据都保持一致状态。
I ——>Isolation(隔离性),由并发事务所作的修改必须与任何其他并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态。
D ——>Durability(持久性),事务完成后,对系统的影响是永久的。
(数据库采用日志的方式来保证原子性,一致性,持久性,用锁机制来保证隔离性);
(9)索引:索引是对数据库表中一列或多列的值进行排序的一种结构,(类似于书籍的目录)。
2.mysql数据库的瓶颈:
(1)高并发读写性能低
由于网站的用户并发性高,往往是每秒上万次的读写请求,虽然mysql等关系型数据库勉强可以应付上万次SQL查询,但硬盘I/O往往无法承担上万次的SQL写数据请求。
(2)海量数据读写效率低
网站每天产生的数据量非常大,但是对于mysql等关系型数据库来说,对海量数据的查询和更改,效率非常低。
(3)可扩展性和可用性低
当数据量剧增的时候,无法简单的添加硬件等方法扩展性能,而是需要停机维护和数据迁移。
3.关系型数据库和非关系型数据库:
(补充:
问:什么是非关系型数据库?
答:非关系型数据库也叫NoSQL,它的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。由于不可能用一种数据结构化存储应付所有的新的需求,因此,非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合。

(1)由于关系型数据库的一致性,使得关系型数据库可以用于所有对一致性有要求的系统中,如银行系统;但是还是由于关系型数据库的一致性,在网页应用中,一致性也不是很重要,相反,对于高并发性要求比较高,因此,非关系型数据库的地位就凸显出来了。
(2)关系型数据库通常是基于行的形式存储,而关系型数据库包括列式存储、键值对存储、文档存储、图形存储。
4.数据库的引擎:
数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务。
mysql数据库常用的引擎有:innodb和berkleydb(bdb)。
5.sql语句:
(1)添加、删除用户,给权限
· 添加用户

 insert into mysql.user(Host,User,Password) values("localhost","test",password("123456"));

· 删除用户

delete from user where User='test' and Host='localhost';
flush privileges;

· 给权限

grant all privileges on testdb.* to test@localhost identified by '123456';//把testdb数据库的所有权限给test
flush privileges;//刷新系统权限表

(2)创建、删除数据库
· 创建

create database test;

· 删除

drop database test;

(3)选择数据库,创建、删除表
· 选择数据库

use test;

· 创建表

create table test_table(
    id int not null auto_increment,
    name varchar(100) not null,
    age int not null,
    date date,
    singin int,
    primary key(id)
    );

· 删除表

drop table test_table;

(4)增、删、改、查
·

insert into test_table(name ,age)
values (小y,25);

·

delete from test_table where name="小y";

·

update test_table set name="小z" where id=2;

·

select id ,name ,age from test_table;

· 模糊查询(like)

select * from test_table where name like "%y";

· 排序查询(asc升序,desc降序)

select * from test_table order by age asc;
select * from test_table order by age desc;

· 分组查询(group by分组,with rollup在分组的基础上再进行统计)

select name count(*) from test_table group by name;
select name sum(singin) as singin_count from test_table group by name with rollup;

(5)修改表名或字段
· 修改表名

alter table test_table rename to my_table;

· 增加、删除、修改字段类型,名称

增加:alter table my_table add i int;
删除:alter table my_table drop i;
修改:alter table my_table modify name char(10);
     alter table my_table change i bigint;

(6)创建、删除索引

create index indexName on my_table(name(length));
drop index [indexName] on my_table;

(7)处理重复数据
为了防止出现重复数据,可以设置指定字段为主键。
可以使用distinct来过滤重复数据。

select distinct name from my_table ;

删除重复数据。

create table tmp select name ,age,singin from my_table;
drop table my_table;
alter table tmp rename to my_table;

(8)连接(inner join内连接,left join左连接,right join右连接)
· 内连接

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

· 左连接(会读取左边数据表的全部数据,即便右边表无对应数据。)

SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;

· 右连接(会读取右边数据表的全部数据,即便左边边表无对应数据。)

SELECT b.runoob_id, b.runoob_author, a.runoob_count FROM tcount_tbl a RIGHT JOIN runoob_tbl b ON a.runoob_author = b.runoob_author;

你可能感兴趣的:(mysql)