mysql基本术语和操作

1.数据库基本概念

事务:

将一组有序的增删改操作,看作一个独立执行的单元,这一组操作要么都成功,只有有一组失败这一组操作都失败,数据库执行事务回滚.
A要给B转帐
A账户中的钱-500
B账户中的前+500
转账过程中俩个操作看成一个执行单元,只有有一个环节出错转账就失败,当俩个操作都成功转账操作才会成功

原子性: 把事物看作成最小执行单元,不可分割,要么都成功,要么都失败

一致性: 事物执行前和执行后的状要保持一致

隔离性: 当用户并发访问数据库时,数据库会给每一个事物开启一个线程一个线程开启一个事务,事务和事务之间互不影响,相互隔离

持久性:一旦事务执行成功,会将已经操作的数据恢复到事务开始前的状态

脏读:一个事务操作了另一个没有提交事务的数据;

不可重复读:
事务A重复读取一条数据,事物B修改了这一条数据,导致事务A俩次读取的数据不一致

幻读:
事务A读取表一中的数据,并进行了操作统计,B事务修改了其中一条数据,导致A事务统计的结果不一样 就像出现了幻觉

事务的四种隔离级别:
Read uncommi:读为提交 最低隔离级别:
Read commit: 读以提交 可以避免脏读
Repeatable read:可重复读 可以避免脏读和不可重复读
Serializable:串行化 最高隔离级别 可以避免所有情况’
隔离级别越高数据库的效率会越低

2.数据库的基础操作

数据库的创建与删除

mysql> CREATE DATABASE test;
mysql> DROP DATABASE test;

选择要操作的数据库

mysql> USE test;

创建表格

use test;
create table students
(   id INT not NULL AUTO_INCREMENT, -- 自动添加的主键
    name VARCHAR(40) NOT NULL,
    班级 VARCHAR(40) NOT NULL,
    成绩 SMALLINT,
 primary key (id) -- 作为主键
   );
-- id在插入时可以添加,自动添加
insert into students(name,班级,成绩) values ('小华','一班','99');

插入数据
基本语句INSERT INTO <表名> (字段1, 字段2, …) VALUES (值1, 值2, …);

INSERT INTO students (class_id, name, gender, score) VALUES
  (1, '大宝', 'M', 87),
  (2, '二宝', 'M', 81);
SELECT * FROM students;

更新数据
基本语句UPDATE <表名> SET 字段1=值1, 字段2=值2, … WHERE …;

UPDATE students SET name='小牛', score=77 WHERE id>=5 AND id<=7;
UPDATE students SET score=score+10 WHERE score<80;

删除数据
基本语句DELETE FROM <表名> WHERE …;

DELETE FROM students WHERE id>=5 AND id<=7;

条件查询

SELECT * FROM students WHERE score >= 80;
SELECT * FROM students WHERE (score < 80 OR score > 90) AND gender = 'M';

投影查询

SELECT id, score points, name FROM students WHERE gender = 'M';

排序

SELECT id, name, gender, score
FROM students
WHERE class_id = 1
ORDER BY score DESC;---由高到低 没有的DESC由低到高

分页

SELECT id, name, gender, score FROM students ORDER BY score ;

聚合查询

SELECT COUNT(*) boys FROM students WHERE gender = 'M';--- 计算个数
SELECT AVG(score) average FROM students WHERE gender = 'M';--- 计算平均数

分组

SELECT class_id, COUNT(*) num FROM students GROUP BY class_id;
SELECT class_id, gender, COUNT(*) num FROM students GROUP BY class_id, gender;---多列分组

多表查询

SELECT * FROM students, classes;同时从students表和classes表的“乘积”

SELECT
    s.id sid,
    s.name,
    s.gender,
    s.score,
    c.id cid,
    c.name cname
FROM students s, classes c
WHERE s.gender = 'M' AND c.id = 1;

两表之间的连接
INNER JOIN是选出两张表都存在的记录

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
INNER JOIN classes c
ON s.class_id = c.id;

LEFT OUTER JOIN是选出左表存在的记录

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
RIGHT OUTER JOIN classes c
ON s.class_id = c.id;

RIGHT OUTER JOIN是选出右表存在的记录

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
LEFT OUTER JOIN classes c
ON s.class_id = c.id;

FULL OUTER JOIN则是选出左右表都存在的记录

SELECT s.id, s.name, s.class_id, c.name class_name, s.gender, s.score
FROM students s
FULL OUTER JOIN classes c
ON s.class_id = c.id;

3.索引及其优缺点

索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。

数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

索引分为聚簇索引和非聚簇索引两种,聚簇索引是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对於单行的检索很快

优缺点:

优点:

  • 在设计数据库时,通过创建一个惟一的索引,能够在索引和信息之间形成一对一的映射式的对应关系,增加数据的惟一性特点

  • 能提高数据的搜索及检索速度,符合数据库建立的初衷。

  • 能够加快表与表之间的连接速度,这对于提高数据的参考完整性方面具有重要作用

  • 在信息检索过程中,若使用分组及排序子句进行时,通过建立索引能有效的减少检索过程中所需的分组及排序时间,提高检索效率。

  • 建立索引之后,在信息查询过程中可以使用优化隐藏器,这对于提高整个信息检索系统的性能具有重要意义。

缺点

  • 在数据库建立过程中,需花费较多的时间去建立并维护索引,特别是随着数据总量的增加,所花费的时间将不断递增。
  • 在数据库中创建的索引需要占用一定的物理存储空间,这其中就包括数据表所占的数据空间以及所创建的每一个索引所占用的物理空间,如果有必要建立起聚簇索引,所占用的空间还将进一步的增加
  • 在对表中的数据进行修改时,例如对其进行增加、删除或者是修改操作时,索引还需要进行动态的维护,这给数据库的维护速度带来了一定的麻烦。

索引类型

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引

唯一索引:

唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。例如,如果在employee表中职员的姓(lname)上创建了唯一索引,则任何两个员工都不能同姓

UNIQUE
create unique index 索引名 on 表名(表中的列[(length)])
alter table 表名 add UNIQUE 索引名 (表中的列[(length)])

主键索引:

数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

PRIMARY KEY  -- 建表时自接指定
alert table 表名 add primary key (表中的列[(length)])

聚集索引:

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

聚集索引和非聚集索引的区别,如字典默认按字母顺序排序(物理顺序),读者如知道某个字的读音可根据字母顺序快速定位(索引顺序与物理顺序相同)。因此聚集索引和表的内容是在一起的。如读者需查询某个生僻字,则需按字典前面的索引,举例按偏旁进行定位,找到该字对应的页数,再打开对应页数找到该字。这种通过两个地方而查询到某个字的方式就如非聚集索引。

建立普通索引或组合索引

create index 索引名 on 表名(列名);
create index 索引名 on 表名(列名1,列名2..); -- 组合索引
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章