MYSQL数据库基础复习大纲
数据库技术的发展历史:
一)人工管理阶段,特点:
1、数据不保存;
2、使用应用程序来管理数据--没有专用的软件对数据进行管理;
3、数据不共享;
4、数据不具有独立性
二)文件系统阶段,特点:
1、数据可以长期保存;
2、由文件系统管理数据;
3、共享性差,数据冗余大;
4、数据独立性差
三)数据库系统阶段,特点:
1、数据持久化保存;
2、数据结构化;
3、数据之间具有联系;
4、数据独立性高;
5、数据共享性高,冗余度低,易扩展
数据库分类:关系型数据库,非关系型数据库。
数据库系统的组成:数据库系统由数据库、数据库管理系统、数据库应用程序等组成。
DQL:数据查询语言,用于对数据进行查询 如:select
DML:数据操作语言,对数据进行增、删、改,如insert、update、delete
DDL:数据定义语言,进行数据库、表的管理等,如create、drop
DCL:数据控制语言,进行授权与权限回收,如grant(授权)、revoke(撤销)
TPL:事务处理语言,对事务进行处理,包括begin transaction(开始事务)、commit(提交)、rollback(回滚)
ER图关系:一对一,一对多,多对多
MySQL服务的启动与停止:
启动与停止MySQL服务方式一:服务管理器
启动与停止MySQL服务方式二:DOS命令:
1)启动MySQL服务的具体命令为:net start mysql
2)停止MySQL服务的具体命令为:net stop mysql
登录MySQL数据库
方式一:使用相关命令登陆
登录MySQL数据库可以通过DOS命令完成:
mysql –h hostname –u username –p
在上述命令中,mysql为登录命令,-h后面的参数是服务器的主机地址,-u后面的参数是登录数据库的用户名,-p后面是登录密码
方式二:Command Line Client登录
在开始菜单中依次选择【程序】【MySQL】【MySQL Server 5.5】【MySQL 5.5 Command Line Client】打开MySQL命令行客户端窗口,此时就会提示输入密码,密码输入正确后便可以登录到MySQL数据库
MySQL常用命令

查看所有的数据库:SHOW DATABASES;
创建数据库:CREATE DATABASE 数据库名 CHARSET=utf8;
选择操作数据库:USE 数据库名;
查看当前操作的数据库:SELECT DATABASE();
删除数据库:DROP DATABASE 数据库名称;
常用数据类型:
整数:INT,BIT,BIGINT
小数:decimal,double,float
字符串:varchar,char,TEXT,LONGTEXT
日期时间: date, time, datetime
创建数据表:
CREATE TABLE 数据表名(
字段名1 数据类型 [列级约束条件] [默认值],
字段名2 数据类型 [列级约束条件] [默认值],
……
);
建表注意事项:
(1)必须指定数据表名(不区分大小写),且不能使用SQL中的关键字,如: CREATE、INSERT、DROP。
(2)如果数据表中有多个字段,每个字段的定义语句必须要用逗号隔开。
查看所选数据库中的数据表:SHOW TABLES;
查看数据表结构:
方式一:DESCRIBE/DESC 表名;
方式二:SHOW CREATE TABLE 表名;
方式三:show [full] columns from 数据表;
修改数据表结构:
修改数据表名
ALTER TABLE 原表名 RENAME [TO] 新表名;
修改字段名
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
添加字段
表末尾字段
ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件];
设为表的第一字段
#FIRST:用于将新添加的字段设置为表中的第一个字段
语法:ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] FIRST;
指定位置添加字段
#AFTER:用于将新添加的字段添加到“已存在的字段名”的后面。
语法:ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] AFTER 已存在的字段名;
修改字段的数据类型
单纯修改数据类型
ALTER TABLE 表名 MODIFY 字段名 新数据类型;
修改数据类型并排列在第一个
ALTER TABLE 表名 MODIFY 要修改位置字段名 数据类型 FIRST;
将要修改位置的字段插入到指定字段的后面
ALTER TABLE 表名 MODIFY 要修改位置字段名 数据类型 AFTER 指定字段名;
删除字段:
ALTER TABLE 表名 DROP 要删除的字段名;
删除数据表: DROP TABLE 表名;
主键约束-单字段主键
单字段主键仅由一列字段组成,创建单字段主键的SQL语句格式分为以下两种情况。
方式一:定义字段的同时指定主键
字段名 数据类型 PRIMARY KEY,
方式二:定义完所有字段列之后指定主键
PRIMARY KEY (设置主键的字段名);
主键约束-多字段联合主键
多字段联合主键由表中的多个字段组成,指定联合主键语法格式如下:
PRIMARY KEY(字段名1, 字段名n, ……),
唯一约束 - UNIQUE
唯一约束可以确保表中一列或多列不出现重复值,唯一约束的值允许为空,但是只能出现一个空值。唯一约束的语法和主键的语法规则一样有两种。
方式一:定义字段的同时指定唯一约束
字段名 数据类型 UNIQUE;
方式二:定义完所有字段列之后指定唯一约束
UNIQUE(设置唯一约束的字段名);
非空约束 – NOT NULL
非空约束指的是字段的值不能为空,对于使用了非空约束的字段,如果用户添加数据时没有指定值,数据库系统会报错。
语法:字段名 数据类型 NOT NULL;
默认约束 - DEFAULT
默认约束用于指定某一字段的默认值
语法:字段名 数据类型 DEFAULT 默认值;
自增约束 - AUTO_INCREMENT
在数据表中,若想为表中插入的新记录自动生成唯一的ID,可以使用AUTO_INCREMENT约束来实现。默认AUTO_INCREMENT的初始值是1,每新增一条记录,字段值自动加1。
注意:一个表只能有一个字段使用AUTO_INREMENT约束,且该字段必须为主键。
语法:字段名 数据类型 主键约束 自增约束;
外键约束 – FOREIGN KEY
外键用来在两个表的数据之间建立链接,外键可以引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一性约束。
注意事项:
1、添加外键要保证两个表必须为innoDB存储引擎。
2、对于两个具有关联关系的表,关联字段的数据类型必须匹配。
3、一个表的外键的值可以为空值,若不为空值,使用外键约束字段的值就必须等于另一个表中主键的值。
方式一:新建数据表的同时添加外键约束
[CONSTRAINT 外键名 ] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名);
方式二:为已创建好的数据表添加外键约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名);
删除外键约束:
ALTER TABLE 表名 DROP FOREIGN KEY 外键名;
添加数据:
为所有字段添加数据方式一
INSERT INTO 数据表名 (字段1, 字段2, .....) VALUES(值1, 值2, ......);
为所有字段添加数据方式二
语法格式:INSERT INTO 数据表名 VALUES(值1,值2,....);
给数据表指定字段添加数据:
INSERT INTO 数据表名(指定要添加数据的字段名) VALUES (为指定字段添加的值)
同时添加多条数据:
INSERT INTO 表名 VALUES( 值1, 值2, …… ),(值1,值2, ……);
INSERT INTO 表名(指定的字段) VALUES( 值1, 值2, …… ),(值1,值2, ……);
添加数据注意事项:
1、插入的数据类型与字段的数据类型相同。
2、数据的大小应该列的规定范围内。
3、在values中列出的数据位置必须与被加入的列的排列位置相对应。
4、字符类型和日期类型数据应该包含在单引号中。
5、插入空值:不指定或insert into table value(null)
6、如果要插入所有字段可以省写列名,直接按表中字段的顺序写对应的值。
修改数据表数据:
更新数据是指对表中存在的记录进行修改
UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ….. [WHERE 条件表达式];
参数说明如下:
SET子句:必选项,用于指定表中要修改的字段名及其字段值。其中的值可以是表达式,也可以是该字段所对应的默认值。如果指定默认值则使用关键字DEFAULT指定。
WHERE子句:可选项,指定更新数据需要满足的条件,如果不指定该子句,那么UPDATE语句会更新表中的所有行。
删除数据表数据
删除数据是指对表中存在的记录进行删除
DELETE FROM 表名 [WHERE 条件表达式] ;
在DELETE语句中如果没有使用WHERE子句来指定删除的条件,则会将表中的所有记录都删除。
TRUNCATE TABLE 表名 ;
DELETE与TRUNCATE的区别
(1)DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句
(2)使用DELETE语句时,每删除一条记录都会在日志中记录,而使用TRUNCATE语句时,不会在日志中记录删除的内容,因此TRUNCATE语句的执行效率比DELETE语句高。
(3)DELETE语句后面可以跟WHERE子句,通过指定WHERE子句中的条件表达式只删除满足条件的部分记录,而TRUNCATE语句只能用于删除表中的所有记录
(4)使用TRUNCATE语句删除表中的数据,再向表中添加记录时,自动增加字段的默认初始值重新由1开始,使用DELETE语句删除表中所有记录,再向表中添加记录时,自动增加字段的值为删除时该字段的最大值加1。
完整语法格式
SELECT [DISTINCT] * | <字段名1, 字段名2, 字段名3,……>
FROM 表名
[WHERE 条件表达式1]
[GROUP BY 字段名 [HAVING 条件表达式2]]
[ORDER BY 字段名 [ASC|DESC]]
[LIMIT [OFFSET] 记录数]
“字段1,字段2…”表示从表中查询的指定字段,星号(“*”)通配符表示表中所有字段,两者为互斥关系,任选其一。“DISTINCT”是可选参数,用于剔除查询结果中重复的数据
表示从指定的表中查询数据
“WHERE”是可选参数,用于指定查询条件
“GROUP BY”是可选参数,用于将查询结果按照指定字段进行分组,“HAVING”也是可选参数,用于对分组后的结果进行过滤。
“ORDER BY”是可选参数,用于将查询结果按照指定字段进行排序。排序方式由参数ASC或DESC控制,其中ASC表示按升序进行排列,DESC表示按降序进行排列。如果不指定参数,默认为升序排列。
“LIMIT”是可选参数,用于限制查询结果的数量。LIMIT后面可以跟2个参数,第一个参数“OFFSET”表示偏移量,如果偏移量为0则从查询结果的第一条记录开始…以此类推。如果不指定OFFSET,其默认值为0。第二个参数“记录数”表示返回查询记录的条数。
简单数据记录查询
语法结构:SELECT * | 字段列表 FROM 数据表名;
数据查询去重
语法:SELECT DISTINCT 字段列表 FROM 数据表名;
关系运算条件查询
语法:SELECT * | 字段列表 FROM 数据表名 WHERE 字段名 [> | < | = | !=] 指定参数;
大于:<
小于: >
不等于: != <>
大于等于: >=
小于等于: <=
逻辑运算条件查询
语法:SELECT * | 字段列表 FROM 数据表名 WHERE 条件1 [AND | OR | NOT] 条件2;
AND( && ):逻辑与(所有条件同时为真,结果才为真)
OR( || ):逻辑或(所有条件同时为假,结果才为假)
NOT( ! ):逻辑非(对结果取反,真即为假,假即为真)
范围条件查询
SELECT * | 字段列表 FROM 数据表名 WHERE 字段名 [NOT] IN (值1,值2,…..);
SELECT * | 字段列表 FROM 数据表名 WHERE 字段名 [NOT] BETWEEN 值1 AND 值2;
空值条件查询
语法:SELECT * | 字段列表 FROM 数据表名 WHERE 字段名 IS [NOT] NULL;
模糊条件查询
语法:SELECT * | 字段列表 FROM 数据表名 WHERE 字段名 [NOT] LIKE ‘匹配字符串’;
百分号(%)通配符:可以匹配任意长度的字符串,包括空字符串
下划线(_)通配符:下划线通配符只匹配单个字符, 如果要匹配多个字符,需要使用多个_符。
高级查询
聚合函数-常用聚合函数
查询统计数量
语法:select count(*) from 数据表 [where 条件表达式];
查询统计求和
语法:select sum(需要求和的字段) from 数据表 [where 条件表达式];
查询统计平均
语法:select avg(需要求平均值的字段) from 数据表 [where 条件表达式];
查询求最大值
语法:select MAX(求最大值的字段) from 数据表 [where 条件表达式];
查询求最小
语法:select MIN(求最小值的字段) from 数据表 [where 条件表达式];
排序
语法:SELECT * FROM 数据表名 [WHERE 条件表达式]
ORDER BY 字段1 [ASC | DESC] [, 字段2 [ASC | DESC] , …] ;
注意事项:
排序字段之间必须用逗号隔开。
排序规则按照从左至右依次排序,当第一个字段值相同是,再按照第二个字段的值排序,以此类推。
每个字段都可以指定按照升序或降序排序。
分页查询LIMIT
语法:SELECT * FROM 表名 LIMIT [位置偏移量,] 记录数 -- 偏移量从0开始,代表的是从第一条数据开始
分组查询
语法:SELECT 字段名 FROM 表名 [where 条件表达式] GROUP BY 字段名 [HAVING 条件表达式];
连接查询是指同时对多个表进行查询,当查询的字段数据来自不同的表就可以使用连接查询来完成。
分类:
1.内连接查询
2.外连接查询(左外连接查询,右外连接查询)
3.复合条件连接查询
内连接(INNER JOIN)又称简单连接或自然连接,使用比较运算符对两个表中的数据进行比较,查询两个表中符合条件的共有记录。
SELECT 查询字段 FROM 表1 INNER JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
外连接查询
在内连接查询中返回的查询结果只有符合查询条件和连接条件的数据,然而,有些时候我们可能需要返回某个表中的所有记录,此时就需要用到外连接查询。
左连接-LEFT JOIN
左连接的结果包括左表的所有记录,和所有满足连接条件的记录。如果左表的某条记录在右表中不存在,则在右表中显示为空。
以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充。
语法:SELECT 查询字段 FROM 表1 LEFT JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
说明:left join 就是左连接查询关键字;on 就是连接查询条件;表1 是左表;表 2 是右表。
右链接-RIGHT JOIN
右连接与左连接正好相反,返回右表中所有指定的记录和所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。
以右表为主根据条件查询左表数据,如果根据条件查询左表数据不存在使用null值填充。
语法:SELECT 查询字段 FROM 表1 RIGHT JOIN 表2 ON 表1. 字段1 = 表2. 字段2;
说明:right join 就是左连接查询关键字;on 就是连接查询条件;表1 是左表;表2 是右表。
子查询
子查询是指一个select查询语句中,嵌套了另一个select语句,那么内部的select语句称之为子查询语句,外部的select语句则称为主查询。通常情况下子查询是辅助主查询的,要么充当条件,要么充当数据源;
注意事项:
1.子查询需要嵌入到主查询中;
2.子查询是可以独立存在的语句,是一条完整的 select 语句;
3.在执行查询语句时,首先会执行子查询中的语句,然后将返回的结果作为外层查询的过滤条件;
联合查询 union
select 查询字段 from ……
union
select 查询字段 from ……
union all -- 查询保留所有的结果
union DISTINCT -- 查询结果去重
union -- 查询结果去重
事务:事务就是用户定义针对数据库一系列操作的SQL语句,它可以由一条或多条SQL语句组成,同一个事务的操作具备同步的特点,即事务中的语句要么都执行,要么都不执行,它是一个不可分割的工作执行单元。
事务的四大特性:
1、持久性
2、原子性
3、一致性
4、隔离性
开启事务: START TRANSACTION; 或 BEGIN;
执行SQL语句:SQL语句
结束: 提交事务 COMMIT; 或 取消事务(回滚) ROLLBACK;
存储过程
语法:
CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
存储过程体(一组合法的SQL语句);
END;
参数列表:包含三部分
参数模式 、参数名、 参数类型
举例:IN stuname VARCHAR(20)
参数模式:IN:该参数可以作为输入,也就是该参数需要调用方传入值。
视图是从基本表中导出来的表,可以像操作基本表一样操作视图。
视图的优点:简化查询语句;安全性;逻辑数据独立性
创建视图简单语法:
CREATE VIEW 视图名称:
AS
SELECT 字段名…… FROM 数据表 [WHERE 条件表达式];
查看表/视图结构
1、查看数据表字段信息
语法:DESC 表名/视图名;
2、查看表/视图的基本信息
语法:SHOW TABLE STATUS LIKE '视图名'
3、查看创建语句
语法:SHOW CREATE VIEW 表名/视图名;
4、查看结构
语法:show full columns from 表名/视图名
修改视图简单语法:
1、使用CREATE OR REPLACE VIEW语句修改视图
CREATE OR REPLACE VIEW 视图名称
AS
SELECT 字段名…… FROM 数据表 [WHERE 条件表达式];
2、使用ALTER语句修改视图
ALTER VIEW 视图名称
AS
SELECT 字段名…… FROM 数据表 [WHERE 条件表达式];
删除视图
语法:DROP VIEW 视图名;
视图插入数据,跟插入单表数据一样
语法:insert into 视图名(字段名) values(字段值);
视图修改数据
语法:update 视图名 set 字段名1 = 值1,字段名2 = 值2 [where 条件表达式];
视图删除数据
delete from 视图名 [where 条件表达式];
