Mysql数据库入门

学习目的

  1. 了解什么是数据库
  2. 掌握Mysql数据库基本命令的语法结构与使用
  3. 了解Mysql数据表设计与数据库设计
  4. 了解Mysql的数据引擎及实现原理
  5. 掌握Mysql索引与视图的实现原理

一.数据库概述

1.1 数据库

  1. 概念
    数据库全称DataBase,简称DB,通常是一个或一组文件的数据容器(也是数据仓库)。数据库中存储了大量的数据,为了将大量数据更好的分门别类,引入了数据表的概念来存储不同的数据。数据库由表构成,每一个表保存了一些符合特定规格的数据。数据库实际上是在硬盘上存储的数据文件。
  2. 数据库管理系统
    用来管理数据库软件的系统称为数据库管理系统,全称为DataBase Management System,简称DBMS。常用的数据库管理系统有:Oracle、SQL Server、MySql、Sybase、DB2、informix、interbase、PostgreSql 等。
  3. 分类
  • 关系型数据库:建立在关系模型基础上的数据库,常见的关系型数据库有Oracle、MySQL、DB2、SQL Server、Access;
  • 非关系型数据库:用于存储和检索数据的非关系数据库系统,常见的非关系型数据库有MongoDB、CouchDB、ArangoDB、Couchbase、Cosmos DB、Domino、MarkLogic、OrientDB。

1.2 SQL

  1. 概念
    SQL全称Structured Query Language,意为结构化查询语言。SQL是用来与数据库进行通信交流的一套语言标准,SQL是一套标准。
  2. 执行
    SQL语句在执行时,实际上在内部会由DBMS先进行编译,然后再执行sql。
  3. 分类
  • 数据查询语言(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概述

  1. 概念
    Mysql是一套关系型数据库管理系统,是目前市场上用的最多的、免费的数据库。

  2. 安装与使用
    详情请见Mysql安装与使用

  3. 数据库常用命令

  • 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命令时,必须以 ;号 结束才是完整一条命令。
  1. 命令演示
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)
数据库命令1.png

数据库命令2.png

2.2 数据库表

  1. 表概念
    表即table,是一种结构化的文件,可以用来存储特定类型的数据。表是数据库的基本组成单元,所有的数据都以表格的形式组织,可读性强。每个表都有特定的名称作为标识且不能重复,表由列、行、主键等组成。
  2. 表的组成
    表 = 表名 + 列 + 行 + 实际数据;
  • 表名:每一个表的特定标识,一般见名知意,看到表名就知道这个表存储什么数据;一般建议以 t_ 或者 tbl_开始
  • 列:又叫字段(Column),每一个字段都有 字段名称+字段数据类型+字段约束+字段长度;
  • 行:表数据/表记录(data),多个字段构成一行(记录)表示一条完整的数据信息;
  • 实际数据:表创建出来时,每一个字段(即每一列)都是空的,没有数据存在的,因此需要给每一个字段添加实际的数据才构成完整的数据库表。
  1. 表的数据类型
  • 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的字符串。
  1. 大数据类型的使用
  • BLOB存储图片和视频等信息,但视频过大时,会将视频存储到一个云盘空间,再将云盘空间的地址存储到该数据库表中;

2.3 表约束

  1. 概念
    表约束指的是在在创建表的时候,给表的字段添加的相应约束。添加约束的目的是为了保证表中数据的合法性、有效性、完整性。
  2. 分类
  • 非空约束(not null):使用该约束的字段 不能为NULL;
  • 唯一约束(unique):使用该约束的字段 不能重复;
  • 主键约束(primary key):使用该约束的字段 既不能为NULL,也不能重复(简称PK);
  • 外键约束(foreign key):外键约束是引用了另一张表的主键字段作为本表的一个字段,由其他表 限制 本表字段的约束称为外键约束 (简称FK);
  • 检查约束(check):check检查约束是Oracle数据库的约束,mysql没有(目前mysql不支持该约束)。
  1. 级别
  • 列级约束:列级约束一般是指约束范围仅在字段列中,使用格式是在每一个字段名后面单独加上"指定类型的约束";
  • 表级约束:表级约束一般是指约束范围作用在整张表中,使用格式是在表创建语句中的最后一行另取一行使用"指定类型的约束(字段)"来声明。

2.3.1 非空约束 not null

  1. 特点
  • 使用该约束的字段,填写数据时该字段不能为NULL
  • not null只有列级约束,没有表级约束(只能作用于字段列);
  • 同一个表中可以拥有多个非空约束。
  1. 语法格式
// 创建表
create table 表名(
    字段1 数据类型 not null, // 字段1使用"非空约束",填写数据时不能为空
    字段2 数据类型 not null,  // 字段2使用"非空约束",填写数据时不能为空
    字段3 数据类型
    字段4 数据类型
);
  1. 代码示例
// 创建表
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

  1. 本质
    unique唯一约束是 列级约束,作用的是该列(该字段值不能重复)。否则出现错误<给字段赋予了重复的值>: ERROR 1062 (23000): Duplicate entry '字段值' for key '字段'
  2. 特点
  • 字段值具有唯一性,使用该约束的字段,填写数据时该字段不能重复;但是可以为NULL
  • 可以给两个字段或者多个字段添加unique约束;
  1. 分类
  • 单个字段添加:列级约束,使用unique约束的字段,不允许其数据值相同;
  • 多个字段添加(多个单一字段):列级约束,使用单独unique约束的多个字段,每个字段都不允许其数据值相同;
  • 多个字段添加(联合添加):表级约束,使用unique(字段1,字段2)联合约束的多个字段,允许个别字段的数据值相同,但约束的多个字段 其值不能同时全部相同。
  1. 语法格式
// 创建表--给一个字段(一列)添加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唯一约束(表级约束)
);
  1. 代码示例
// 给某一列添加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

  1. 特点
  • 使用该约束的字段,填写数据时该字段值既不能为NULL,也不能重复(简称PK)
  • 每一个数据表中,主键约束有且仅有一个(虽然有复合主键<联合主键>,但违背违背三范式不建议使用)。
  1. 语法格式
// 创建表
create table 表名(
    字段1 数据类型 primary key, // 给字段1添加 PK主键约束(列级约束)
    字段2 数据类型,
    字段3 数据类型
);
  1. 主键相关术语
  • 主键约束 : primary key
  • 主键字段 : 添加primary key之后的字段叫主键字段;
  • 主键值 : 主键字段中的每一个值都是主键值。
  1. 主键分类
  • 单一主键:常用的主键方式,作为整个表的唯一标识。
  • 复合主键:多个字段联合添加一个主键约束primary key(字段1,字段2),不建议使用,因为复合主键违背三范式;
  • 自然主键:主键值最好就是一个和业务没有任何关系 的自然数(一般是id);
  • 业务主键:主键值和系统的业务挂钩(不建议使用,业务改变时该表作废,浪费精力)。
  1. 主键的作用
  • 数据库表的设计三范式中,第一范式要求任何一张表必须要有主键;
  • 主键作为每一条记录的唯一标识,多条记录只要主键值不一样,多条记录就不一样,即使后面的值全部一样(如身份证号不一样,其他信息都一样);
  1. 代码示例

自增 auto_increment
  1. 概念
    Mysql提供的一种可以自动增加主键的机制 -- auto_increment(Oracle当中也提供了一个自增机制 -- sequence序列对象)。
  2. 原理
    主键字段自动维护一个自增的数字,从1开始,以1递增。
  3. 作用
    当数据表中的一个字段呗声明为主键字段后,该字段的数据既不能为空也不能重复,必须手动赋值;但采用自增后,Mysql会在 忘记手动给主键字段赋值时,自动添加上主键值,并且是递增形式增加(自增主键一般是可以自动递增的数字)。

2.3.4 外键约束 foreign key

  1. 概念
    在数据库的多张表中,一张表的字段 引用了 另一张表的主键字段(可以不是主键字段,但一定是unique唯一约束的字段),那么该表的引用字段称为外键字段,外键约束关键字为foreign key
  2. 特点
  • 外键可以为NULL;
  • 被外键引用的字段不一定是主键,但至少具有unique约束
  • 外键字段的值 必须依赖主键字段值的存在,即外键字段值不能随便编写,必须在主键字段中先行存在(受他人约束)。
  1. 语法格式
    // 创建主键字段的表
    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
    );
  1. 外键约束相关术语
  • 外键约束: foreign key;
  • 外键字段:添加有外键约束的字段称为外键字段;
  • 外键值:外键字段中的每一个值就是外键值。
  1. 代码示例

2.4 级联操作

  1. 主表与从表(父表与子表)
    拥有主键字段的表称为父表(也叫主表),引用了父表中主键字段作为外键字段的表称为子表(也叫从表)。
  2. 级联分类
  • 级联更新:但凡使用了外键的字段,在主键字段的值更新后,外键字段的值也会自动随着更新;
  • 级联删除:但凡使用了外键的字段,在删除主键字段值时,外键字段的值也会自动删除。
  1. 级联操作顺序
  • 删除表或数据,先子父;新增表或数据,先父后子
  • 删除数据时,先删除子表,再删除父表;
  • 添加数据时,先添加父表,在添加子表;
  • 创建表时,先创建父表,再创建子表;
  • 删除表时,先删除子表,在删除父表。

2.5 Mysql引擎

  1. 概念
    mysql支持很多种存储引擎,每一个存储引擎都对应了一种不同的存储方式,每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎。存储引擎只在mysql中存在,Oracle中有对应的机制 --"表的存储方式"。
  2. 实质
    存储引擎就是表的存储方式,不同的存储引擎就是对数据表的不同存储方式
  3. 分类
  • InnoDB:支持事务,mysql默认使用的存储引擎是InnoDB方式;
  • MyISAM:不支持事务,
  • Memory:将数据存储到缓存RAM,方便快速,但一旦退出或者突然终止,缓存中的数据就会丢失。
  • Archive:
  1. 查看存储引擎
  • show engines \G:查看当前mysql支持的存储引擎(mysql 5.5支持的存储引擎有9个);
  • show variables like "%engine%":查看当前数据库的存储引擎;
    查看事务隔离级别:show gloable variables like "tx_isolation"

2.5.1 MyISAM

  1. 概念
    MyISAM是mysql最常用的存储引擎,但是该引擎不是MySQL默认的。MyISAM对Mysql数据库表的组成方式分为三部分,分别是表头(.frm) + 表数据(.MYD) + 表索引(.MYI)。也就是说在MyISAM引擎中,一张完整的数据表由三部分组成,每一部分"子表"具有不同的作用。
  2. 特点
  • 不支持事务
  • 可被压缩,节省存储空间;
  • 可以转换为只读表,提高检索效率。
  1. 文件组织方式
  • xxx.frm:frm指的是format,存储 表头格式的文件;
  • xxx.MYD:D指的是Data,存储 表中数据的文件;
  • xxx.MYI:I指的是Index,存储 表中索引的文件;
  1. 底层实现
    在计算机底层(硬盘中).frm + .MYD + .MYI表示一张完整的Mysql数据表。
    MyISAM引擎--数据表的组成方式.png

2.5.2 InnoDB

  1. 概念
    InnoDB是MySQL默认的存储引擎,因为支持事务机制,因此数据的安全可以得到保障。数据库表在InnoDB引擎中的组成方式是表头(.frm) + 表数据(tablespace表空间)
  2. 特点
  • 支持事务、行级锁、外键等,因此存储的数据的安全得到保障;
  • (表数据存储在逻辑概念中)无法被压缩,无法转换成只读;
  • 在MySQL数据库崩溃之后提供自动恢复机制;
  • 支持级联删除和级联更新
  1. 文件组织方式
  • xxx.frm文件:存储 表的结构(表格式);
  • tablespace表空间(逻辑概念):存储 表的数据,逻辑概念无法被压缩,无法转换成只读。

2.5.3 Memory

  1. 概念
    Memory旧称HEPA引擎,是一种基于"内存"的存储引擎。数据库表在Memory引擎中的组成方式是表头(.frm) + 表数据(内存)
  2. 特点
  • 不支持事务;
  • 数据容易丢失,因为所有的数据和索引都存储在内存当中;
  • 查询速度最快,因为所有的数据和索引都存储在内存当中,不需要等待数据加载。
  1. 文件组织方式
  • xxx.frm文件:存储 表的结构(表格式);
  • 内存:存储 表的数据和表索引(不安全,一断电数据容易丢失);

2.6 DBA命令

  1. 概念
    DBA命令即数据库管理员使用的命令,数据库管理员通过使用DBA命令对数据库进行维护。

2.6.1 数据备份

  1. 数据备份
    数据备份就是将数据库导出备份(非常重要),将数据库导出备份有利于以后可能发生的意外事件,如删库、崩溃等。
  2. 语法格式
// 在windows的dos命令窗口中执行(不需要登录Mysql):导出整个数据库
mysqldump 数据库>指定路径下的指定文件 -u用户名 -p密码  

// 导出指定数据库的指定表
mysqldump 数据库名 表名>指定路径下的指定文件 -u用户名 -p密码  
  1. 导出特点
  • 在DOS命令窗口导出,使用命令mysqldump
  • 在DOS当前的系统用户下导出,不需要登录mysql;
  • 导出时的>大于号是路径转向符;
  • 导出时虽不需要登录mysql,但需要"导出数据库"的用户名和密码。
  1. 导出权限控制
    一般不进行C盘导出,C盘需要高权限(管理员权限)


    导出拒绝访问.png
导出成功.png

2.6.2 sql脚本导入

  1. 语法格式
// 先在DOS窗口登录mysql
source 数据库脚本路径

2.6.3 创建用户

  1. 语法格式
// username:将创建的用户名,
// password:新建用户的登陆密码(密码可以为空,若为空则该用户可以不需要密码登陆服务器)
CREATE USER username IDENTIFIED BY 'password';

2.6.4 用户授权

2.6.5 回收权限

三、数据定义语言(DDL)

  1. 概念
    数据定义语言全称Data Definition Language,是对表的结构进行增、删、改的语言,即对表的表名、字段、行、约束等进行操作的语言。
  2. 分类
  • create :创建数据库表;
  • drop:删除数据库表;
  • alter:修改表的结构,如修改字段名,字段类型等。

3.1 create创建表

  1. 语法格式
  create table 表名(
      字段名1 数据类型,  // 字段名应该"见名知意"
      字段名2 数据类型,
      字段名3 数据类型,  
      ....
   );
  1. 执行原理

  2. 代码示例

//  创建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删除表

  1. 语法格式
drop table 表名; // 通用写法
drop table if exists 表名; // 当这个表存在的话 删除该表( oracle不支持)
  1. 执行原理

3.3 alter更新表(结构)

  1. 语法格式
  1. 执行原理
    通过给定新的表结构,替换原始的表结构。
  2. 特点
  • 在实际开发中表一旦设计好之后,通常不会对表结构进行修改(成本巨大);
  • 修改表结构是对之前的设计进行了否定;
    -需要修改表结构,可以直接使用工具操作(方便);
  • 修改表结构的语句不会出现在Java代码当中。

3.4 复制表

  1. 语法格式
create table 表名 as select语句;
  1. 执行原理
    将select查询语句的结果当做表创建出来
  2. 代码示例
// 复制一个t_student表,作为新表t_mystudent
mysql> create table t_mystudent as
    -> select *
    -> from t_student;

四、表数据操纵语言(DML)

  1. 概念
    数据操纵语言全称Data Manipulation Language,是对表当中的数据进行增、删、改的语言。
  2. 分类
  • insert:往表中添加数据;
  • delete:删除表中的数据;
  • update:修改/更新表中的数据。

4.1 insert插入数据

  1. 语法格式
// 一次插入单个数据
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,....);
  1. 执行原理
    插入字段的数量 和 字段值的数量必须相同,并且数据类型要对应相同。
  2. 分类
  • 插入单条数据:
  • 插入多条(大量)数据:
  1. 特点
  • 插入时,字段可以省略不写,但后面的value值对数量和顺序都有要求(必须和定义的字段顺序相同,字段个数也要和定义时的个数相同);
  • 每个记录可以仅插入一个字段,但插入后该记录便已存在,不能重新插入其他字段值,后期只能修改;
  • 插入字段的数量 和 字段值的数量必须相同,并且数据类型要对应相同;
  1. 代码示例
// 插入一个字段值
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删除数据

  1. 语法格式
    // 删除一条或多条数据
    delete from 表名 
    where 条件;

    // 删除所有数据
    delete from 表名 ;

    // 删除大表中的数据--表数据量特大情况(重点)
    truncate table 表名; // 表被截断,不可回滚,永久丢失
  1. 执行原理
    普通删除的原理:从指定的数据库表下,找到匹配where条件的数据,然后删除。
    删除大表的原理:使用delete语句删除大表时(数据量过亿级别),因为没有释放数据的内存空间,效率非常低下<类似橡皮擦擦除表格中的数据,擦除效率慢,表格依然存在>;truncate删除大表时,是将整个表格剪掉,表格本体全部截断只留表头,truncate删除不可回滚(永久删除,必须注意)
  2. 特点
  • 删除时没有where条件,将全部数据删除;
  1. 代码示例

4.3 update更新数据

  1. 语法格式
    update 表名 
    set 字段名1=值1,字段名2=值2... 
    where 条件
  1. 执行原理

  2. 特点

  • update时若没有where条件,将会对整张表数据全部更新;
  1. 代码示例
    // 将部门10的地点LOC修改为SHANGHAI
    // 并将部门名称修改为RENSHIBU
    update dept 
    set loc = 'SHANGHAI', dname = 'RENSHIBU' 
    where deptno = 10;

    // 不带where条件,将更新所有记录
    update dept 
    set loc = 'x', dname = 'y';

你可能感兴趣的:(Mysql数据库入门)