最流行的关系型数据管理系统
1.基本概念
数据库:按照数据结构来组织、存储和管理数据的仓库
关系型数据库:建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据
关系型数据库管理系统的特点:
(1)数据以表格的形式出现
(2)每行为各种记录名称
(3)每列为记录名称所对应的数据域
(4)许多的行和列组成一张表单
(5)若干的表单组成database
所谓的“关系型”可以理解为“表格”,即一个关系型数据库由一个或多个表格组成
2.管理MYSQL的命令
(1)使用某个指定数据库
use 数据库名;
(2)列出MYSQL数据库管理系统的数据库列表
show databases;
(3)显示指定数据库的所有表
show tables;
(4)删除数据库
drop database;
3.MYSQL数据类型
大致可分为三种:数值、日期/时间和字符串(字符)类型
MYSQL5.0以上的版本:
一个汉字占多少长度与编码有关
- UTF-8 :一个汉字=3个字节
- GBK:一个汉字=2个字节
4.MYSQL创建数据表
- 表名
- 表字段名
- 定义每个表字段
语法:
create table tabale_name(column_name,column_type);
例:创建学生信息表
create table studentInfo if not exists(
stuId int auto_increment,
stuName varchar(20),
stuAddress varchar(20),
stuSex varchar(20)
)
注:创建MYSQL表时,表名和字段名外面的符号`不是单引号,而是英文输入法状态下的反单引号.一般的,表名与字段名都是用反引号
5.MYSQL删除数据表
(1)删除表内数据
delete from 表名 where 删除条件;
(2)清楚表内数据,保存表结构
truncate tabke 表名;
(3)删除表内数据及结构
drop table 表名;
6.MYSQL插入数据
insert into studentInfo (stuId,stuName,stuAddress,stuSex) values();
注:若数据是字符型,必须使用单引号或双引号
7.MYSQL查询数据
select stuId,stuName,stuAddress,stuSex from studentInfo;
8.MYSQL where子句
从MYSQL表中使用SQL select语句来读取数据,若需要有条件的从表中选取数据,可将WHERE子句添加到SELECT语句中
-
查询语句中可以使用要给或多个表,表之间使用逗号分隔,并使用WHERE语句来设定查询条件
-
可以在WHERE子句中指定任何条件
-
可以使用AND或者OR指定一个或多个条件
-
WHERE子句类似于程序语言的IF条件。根据MYSQL表中的字段值来读取指定的数据
where、group by、having的区别:
-
where:数据库中常用的关键字,用于在初始表中筛选查询,是要给约束声明,用于约束数据,在返回结果集之前起作用
-
group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个字段或者表达式的值
-
having:用于对where和group by查询出来的分组进行过过滤,查出满足条件的分组结果.是一个过滤声明,实在查询返回结果集以后对查询结果进行的过滤操作
执行顺序:select->where->group by ->having->order by
9.MYSQL update更新
若需要修改或更新MYSQL中的数据,可以使用SQL update命令来操作
update table_name set fileld1=new-value1,field2=new-value2 [where]
- 可以同时更新一个或多个字段
- 可以在WEHRE子句中指定任何条件
- 可以在一个单独表中同时更新数据
10.MYSQL delete 语句
可以使用delete from命令来删除MYSQL数据表中的记录
delete from table_name [where clause];
- 若没有指定where子句,MYSQL表中的所有记录将被删除
- 可以在where子句中指定任何条件
- 可以在单个表中一次性删除记录
delete,drop,truncate都有删除表的作用,区别在于:
(1)delete和truncate仅仅删除表数据,drop连表数据和表结构一起删除
(2)delete是DML语句,操作完以后如果没有不想提交事务还可以回滚,truncate和drop是DDL语句,操作完马上生效,不可回滚
(3)执行速度:drop>truncate>delete
11.MYSQL like子句
SQL like子句中使用百分号%字符来表示任意字符
注:若没有使用%,like子句中与等号=的效果一样
- 可以在where子句中指定任何条件
- 可以在where子句中使用like子句
- 可以使用like子句代替等号=
- like通常与%一同使用,类似于一个元字符的搜索
- 可以使用and或or指定一个或多个条件
- 可以在delete或update命令中使用where…like子句来指定条件
like匹配/模糊匹配,会与%和_结合使用:
- ’%a‘:以a结尾的数据
- ’a%‘:以a开头的数据
- ’%a%’:含有a的数据
- ’a‘:三位且中间字母是a
- ’_a‘:两位且结尾字母是a
- ‘a_’:两位且开头字母是a
12.MYSQL union操作符
用于连接两个以上的select语句的结果组合到一个结果集合中
语法:
select expression1,expression2,...expression_n from tables [where conditions] union [all || distinct] select expression1,expression2,...expression_n from tables [where conditions];
参数:
- distinct:可选,删除结果集中重复的数据.默认情况下union操作符已经删除了重复数据,因此distinct修饰符对结果没什么影响
- all:可选,返回所有结果集,包含重复数据
union只会选取不同的值,若要选取重复的值,需要使用union all
13.MYSQL排序
若需要对读取的数据进行排序,可以使用order by子句来设定想按哪个字段哪种方式进行排序,在返回搜索结果
- 可以使用任何字段来作为排序的条件,从而返回排序后的查询结果
- 可以设定多个字段来排序
- 可以使用ASC或DESC关键字来设置查询结果是按升序或降序排列.(默认情况下,按升序排列)
- 可以添加where…like子句来设定条件
14.MYSQL group by语句
根据一个或多个列对结果集进行分组,在分组的列上可以使用count,sum,avg等函数
语法:
select column_name,function(column_name) form table_name where column_name operator value group by column_name;
15.MYSQL连接的使用
作用:从多个数据表中读取数据
可以在select,update和delete语句中使用join来联合多表查询
- inner join(内连接,或等值连接):获取两个表中字段匹配的记录
- left join(左连接):获取左表所有记录,即使右表没有对应匹配的记录
- right join(右连接):获取右表所有记录,即使左表没有对应匹配的记录
16.MYSQL null值处理
MYSQL提供了三大运算符:
- is null:当列的值为null时,返回true
- is not null:当列的值不为null时,返回true
- <==>:比较运算符(不同于=运算符),当比较的两个值相等或者都为null时返回true
17.MYSQL事务
MYSQL事务主要处理操作量大,复杂度高的数据
-
在MYSQL中是由使用来了innodb数据库引擎的数据库或表才支持事务
-
事务处理可以用来维护数据库的完整性,保证成批的SLQ语句要么全部执行,要么全部不执行
-
事务用来管理insert,update,delete语句
一般来说,事务必须满足4个条件:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durablity) -
原子性:一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节.事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样
-
一致性:在事务开始之前和事务结束之后,数据库的完整性没有被破坏
-
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
-
持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
在MYSQL命令行的默认设置下,事物都是自动提交的,即执行SQL语句后就会马上执行commit操作.
事务控制语句:
- begin或start transaction显示地开启一个事务
- commit或commit work,commit会提交事务,并使已对数据库进行的所有修改成为永久性的
- rollback或rollback work,回滚会结束用户的事务,并撤销正在进行的所有未提交的修改
- savepoint identifier,savepoint允许在事务中创建一个保存点,一个事务中可以有多个savepoint
- release savepoint identifier删除一个事务的保存点,当灭有指定的保存点时,执行该语句会抛出一个异常
- rollback to identifier把事务回滚到标记点
- set transaction用来设置事务的隔离级别
MYSQL事务处理的两种方法:
1.用begin、rollback、commit来实现
- begin开始一个事务
- rollback事务回滚
- commit事务确认
2.直接用set改变MYSQL的自动提交模式
- set autocommit=0 禁止自动提交
- set autocommit=1 开启自动提交
18.MYSQL alter命令
若需要修改数据表名或修改数据表字段时,需要使用alter命令
例:修改表名
alter table 表名 rename to 新表名;
19.MYSQL 索引
索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引;组合索引,即一个索引包含多个列
实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录
使用索引固然可以大大增高MYSQL的检索速度,但是过多的使用索引会降低更新表的速度(因为更新表时,MYSQL不仅要保存数据,还要保存索引文件)
创建索引:
(1)普通索引
create index index_name on tablename(username(length));
(2)修改表结构(添加索引)
alter table table_name add index index_name(columnName);
(3)创建表的时候直接指定
create table table_name(
stuId int not null,
stuName varchar(16) not null,
index [indexName] (username(length))
);
(4)删除索引
drop index [indexName] on tableName;
(5)唯一索引
create unique index indexName on tableName(username(length));
20.MYSQL临时表
临时表只在当前连接可见,当关闭连接时,MYSQL会自动删除表并释放所有空间
create temporary table student(
stuId int,
stuName varchar(20),
stuSex varchar(20),
stuAddress varchar(20)
);
使用查询直接创建临时表的方式:
create temporary table 临时表名 as select * from 旧表名;
21.MYSQL复制表
复制数据表的步骤:
- 使用show create table 命令获取创建数据表语句,该语句包含了原数据表的结构,索引等
MYSQL复制表的两种方式:
(1)只复制表结构到新表
create table 新表 select * from 旧表 where 1=2;
或
create table 新表 like 旧表;
(2)复制表结构集数据到新表
create table 新表 select * from 旧表;
22.MYSQL元数据
MYSQL的三种信息:
- 查询结果信息:select,update或delete语句影响的记录数
- 数据库和数据表的信息:包含了数据库及数据表的结构信息
- MYSQL服务器信息:包含了数据库服务器的当前状态,版本号等
23.MYSQL处理重复数据
防止表中出现重复数据:
可以在MYSQL数据表中设置指定的字段为primary key(主键)或者unique(唯一)索引来保证数据的唯一性
insert ignore into与insert into的区别是前者会忽略数据库中已经存在的数据,若数据库没有数据,就插入新的数据,若有数据的话就跳过这条数据.这样就可以保留数据库中已经存在的数据,达到在间隙中插入数据的母的
insert ignore into当插入数据时,在设置了记录的唯一性后,如果插入重复数据,将不返回错误,只是以警告形式返回.replace into如果存在primary 或unique相同的记录,则先删除,再插入新记录
统计重复数据:
- 确定哪一列包含的值可能会重复
- 在列选择列表使用count(*)列出的那些列
- 在group by 子句中列出的列
- having子句设置重复数大于1
过滤重复数据:
select distinct column_name form table_name;