MYSQL数据库

MYSQL数据库

第四章 DML和事务处理

MySQL的存储引擎

存储引擎的类型

MyISAM、InnoDB 、Memory、CSV等9种

MyISAM与InnoDB类型主要区别
名称 InnoDB MyISAM
事务处理 支持 不支持
数据行锁定 支持 不支持
外键约束 支持 不支持
全文索引 不支持 支持
表空间大小 较大 **,2****倍** 较小

适用场合 使用MyISAM: 不需事务,空间小,以查询访问为主 使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制

查看当前默认存储引擎

SHOW VARIABLES LIKE 'storage_engine%';

修改存储引擎

修改my.ini配置文件

default-storage-engine= InnoDB

设置表的存储引擎

CREATE TABLE 表名( #省略代码)ENGINE=存储引擎;

示例: CREATE TABLE myisam ( id INT(4))ENGINE=MyISAM;

数据表的存储位置

MyISAM类型表文件:*.frm:表结构定义文件 .MYD:数据文件. MYI:索引文件

InnoDB类型表文件:*.frm:表结构定义文件 ibdata1文件

存储位置因操作系统而异,可查my.ini

DML语句------插入单条数据记录

INSERT INTO 表名 [(字段名列表)] VALUES (值列表);

注意

字段名是可选的,如省略则依次插入所有字段

多个列表和多个值之间使用逗号分隔

值列表和字段名列表一一对应

如插入的是表中部分数据,字段名列表必填

示例: INSERT INTO student(loginPwd,studentName,gradeId,phone,bornDate)VALUES('123','黄小平',1,'13956799999','1996-5-8');

DML语句------插入多条数据记录

INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),......,(值列表n);

示例: INSERT INTO subject(subjectName,classHour,gradeID)VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

DML语句------将查询结果插入新表

示例: CREATE TABLE phoneList( SELECT studentName,phone FROM student);

如新表已存在,将会报错!

将查询结果插入新表

CREATE TABLE 新表(SELECT 字段1,字段2...... FROM 原表);

如新表已存在,不能重复创建

编写SQL语句实现从学生表提取姓名、手机号两列数据存储到通讯录表中

CREATE TABLE phoneList(SELECT studentName,phoneFROM student);

数据更新

更新数据记录

UPDATE 表名 SET 字段1=值1,字段2=值2,...,字段n=值n [WHERE 条件];

示例: UPDATE student SET sex = '女';UPDATE student SET address = '北京女子职业技术学校家政班'WHERE address = '北京女子职业技术学校刺绣班';

数据删除

删除数据记录

DELETE FROM 表名 [WHERE条件];

TRUNCATE TABLE 表名;

TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快

示例: DELETE FROM student WHERE studentName = '王宝宝';TRUNCATE TABLE student;

事务

什么是事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作

多个操作作为一个整体向系统提交,要么都执行、要么都不执行

事务是一个不可分割的工作逻辑单元

事务的特性

事务必须具备以下四个属性,简称ACID 属性

1.原子性(Atomicity)

事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行

2.一致性(Consistency)

当事务完成时,数据必须处于一致状态

3.隔离性(Isolation)

并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务

4.持久性(Durability)

事务完成后,它对数据库的修改被永久保持

如何创建事务

MySQL中支持事务的存储引擎有InnoDB和BDB

开始事务 BEGIN ;或START TRANSACTION;

提交事务 COMMIT ;

回滚(撤销)事务 ROLLBACK ;

自动关闭和开启事务

默认情况下,每条单独的SQL语句视为一个事务

关闭默认提交状态后,可手动开启、关闭事务

关闭/开启自动提交状态

SET autocommit = 0|1;

值为0:关闭自动提交

值为1:开启自动提交

注意: 关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务

演示示例4:关闭自动提交

SET autocommit=0; 关闭自动 提交,以下视为一个事务

/--转账:张三的账户减少500元,李四的账户增加500元--/

UPDATE bank SET currentMoney=currentMoney-500

WHERE customerName='张三';

UPDATE bank SET currentMoney=currentMoney+500

WHERE customerName='李四';

COMMIT; 提交事务

UPDATE bank SET currentMoney=currentMoney-1000

WHERE customerName='张三';

ROLLBACK; 回滚事务

SET autocommit = 1; 开启自动 提交,恢复默认状态

第五章 SQL查询(一)

什么是查询

查询产生一个虚拟表

看到的是表形式显示的结果,但结果并不真正存储

每次执行查询只是从数据表中提取数据,并按照表的形式显示出来

查询语法

SELECT <列名>

FROM <表名>

WHERE \<查询条件表达式\>

ORDER BY \<排序的列名\>\[ASC或DESC\]

列名称 表 名 过滤条件 排序条件
SELECT SCode **,StudentName ,**Address FROM****Students WHERE****SSEX = 0 ORDER BY****SCode

SELECT SCode,StudentName,Address

FROM Students

WHERE SSEX = 0

ORDER BY SCode

示例:

查询全部的行和列

SELECT * FROM Students

SELECT * FROM result

查询部分列

SELECT StudentName, Address FROM Students

查询部分行和列

SELECT StudentName ,Grade FROM StudentsWHERE Address = '北京' 查询 "北京"地区的学生姓名和年级

SELECT StudentName,Address FROM StudentsWHERE sex=1 查询女学生姓名和地址

数据查询-列别名

使用AS命名列

SELECT StudentNo AS 学生编号,StudentName AS 学生姓名,

Address AS 学生地址

FROM Students

WHERE Address <> '河南新乡'

数据查询-空行、常量列

查询空行

SELECT StudentName FROM Students WHERE Email IS NULL

原来有数据,但数据被清除的列如何查询?

使用常量列

SELECT 姓名=StudeentName,地址= Address , '北京新兴桥' AS 学校名称 FROM Students

Null 和 ' '的区别

null是空值,表示未被赋值。

' '是空字符串,表示非空,只不过值是一个非空字符串而已。

分页查询-limit

在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?

LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数

LIMIT 接受一个或两个数字参数。参数必须是一个整数常量

第一个参数指定第一个返回记录行的偏移量

第二个参数指定返回记录行的最大数目

初始记录行的偏移量是 0(而不是 1)

数据查询-限制行数

显示第一页,每页显示5行数据

SELECT StudentName, Address

FROM Students limit 0,5

显示第二页,每页显示5行数据

SELECT StudentName, Address

FROM Students limit 5,5

相关推荐
lang201509288 分钟前
Spring Boot SQL数据库全攻略
数据库·spring boot·sql
EndingCoder40 分钟前
MongoDB基础与Mongoose ODM
服务器·javascript·数据库·mongodb·中间件·node.js
赋能大师兄1 小时前
SQLITE数据库完成数据增删改查
数据库·sqlite
一个天蝎座 白勺 程序猿2 小时前
深度解析:通过ADO.NET驱动Kdbndp高效连接与操作Kingbase数据库
数据库·.net·wpf·kingbase·金仓数据库
AI科技星2 小时前
垂直原理:宇宙的沉默法则与万物运动的终极源头
android·服务器·数据结构·数据库·人工智能
Warren982 小时前
复习MySQL
数据库·windows·tcp/ip·mysql·ubuntu·ssh·ansible
黑金IT2 小时前
3D虚拟人模型转换的完整指南
服务器·数据库·3d
凌~风2 小时前
数据库原理实验报告:在ider里搭建mysql数据库
数据库·mysql·实验报告
keke_俩个科2 小时前
ShardingSphere分库分表基础配置与使用说明
java·数据库·分布式·spring
2401_841495642 小时前
【数据库开发】个人信息管理的数据库创建以及查询方法(最简单)
数据库·sql·mysql·sqlite·数据库开发·个人数据库·管理个人信息