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

相关推荐
zpjing~.~23 分钟前
Mongo 分页判断是否有下一页
数据库
2401_8576009524 分钟前
技术与教育的融合:构建现代成绩管理系统
数据库·oracle
秋恬意1 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
潇湘秦1 小时前
一文了解Oracle数据库如何连接(1)
数据库·oracle
雅冰石1 小时前
oracle怎样使用logmnr恢复误删除的数据
数据库·oracle
web前端神器1 小时前
mongodb给不同的库设置不同的密码进行连接
数据库·mongodb
从以前1 小时前
Berlandesk 注册系统算法实现与解析
数据库·oracle
Muko_0x7d21 小时前
Mongodb
数据库·mongodb
Ren_xixi1 小时前
redis和mysql的区别
数据库·redis·mysql
m0_748233882 小时前
SQL语句整理五-StarRocks
数据库·sql