目录
实训第一天
所用的软件
懒人安装,一直next
附上个安装教程链接:P7 007_MySQL基础_MySQL软件的安装
直接解压就行,附带有注册码
相关概念
1.DB:数据库,保存一组有组织的数据的容器
2.DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据
3.SQL:结构化查询语言,用于和DBMS通信的语言
4. 存储引擎:如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法
5. 字符序(Collation):在同一字符集内字符之间的比较规则。 只有确定字符序后,才能在一个字符集上定义什么是等价的字符, 以及字符之间的大小关系。每个字符序唯一对应一种字符集,一 个字符集可以对应多种字符序,其中有一个是默认字符序 (Default Collation)。
基本操作
查看版本:select version;
查看数据库: show databases;
设置当前的数据库:use 数据库名;
显示数据库中的表信息:show tables;(还可以show tables from 数据库)
查看具体的表结构:describe user;(或者 desc 表名)
存储引擎:show engines;
数据库的创建:CREATE
创建表:create table 表名(
列名 列类型;
列名 列类型;
…
)
一些暂时看不懂的东西
• Connectors:用来与客户端应用程序建立连接的数据库接口
• Management Services & Utilities:系统管理和服务控制相关的 辅助工具
• Connection Pool:负责处理与用户访问有关的各种用户登录、线 程处理、内存和进程缓存需求
• Sql Interface:提供从用户接受命令并把结果返回给用户的机制
• Parser:对SQL语句进行语法分析和解析,构造一个月来执行查询 的数据结构
• Optimizer:优化查询语句,以保证数据检索动作的效率达到或者 非常接近最最优。使用一种“选取-投影-联结”策略来处理查询, 即先根据有关的限制条件进行选取(Select 操作)以减少将要处理 的元组个数,再进行投影以减少被选取元组力的属性字段的个数, 最后根据连接条件生产最终的查询结果
• Caches & Buffers:保证使用频率最高的数据或结构能够以最有效 率的方式被访问,缓存的类型有:表缓存、记录缓存、键缓存、权 限缓存、主机名缓存等。
• character_set_client:客户端(MySQL命令窗口)的字符集 (未加说明的是latin1字符集)
• character_set_connection:连接层字符集
• character_set_database:当前选中数据库的字符集
• character_set_filesystem:MySQL服务器文件系统的字符集, 默认的字符集为binary
• character_set_results:结果集的字符集
• character_set_server:MySQL服务器的字符集
• character_set_system:元数据(字段名、表名、数据库名等)字 符集,默认的字符集为utf8
数据库与数据表管理
数据库的设计
主键(Primary Key) :数据库表要求表中的每一行记录都必须是唯一的,即在同一 张表中不允许出现完全相同的两条记录。在设计数据库时,为 了保证记录的“唯一性”,最为普遍、最为推荐的做法是为表 定义一个主键
实体间的关系与外键 :
约束: Constraint,是定义在表上的一种强制规则。
约束类型:
创建表
表是数据库中最重要的逻辑对象,是存储数据的主要对象
数据类型
数值类型:
日期与时间类型:
字符串类型:
特殊字符序列
一些细节:
• PRIMARY KEY,指定字段为主键。
• AUTO_INCREMENT,指定字段为自动增加字段。
• INDEX,为字段创建索引。
• NOT NULL,字段值不允许为空。
• NULL,字段值可以为空。
• COMMENT,设置字段的注释信息。
• DEFAULT,设置字段的默认值。
复制表
方法一:在create table语句的末尾添加like子句,可以 将源表的表结构复制到新表中,语法格式如下:
create table 新表名 like 源表
方法二:在create table语句的末尾添加一个select语句, 可以实现表结构的复制,甚至可以将源表的表记录拷贝到新表中:
create table 新表名 select * from 源表
删除表
使用DROP TABLE语句删除表,语法如下:
DROP TABLE 表名
修改表
- 使用ALTER TABLE语句修改表的结构,包括添加列、修 改列属性和删除列等操作
ALTER TABLE 表名 ADD 列名 数据类型和长度 列属性
ALTER TABLE 表名 MODIFY 列名 新数据类型和长度 新列 属性
ALTER TABLE 表名 DROP COLUMN 列 - 使用ALTER TABLE语句向表中添加列的基本语法如下:
ALTER TABLE 表名 ADD 列名 数据类型和长度 列属性 - 使用ALTER TABLE语句在表Emp中增加一列,列名为Tele,数据类型为varchar,长度为50,列属性为允许空,具体语句如下:
ALTER TABLE Emp ADD Tele VARCHAR(50) NULL - 使用ALTER TABLE语句删除列的基本语法如下:
ALTER TABLE 表名 DROP COLUMN 列名 - 使用ALTER TABLE语句在表Emp中删除Tele列。具体语句如下 :
ALTER TABLE Emp DROP COLUMN Tele
修改约束条件
添加约束条
向表的某个字段添加约束条件的语法格式如下(其中约束类型可以 是唯一性约束、主键约束及外键约束)。
alter table 表名 add constraint 约束名 约束类型 (字段名)
删除约束条件
• 删除表的主键约束条件语法格式比较简单,语法格式如下:
alter table 表名 drop primary key
• 删除表的外键约束时,需指定外键约束名称,语法格式如下 (注意需指定外键约束名):
alter table 表名 drop foreign key 约束名
• 删除表字段的唯一性约束,实际上只需删除该字段的唯一性索引即可,语法格式如下(注意需指定唯一性索引的索引名):
alter table 表名 drop index 索引名
贴一张示范:
数据操作与事务管理
数据操作语言
数据操作语言 –Data Manipulation Language ,简称DML,主要用来实现对 数据库表中的数据进行操作。
–数据操作语言主要包括如下几种:
• 增加行数据:使用INSERT语句实现
• 修改行数据:使用UPDATE语句实现
• 删除行数据:使用DELETE语句实现
插入数据
使用INSERT语句向表中插入数据,语法结构如下:
INSERT INTO table [(column [, column…])]
VALUES (value [, value…]);
注意:
插入空值NULL
–隐含法: 在列名列表中忽略该列。
SQL> INSERT INTO dept (deptno, dname ) 2 VALUES (60, ‘MIS’);
–显示法: 指定 NULL关键字或者’’。
SQL> INSERT INTO dept 2 VALUES (70, ‘FINANCE’, NULL);
插入日期值
–SYSDATE() 函数记录当前日期和时间
批量插入数据
使用insert语句一次性地向表批量插入多条记录
INSERT INTO 表名[(字段列表)] VALUES
(值列表1),
(值列表2),
…
(值列表n);
通过子查询插入多行数据
INSERT INTO 表名[(列名1[,列名2,…,列名n])] 子查询 ;
–不必书写values子句
–INSERT子句和数据类型必须和子查询中列的数量和类型相匹 配中列的数量
修改数据
修改数据使用UPDATE子句完成,语法结构如下:
运算符以及功能表
删除数据
使用 DELETE 语句删除表中满足条件的行记录
DELETE FROM table
[WHERE condition];
截断表
TRUNCATE TABLE table;
TRUNCATE TABLE emp
TRUNCATE和DELETE区别
–TRUNCATE是DDL,只能删除表中所有记录,释放存储空间, 使用ROLLBACK不可以回滚。
–DELETE是DML,可以删除指定记录,不释放存储空间,使用 ROLLBACK可以回滚。
事务处理
概念
事务:Transaction,也称工作单元,是由一个或多个SQL语句所组成的操 作序列,这些SQL语句作为一个完整的工作单元,要么全部 执行成功,要么全部执行失败。在数据库中,通过事务来 保证数据的一致性。
事务处理语言:Transaction Process Language ,简称TPL, 主要用来对组成事务的DML语句的操作结果进行确认或取消。 确认也就是使DML操作生效,使用提交(COMMIT)命令实现; 取消也就是使DML操作失效,使用回滚(ROLLBACK)命令实现。
组成与特征
组成
在数据库中,事务由一组相关的DML或SELECT语句,加上一 个TPL语句(COMMIT、ROLLBACK)或一个DDL语句(CREATE、 ALTER、DROP、TRUNCATE等)或一个DCL(GRANT、REVOKE) 语句
特征
– 原子性(Atomicity) • 事务就像“原子”一样,不可被分割,组成事务的DML操作语 句要么全成功,要么全失败,不可能出现部分成功部分失败 的情况。
– 一致性(Consistency) • 一旦事务完成,不管是成功的,还是失败的,整个系统处于 数据一致的状态。
– 隔离性(Isolation) • 一个事务的执行不会被另一个事务所干扰。比如两个人同时 从一个账户从取钱,通过事务的隔离性确保账户余额的正确 性。
– 持久性(Durability) • 也称为永久性,指事务一旦提交,对数据的改变就是永久的, 不可以再被回滚
处理方法
MySQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现 begin开始一个事务 rollback事务回滚 commit 事务提交
2.直接用set来改变MySQL的自动提交模式 MySQL默认是自动提交的,也就是你提交一个sql,就直接 执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理
注意:
当用set autocommit = 0 的时候,以后所有的sql都 将作为事务处理,直到用commit确认或 rollback结束,注意 当结束这个事务的同时也开启了新的事务!按第一种方法只将 当前的做为一个事务!
隐式结束
– 隐式提交:当下列任意一种情况发生时,会发生隐式提交
• 执行一个DDL(CREATE、ALTER、DROP、TRUNCATE、RENAME) 语句;
• 执行一个DCL(GRANT、REVOKE)语句;
– 隐式回滚:当下列任意一种情况发生时,会发生隐式回滚
• 客户端强行退出
• 客户端连接到服务器端异常中断
• 系统崩溃
设置保存点:
如果在一个事务内,想要回滚到指定位置,不是回滚到事务的起始点,可以通过保存点(SAVEPOINT)来实现。(不结束事务的执行)
–SAVEPOINT s a v e p o i n t n a m e ;–定义一个保存点语句;
–ROLLBACK TO s a v e p o i n t n a m e ;–回滚到指定保存点
举例
简单查询
相关概念
1.数据查询语言(DQL:Data Query Language):语句主要包括 SELECT,用于从表中检索数据。
2.数据操作语言(DML:Data Manipulation Language):语句主 要包括INSERT,UPDATE和DELETE,用于添加,修改和删除表中的 行数据。
3.事务处理语言(TPL:Transaction Process Language): 语句 主要包括COMMIT和ROLLBACK,用于提交和回滚。
4. 数据控制语言(DCL:Data Control Language):语句主要包括 GRANT和REVOKE,用于进行授权和收回权限。
5.数据定义语言(DDL:Data Definition Language):语句主要包括CREATE、DROP、ALTER,用于定义、销毁、修改数据库对象。
6.关键字(Keyword):SQL语言保留的字符串,例如,SELECT 和FROM都是关键字。
7.语句(statement):一条完整的SQL命令。例如,SELECT * FROM dept 是一条语句。
8. 子句(clause):部分的SQL语句,通常是由关键字加上其它 语法元素构成,例如,SELECT * 是一个子句,FROM table也 是一个子句
一些语句
选择所有列:
SELECT * FROM dept;
选择指定列:
SELECT deptno,dname,loc FROM dept;
算术运算符举例:
SELECT ename, sal, sal+300 FROM emp;
消除重复行:
SELECT DISTINCT deptno FROM emp;
空值NULL
–空值是指一种无效的、未赋值、未知的或不可用的值。
–空值不同于零或者空格
–任何包含空值的算术表达式运算后的结果都为空值 NULL
SELECT ename, job, sal, comm FROM emp;
列别名
–用来重新命名列的显示标题
–如果SELECT语句中包含计算列,通常使用列别名来重新定义列标题。
• 使用列别名的方法
–方式1:列名 列别名
–方式2:列名 AS 列别名
• 以下三种情况列别名两侧需要添加双引号
–列别名中包含有空格
–列别名中要求区分大小写
–列别名中包含有特殊字符
列别名使用
选择限定数据行
SELECT [DISTINCT] {*| column | expression [alias], …}
FROM table
[WHERE condition(s)];
运算符优先级:
ORDER BY子句
SELECT [DISTINCT] { * | 列名 |表达式 [别名][,…]}
FROM 表名
[WHERE 条件]
[ORDER BY {列名|表达式|列别名|列序号} [ASC|DESC],…];
注意:
–可以按照列名、表达式、列别名、结果集的列序号排序
–ASC: 升序,默认值 DESC: 降序
–ORDER BY 子句必须写在SELECT语句的最
限制记录的行数
select 字段列表 from 数据源 limit [start,]length;
注意:
1.limit接受一个或两个整数参数。start表示从第几行记录开始输出,length表示输出的记录行数。
2.表中第一行记录的start值为0(不是 1)
常用函数
数学函数
字符串函数
日期和时间函数
流程控制函数
其他函数
多表连接
基本语法:
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;(连接条件)
笛卡尔积
第一个表中的所有行和第二个表中的所有行都发生连接
写法:
SELECT emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
FROM emp, dept
等值连接
SELECT emp.empno, emp.ename, emp.deptno,
dept.deptno, dept.loc
FROM emp, dept
WHERE emp.deptno=dept.deptno