学习目的
- 了解什么是数据库
- 掌握Mysql数据库基本命令的语法结构与使用
- 了解Mysql数据表设计与数据库设计
- 了解Mysql的数据引擎及实现原理
- 掌握Mysql索引与视图的实现原理
一.数据库概述
1.1 数据库
- 概念
数据库全称DataBase,简称DB,通常是一个或一组文件的数据容器(也是数据仓库)。数据库中存储了大量的数据,为了将大量数据更好的分门别类,引入了数据表的概念来存储不同的数据。数据库由表构成,每一个表保存了一些符合特定规格的数据。数据库实际上是在硬盘上存储的数据文件。 - 数据库管理系统
用来管理数据库软件的系统称为数据库管理系统,全称为DataBase Management System,简称DBMS。常用的数据库管理系统有:Oracle、SQL Server、MySql、Sybase、DB2、informix、interbase、PostgreSql 等。 - 分类
- 关系型数据库:建立在关系模型基础上的数据库,常见的关系型数据库有Oracle、MySQL、DB2、SQL Server、Access;
- 非关系型数据库:用于存储和检索数据的非关系数据库系统,常见的非关系型数据库有MongoDB、CouchDB、ArangoDB、Couchbase、Cosmos DB、Domino、MarkLogic、OrientDB。
1.2 SQL
- 概念
SQL全称Structured Query Language,意为结构化查询语言。SQL是用来与数据库进行通信交流的一套语言标准,SQL是一套标准。 - 执行
SQL语句在执行时,实际上在内部会由DBMS先进行编译,然后再执行sql。 - 分类
- 数据查询语言(DQL):Data Query Language,与数据库数据进行查询操作,代表关键字 select,数据库开发中最重要的操作;
- 数据操纵语言(DML):Data Manipulation Language,对数据库表中的数据进行交流操作,代表关键字insert,delete,update ;
- 数据定义语言(DDL):Data Definition Language,与数据库表的结构(字段列和行)进行操作,代表关键字create ,drop,alter;
- 事务控制语言(TCL):Transactional Control Language,对表中数据的安全性进行交流操作,代表关键字commit ,rollback;
- 数据控制语言(DCL):Data Control Language,与数据库控制权限进行交流操作,代表关键字grant,revoke。
1.3 CRUD操作
- Create(增):
- Retrieve(检索):
- Update(修改):
- Delete(删除):
SQL、DB与DBMS联系
- SQL提供执行标准
- DB提供数据
- DBMS完成执行
DBMS负责执行sql语句,通过执行sql语句来操作DB当中的数据。
二.Mysql数据库
2.1 Mysql概述
概念
Mysql是一套关系型数据库管理系统,是目前市场上用的最多的、免费的数据库。安装与使用
详情请见Mysql安装与使用数据库常用命令
- mysql -version 或 -V:查看本机安装的Mysql版本;
- create database 数据库名:创建一个具有特定名称的数据库;
- use 表名:使用指定表名的数据库作为当前数据库,在创建表时必须先选择数据库,不然默认创建到当前数据库下;
- show databases:查看所有的数据库;
- select database():查询当前使用的数据库;
- select version():查看当前数据库的版本;
- show tables:查看当前使用的数据库中的表;
- show tables from DBname:查看来自于DBname数据库中的其他数据表;
- desc 表名:查看表的结构;
- show create table 表名:查看指定表的创建语句;
- \c:终止一条正在编写的mysql语句;
- \q、QUIT、EXIT:都是退出mysql;
使用mysql命令时,必须以 ;号 结束才是完整一条命令。
- 命令演示
C:\Users\yuan>mysql -uroot -p
Enter password: ********* //登录mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.36 MySQL Community Server (GPL) //mysql版本信息
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; //查看mysql中当前拥有的数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database mydb; //创建新的数据库
Query OK, 1 row affected (0.00 sec)
mysql> use mydb; //使用/切换数据库
Database changed
mysql> show tables; //显示当前数据库中的表
Empty set (0.00 sec)
mysql> source E:\BaiduYunDownload\MySQL\数据脚本\mydb.sql; //从外部导入数据脚本 初始化当前数据库
//中间省略n行
Query OK, 1 row affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+----------------+
| Tables_in_mydb |
+----------------+
| dept | //(部门表)
| emp | //(员工表)
| salgrade | //(工资等级表)
+----------------+
3 rows in set (0.00 sec)
2.2 数据库表
- 表概念
表即table,是一种结构化的文件,可以用来存储特定类型的数据。表是数据库的基本组成单元,所有的数据都以表格的形式组织,可读性强。每个表都有特定的名称作为标识且不能重复,表由列、行、主键等组成。 - 表的组成
表 = 表名 + 列 + 行 + 实际数据;
- 表名:每一个表的特定标识,一般见名知意,看到表名就知道这个表存储什么数据;一般建议以 t_ 或者 tbl_开始;
- 列:又叫字段(Column),每一个字段都有 字段名称+字段数据类型+字段约束+字段长度;
- 行:表数据/表记录(data),多个字段构成一行(记录)表示一条完整的数据信息;
- 实际数据:表创建出来时,每一个字段(即每一列)都是空的,没有数据存在的,因此需要给每一个字段添加实际的数据才构成完整的数据库表。
- 表的数据类型
- int:短整型,相当于int;
- bigint:长整型,相当于long;
- float:浮点型相当于java中的 float和double;
- char:定长字符串,相当于String,效率较高(使用该数据类型的字段,填写数据时不足定长度自动补全,超出定长度报错);
- varchar:可变字符(Variable character),相当于StringBuffer,效率较低(填写数据时动态根据填写的数据长度分配空间);在条件查询中,查询varchar字段类型的数据需要使用 单引号 '' 括起varchar类型数值。
- date:日期类型,相当于Java中的java.sql.Date类型;
- BLOB:全称 Binary Large OBject ,相当于java中的Object;是二进制大对象,可以存储图片、视频等流媒体信息;
- CLOB:全称Character Large OBject,相当于java中的Object(需要使用ObjectStream流引入和输出),是字符大对象,可以存储较大文本(当范围超出varchar(255)时),如存储4G的字符串。
- 大数据类型的使用
- BLOB存储图片和视频等信息,但视频过大时,会将视频存储到一个云盘空间,再将云盘空间的地址存储到该数据库表中;
2.3 表约束
- 概念
表约束指的是在在创建表的时候,给表的字段添加的相应约束。添加约束的目的是为了保证表中数据的合法性、有效性、完整性。 - 分类
- 非空约束(not null):使用该约束的字段 不能为NULL;
- 唯一约束(unique):使用该约束的字段 不能重复;
- 主键约束(primary key):使用该约束的字段 既不能为NULL,也不能重复(简称PK);
- 外键约束(foreign key):外键约束是引用了另一张表的主键字段作为本表的一个字段,由其他表 限制 本表字段的约束称为外键约束 (简称FK);
- 检查约束(check):check检查约束是Oracle数据库的约束,mysql没有(目前mysql不支持该约束)。
- 级别
- 列级约束:列级约束一般是指约束范围仅在字段列中,使用格式是在每一个字段名后面单独加上"指定类型的约束";
- 表级约束:表级约束一般是指约束范围作用在整张表中,使用格式是在表创建语句中的最后一行另取一行使用"指定类型的约束(字段)"来声明。
2.3.1 非空约束 not null
- 特点
- 使用该约束的字段,填写数据时该字段不能为NULL;
- not null只有列级约束,没有表级约束(只能作用于字段列);
- 同一个表中可以拥有多个非空约束。
- 语法格式
// 创建表
create table 表名(
字段1 数据类型 not null, // 字段1使用"非空约束",填写数据时不能为空
字段2 数据类型 not null, // 字段2使用"非空约束",填写数据时不能为空
字段3 数据类型
字段4 数据类型
);
- 代码示例
// 创建表
create table t_user(
id int,
username varchar(255) not null, //username字段使用"非空约束",username不能为空
password varchar(255)
);
// 插入数据--不插入username字段值,报错
// insert into t_user(id,password) values(1,'123'); //ERROR 1364 (HY000): Field 'username' doesn't have a default value
// 正确给username非空字段插入值
insert into t_user(id,username,password) values(1,'lisi','123');
2.3.2 唯一约束 unique
- 本质
unique唯一约束是 列级约束,作用的是该列(该字段值不能重复)。否则出现错误<给字段赋予了重复的值>: ERROR 1062 (23000): Duplicate entry '字段值' for key '字段'。 - 特点
- 字段值具有唯一性,使用该约束的字段,填写数据时该字段不能重复;但是可以为NULL;
- 可以给两个字段或者多个字段添加unique约束;
- 分类
- 单个字段添加:列级约束,使用unique约束的字段,不允许其数据值相同;
- 多个字段添加(多个单一字段):列级约束,使用单独unique约束的多个字段,每个字段都不允许其数据值相同;
- 多个字段添加(联合添加):表级约束,使用unique(字段1,字段2)联合约束的多个字段,允许个别字段的数据值相同,但约束的多个字段 其值不能同时全部相同。
- 语法格式
// 创建表--给一个字段(一列)添加unique约束
create table 表名(
字段1 数据类型,
字段2 数据类型 unique, // 给字段2添加unique唯一约束(列级约束)
字段3 数据类型
);
// 创建表--给多个字段(多列)添加unique约束
create table 表名(
字段1 数据类型,
字段2 数据类型 unique, // 给字段2添加unique唯一约束(列级约束)
字段3 数据类型 unique // 给字段3添加unique唯一约束(列级约束)
);
// 创建表--给多个字段(多列)联合添加unique约束
create table 表名(
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
unique(字段2,字段3) // 多个字段联合添加1个unique唯一约束(表级约束)
);
- 代码示例
// 给某一列添加unique
create table t_user(
id int,
username varchar(255) unique // 给字段username添加unique唯一约束(列级约束)
);
// 给字段username 插入数据'zhangsan'
insert into t_user values(1,'zhangsan');
// 给字段username 插入相同的数据'zhangsan'--报错
// insert into t_user values(2,'zhangsan'); //ERROR 1062 (23000): Duplicate entry 'zhangsan' for key 'username'
// 允许字段username为空NULL
insert into t_user(id) values(2); // 仅给id插入数据,username为空
insert into t_user(id) values(3); // 仅给id插入数据,username为空
// 给两个列或者多个列添加unique约束--联合添加unique(字段1,字段2)
create table t_user(
id int,
usercode varchar(255),
username varchar(255),
unique(usercode,username) // 给多个字段联合添加1个unique唯一约束【表级约束】
);
//(省略字段插入)给字段usercode,username插入数据
insert into t_user values(1,'111','zs');
// 给字段usercode插入相同的数据
insert into t_user values(2,'111','ls');
// 给字段username插入相同的数据
insert into t_user values(3,'222','zs');
// 给字段usercode,username同时插入相同的数据--报错
insert into t_user values(4,'111','zs'); // ERROR 1062 (23000): Duplicate entry '111-zs' for key 'usercode'
// 给两个列或者多个列添加unique约束--单个添加
create table t_user(
id int,
usercode varchar(255) unique, // 给字段usercode添加unique唯一约束(列级约束)
username varchar(255) unique // 给字段username添加unique唯一约束(列级约束)
);
// (省略字段插入)给字段usercode,username插入数据
insert into t_user values(1,'111','zs');
// (省略字段插入)给字段usercode插入相同数据--报错
insert into t_user values(2,'111','ls'); // ERROR 1062 (23000): Duplicate entry '111' for key 'usercode'
2.3.3 主键约束 primary key
- 特点
- 使用该约束的字段,填写数据时该字段值既不能为NULL,也不能重复(简称PK);
- 每一个数据表中,主键约束有且仅有一个(虽然有复合主键<联合主键>,但违背违背三范式不建议使用)。
- 语法格式
// 创建表
create table 表名(
字段1 数据类型 primary key, // 给字段1添加 PK主键约束(列级约束)
字段2 数据类型,
字段3 数据类型
);
- 主键相关术语
- 主键约束 : primary key
- 主键字段 : 添加primary key之后的字段叫主键字段;
- 主键值 : 主键字段中的每一个值都是主键值。
- 主键分类
- 单一主键:常用的主键方式,作为整个表的唯一标识。
- 复合主键:多个字段联合添加一个主键约束primary key(字段1,字段2),不建议使用,因为复合主键违背三范式;
- 自然主键:主键值最好就是一个和业务没有任何关系 的自然数(一般是id);
- 业务主键:主键值和系统的业务挂钩(不建议使用,业务改变时该表作废,浪费精力)。
- 主键的作用
- 数据库表的设计三范式中,第一范式要求任何一张表必须要有主键;
- 主键作为每一条记录的唯一标识,多条记录只要主键值不一样,多条记录就不一样,即使后面的值全部一样(如身份证号不一样,其他信息都一样);
- 代码示例
自增 auto_increment
- 概念
Mysql提供的一种可以自动增加主键的机制 -- auto_increment(Oracle当中也提供了一个自增机制 -- sequence序列对象)。 - 原理
主键字段自动维护一个自增的数字,从1开始,以1递增。 - 作用
当数据表中的一个字段呗声明为主键字段后,该字段的数据既不能为空也不能重复,必须手动赋值;但采用自增后,Mysql会在 忘记手动给主键字段赋值时,自动添加上主键值,并且是递增形式增加(自增主键一般是可以自动递增的数字)。
2.3.4 外键约束 foreign key
- 概念
在数据库的多张表中,一张表的字段 引用了 另一张表的主键字段(可以不是主键字段,但一定是unique唯一约束的字段),那么该表的引用字段称为外键字段,外键约束关键字为foreign key。 - 特点
- 外键可以为NULL;
- 被外键引用的字段不一定是主键,但至少具有unique约束
- 外键字段的值 必须依赖主键字段值的存在,即外键字段值不能随便编写,必须在主键字段中先行存在(受他人约束)。
- 语法格式
// 创建主键字段的表
create table 表名a (
字段1 数据类型,
字段2 数据类型,
primary key(字段1) // 表a的主键字段--可被其他表引用作为 外键
);
// 创建外键字段的表
create table 表名b (
字段1 数据类型,
字段2 数据类型,
字段3 数据类型,
primary key(字段1), // 同一个表中允许主键字段和外键字段同时存在
foreign key(字段3) references 表a(字段1) // 表b中的字段3 引用 表a中的主键字段1
);
// 创建非primary key字段的表
create table 表名c (
字段1 数据类型 unique, // 被外键引用的字段不一定是primary key,但至少必须是unique唯一的
字段2 数据类型,
);
// 创建外键字段的表--引用unique字段作为外键
create table 表名d (
字段1 数据类型,
字段2 数据类型,
foreign key(字段2) references 表d(字段1) // 表c中的字段1 引用 表d中的unique字段1
);
- 外键约束相关术语
- 外键约束: foreign key;
- 外键字段:添加有外键约束的字段称为外键字段;
- 外键值:外键字段中的每一个值就是外键值。
- 代码示例
2.4 级联操作
- 主表与从表(父表与子表)
拥有主键字段的表称为父表(也叫主表),引用了父表中主键字段作为外键字段的表称为子表(也叫从表)。 - 级联分类
- 级联更新:但凡使用了外键的字段,在主键字段的值更新后,外键字段的值也会自动随着更新;
- 级联删除:但凡使用了外键的字段,在删除主键字段值时,外键字段的值也会自动删除。
- 级联操作顺序
- 删除表或数据,先子父;新增表或数据,先父后子;
- 删除数据时,先删除子表,再删除父表;
- 添加数据时,先添加父表,在添加子表;
- 创建表时,先创建父表,再创建子表;
- 删除表时,先删除子表,在删除父表。
2.5 Mysql引擎
- 概念
mysql支持很多种存储引擎,每一个存储引擎都对应了一种不同的存储方式,每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎。存储引擎只在mysql中存在,Oracle中有对应的机制 --"表的存储方式"。 - 实质
存储引擎就是表的存储方式,不同的存储引擎就是对数据表的不同存储方式。 - 分类
- InnoDB:支持事务,mysql默认使用的存储引擎是InnoDB方式;
- MyISAM:不支持事务,
- Memory:将数据存储到缓存RAM,方便快速,但一旦退出或者突然终止,缓存中的数据就会丢失。
- Archive:
- 查看存储引擎
- show engines \G:查看当前mysql支持的存储引擎(mysql 5.5支持的存储引擎有9个);
- show variables like "%engine%":查看当前数据库的存储引擎;
查看事务隔离级别:show gloable variables like "tx_isolation"
2.5.1 MyISAM
- 概念
MyISAM是mysql最常用的存储引擎,但是该引擎不是MySQL默认的。MyISAM对Mysql数据库表的组成方式分为三部分,分别是表头(.frm) + 表数据(.MYD) + 表索引(.MYI)。也就是说在MyISAM引擎中,一张完整的数据表由三部分组成,每一部分"子表"具有不同的作用。 - 特点
- 不支持事务;
- 可被压缩,节省存储空间;
- 可以转换为只读表,提高检索效率。
- 文件组织方式
- xxx.frm:frm指的是format,存储 表头格式的文件;
- xxx.MYD:D指的是Data,存储 表中数据的文件;
- xxx.MYI:I指的是Index,存储 表中索引的文件;
- 底层实现
在计算机底层(硬盘中).frm + .MYD + .MYI表示一张完整的Mysql数据表。
2.5.2 InnoDB
- 概念
InnoDB是MySQL默认的存储引擎,因为支持事务机制,因此数据的安全可以得到保障。数据库表在InnoDB引擎中的组成方式是表头(.frm) + 表数据(tablespace表空间)。 - 特点
- 支持事务、行级锁、外键等,因此存储的数据的安全得到保障;
- (表数据存储在逻辑概念中)无法被压缩,无法转换成只读;
- 在MySQL数据库崩溃之后提供自动恢复机制;
- 支持级联删除和级联更新。
- 文件组织方式
- xxx.frm文件:存储 表的结构(表格式);
- tablespace表空间(逻辑概念):存储 表的数据,逻辑概念无法被压缩,无法转换成只读。
2.5.3 Memory
- 概念
Memory旧称HEPA引擎,是一种基于"内存"的存储引擎。数据库表在Memory引擎中的组成方式是表头(.frm) + 表数据(内存)。 - 特点
- 不支持事务;
- 数据容易丢失,因为所有的数据和索引都存储在内存当中;
- 查询速度最快,因为所有的数据和索引都存储在内存当中,不需要等待数据加载。
- 文件组织方式
- xxx.frm文件:存储 表的结构(表格式);
- 内存:存储 表的数据和表索引(不安全,一断电数据容易丢失);
2.6 DBA命令
- 概念
DBA命令即数据库管理员使用的命令,数据库管理员通过使用DBA命令对数据库进行维护。
2.6.1 数据备份
- 数据备份
数据备份就是将数据库导出备份(非常重要),将数据库导出备份有利于以后可能发生的意外事件,如删库、崩溃等。 - 语法格式
// 在windows的dos命令窗口中执行(不需要登录Mysql):导出整个数据库
mysqldump 数据库>指定路径下的指定文件 -u用户名 -p密码
// 导出指定数据库的指定表
mysqldump 数据库名 表名>指定路径下的指定文件 -u用户名 -p密码
- 导出特点
- 在DOS命令窗口导出,使用命令mysqldump;
- 在DOS当前的系统用户下导出,不需要登录mysql;
- 导出时的>大于号是路径转向符;
- 导出时虽不需要登录mysql,但需要"导出数据库"的用户名和密码。
-
导出权限控制
一般不进行C盘导出,C盘需要高权限(管理员权限)
2.6.2 sql脚本导入
- 语法格式
// 先在DOS窗口登录mysql
source 数据库脚本路径
2.6.3 创建用户
- 语法格式
// username:将创建的用户名,
// password:新建用户的登陆密码(密码可以为空,若为空则该用户可以不需要密码登陆服务器)
CREATE USER username IDENTIFIED BY 'password';
2.6.4 用户授权
2.6.5 回收权限
三、数据定义语言(DDL)
- 概念
数据定义语言全称Data Definition Language,是对表的结构进行增、删、改的语言,即对表的表名、字段、行、约束等进行操作的语言。 - 分类
- create :创建数据库表;
- drop:删除数据库表;
- alter:修改表的结构,如修改字段名,字段类型等。
3.1 create创建表
- 语法格式
create table 表名(
字段名1 数据类型, // 字段名应该"见名知意"
字段名2 数据类型,
字段名3 数据类型,
....
);
执行原理
代码示例
// 创建t_student表
mysql> create table t_student(
-> no bigint, //学号,bigint类型
-> name varchar(255), //姓名,varchar类型(长度255)
-> sex char(1), //性别,char类型(长度1)
-> classno varchar(255), //班级号,varchar类型(长度255)
-> birth char(10) //出生日期,char类型(长度10)
-> );
// 查看 t_student表的结构
mysql> desc t_student;
// 字段名 字段类型 是否为空 主键 默认值
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| no | bigint(20) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| sex | char(1) | YES | | NULL | |
| classno | varchar(255) | YES | | NULL | |
| birth | char(10) | YES | | NULL | |
+---------+--------------+------+-----+---------+-------+
3.2 drop删除表
- 语法格式
drop table 表名; // 通用写法
drop table if exists 表名; // 当这个表存在的话 删除该表( oracle不支持)
- 执行原理
3.3 alter更新表(结构)
- 语法格式
- 执行原理
通过给定新的表结构,替换原始的表结构。 - 特点
- 在实际开发中表一旦设计好之后,通常不会对表结构进行修改(成本巨大);
- 修改表结构是对之前的设计进行了否定;
-需要修改表结构,可以直接使用工具操作(方便); - 修改表结构的语句不会出现在Java代码当中。
3.4 复制表
- 语法格式
create table 表名 as select语句;
- 执行原理
将select查询语句的结果当做表创建出来。 - 代码示例
// 复制一个t_student表,作为新表t_mystudent
mysql> create table t_mystudent as
-> select *
-> from t_student;
四、表数据操纵语言(DML)
- 概念
数据操纵语言全称Data Manipulation Language,是对表当中的数据进行增、删、改的语言。 - 分类
- insert:往表中添加数据;
- delete:删除表中的数据;
- update:修改/更新表中的数据。
4.1 insert插入数据
- 语法格式
// 一次插入单个数据
insert into 表名(字段名1,字段名2,字段名3,....) values(值1,值2,值3,....)
// 一次插入多个数据--关键字values只有一个
insert into 表名(字段名1,字段名2,字段名3,....)
values(值1,值2,值3,....),(值1,值2,值3,....),(值1,值2,值3,....);
- 执行原理
插入字段的数量 和 字段值的数量必须相同,并且数据类型要对应相同。 - 分类
- 插入单条数据:
- 插入多条(大量)数据:
- 特点
- 插入时,字段可以省略不写,但后面的value值对数量和顺序都有要求(必须和定义的字段顺序相同,字段个数也要和定义时的个数相同);
- 每个记录可以仅插入一个字段,但插入后该记录便已存在,不能重新插入其他字段值,后期只能修改;
- 插入字段的数量 和 字段值的数量必须相同,并且数据类型要对应相同;
- 代码示例
// 插入一个字段值
mysql> insert into t_student(no)
-> values(12);
// 插入多个字段(但不是所有字段),插入字段和字段值有序对应且类型相同
mysql> insert into t_student(no,name,classno,birth)
-> values(24,'hhh','xiao2ban','2008-08-08');
+------+------+------+----------+------------+
| no | name | sex | classno | birth |
+------+------+------+----------+------------+
| 12 | NULL | NULL | NULL | NULL |
| 24 | hhh | NULL | xiao2ban | 2008-08-08 |
+------+------+------+----------+------------+
// 插入所有字段,插入的字段顺序和字段值顺序相同
mysql> insert into t_student(no,name,sex,classno,birth)
-> values(13,'lulu','1','xiao5ban','2012-12-20');
// 省略字段插入,仅使用字段值插入
mysql> insert into t_student // 缺省字段(no,name,sex,classno,birth)
-> values(18,'aile','0','da3ban','2010-10-01');
// 一次插入多个值
mysql> insert into t_student
-> (no,name,sex,classno,birth)
-> values
-> (21,'yry','1','dasan3ban','1999-02-02'),
-> (23,'james','1','gao3ban','1985-12-31'),
-> (35,'kd','1','lei4ban','1988-08-31');
4.2 delete删除数据
- 语法格式
// 删除一条或多条数据
delete from 表名
where 条件;
// 删除所有数据
delete from 表名 ;
// 删除大表中的数据--表数据量特大情况(重点)
truncate table 表名; // 表被截断,不可回滚,永久丢失
- 执行原理
普通删除的原理:从指定的数据库表下,找到匹配where条件的数据,然后删除。
删除大表的原理:使用delete语句删除大表时(数据量过亿级别),因为没有释放数据的内存空间,效率非常低下<类似橡皮擦擦除表格中的数据,擦除效率慢,表格依然存在>;truncate删除大表时,是将整个表格剪掉,表格本体全部截断只留表头,truncate删除不可回滚(永久删除,必须注意)。 - 特点
- 删除时没有where条件,将全部数据删除;
- 代码示例
4.3 update更新数据
- 语法格式
update 表名
set 字段名1=值1,字段名2=值2...
where 条件
执行原理
特点
- update时若没有where条件,将会对整张表数据全部更新;
- 代码示例
// 将部门10的地点LOC修改为SHANGHAI
// 并将部门名称修改为RENSHIBU
update dept
set loc = 'SHANGHAI', dname = 'RENSHIBU'
where deptno = 10;
// 不带where条件,将更新所有记录
update dept
set loc = 'x', dname = 'y';