精华内容
下载资源
问答
  • 1 索引种类 索引是什么? 对于索引个人的理解就是,索引是一种加快查询的数据结构。 所以,索引就是一种数据结构,加快查询的效率。例如InnoDB存储引擎使用的就是B...普通索引唯一的作用就是加快查询 组合索引 inde

    1 索引种类

    索引是什么?

    对于索引个人的理解就是,索引是一种加快查询的数据结构。

    所以,索引就是一种数据结构加快查询的效率。例如InnoDB存储引擎中使用的就是B+ tree这种数据结构来组织索引。

    主键索引 primary key 主键索引一般都是在创建表的时候指定,一个表只有一个主键索引,特点是唯一、非空
    唯一索引 unique 唯一索引具有的特点就是唯一性,可以在创建表的时候指定,也可以在创建表后创建
    普通索引 index 普通索引唯一的作用就是加快查询
    组合索引 index 组合索引是创建一个多个字段的索引,这个概念是相对于上上面的单列索引而言,组合索引查询遵循最左前缀原则
    全文索引 fulltext 全文索引是针对一些大的文本字段创建的索引,也称为全文检索
    聚簇索引 | 非聚簇索引 聚簇索引和非聚簇索引的概念比上面的概念要大,属于包含和被包含的关系。例如:InnoDB中主键索引使用的就是聚簇索引

    查看索引的sql语句

    show index from 表名
    

    1.1 主键索引

    主键索引在InnoDB存储引擎中是最常见的索引类型,一个表都有一个主键索引,他索引的字段非空且唯一

    一般是在创建表的时候,可以通过primary key 指定主键索引,在InnoDB存储引擎中,如果创建表的时候没有主观创建主索引,MySQL是不是有默认的唯一索引?

    如果有非空的唯一索引,就会将其作为主键索引。

    如果没有,就会默认生成一个6bytes空间的自动增长主键作为主键索引。可以通过以下命令查询对应的主键值。

    select _rowid from 表名
    

    MyISAM储存引擎是可以不存在主键索引,MyISAM和InnoDB储存数据的结构方式还是有明显的区别。

    1.2 唯一索引

    唯一索引于主键索引的区别就是唯一索引允许为空。

    作用:

    用来保证数据的唯一性,所以唯一索引重在体现他的唯一性。

    创建唯一索引的方式有三种。

    (1)一个是在创建表的时候指定

    CREATE TABLE user( 
     id INT PRIMARY KEY NOT NULL, 
     name VARCHAR(16) NOT NULL, 
     UNIQUE unique_name (name(10)) 
    );
    

    (2)也可以在表创建后创建

    CREATE UNIQUE INDEX unique_name ON user(name(10))

    (3)通过修改表结构创建

    ALTER user ADD UNIQUE unique_name ON (name(10))
    

    这里有一个细节要注意的是创建的name字段,指定的长度是16字符,而创建的索引的长度制定的是10字符,因为也没有人的名字长度会超过10个字符,所以减少索引长度,能够减少索引所占的空间的大小。

    1.3 普通索引

    普通索引的唯一作用就是加快数据的查询,一般对查询语句where和order by 后面的字段创建普通索引

    创建普通索引的方式也有三种,基本和创建唯一索引的方式一样,只是把关键字UNIQUE换成INDEX

    // 创建表的时候创建
    CREATE TABLE user( 
     id INT PRIMARY KEY NOT NULL, 
     name VARCHAR(16) NOT NULL, 
     INDEX index_name (name(10)) 
    );
    // 创建表后创建
    CREATE INDEX INDEX index_name ON user(name(10))// 修改表结构创建
    ALTER user ADD INDEX index_name ON (name(10))
    

    删除索引

    DROP INDEX index_name ON user;
    

    1.4 组合索引

    组合索引即用多个字段创建一个索引,组合索引能够避免**「回表查询」**,相对于多字段的单列索引,组合索引的查询效率更高。

    创建组合索引(联合索引)的方式和上面创建普通索引的方式一样,只不过字段的数目多了

    // 其它方式和上面的一样,这里就只列举修改表结构的方式创建
    ALTER TABLE employee ADD INDEX name_age_sex (name(10),age,sex);
    

    回表查询

    通过二级索引查询数据,得不到完整的数据行,需要再次查询主键索引来获得数据行

    InnoDB存储引擎中,索引分为 「聚簇索引」「二级索引」,主键索引就是聚簇索引,其它的索引为二级索引。

    聚簇索引中的叶子节点保存着完整的数据行,而二级索引的叶子节点并不是保存完整的数据行。

    上面提到InnoDB表是一定要有主键索引的,虽然索引占据空间,但是索引符合二分查找的算法,查找数据非常的快。

    1.5 全文索引

    全文索引也称为全文检索,可以通过以下sql建立全文索引:==ALTER TABLE employee ADD FULLTEXT fulltext_name(name)==;或者==CREATE INDEX==的方式创建。

    全文索引主要是针对==CHARVARCHARTEXT这种文本类的字段==有效

    索引一经创建就没有办法修改,若是想要修改索引,必须重建,可以使用以下sql来删除索引:

    DROP INDEX fulltext_name ON employee;
    

    1.6 聚簇索引和非聚簇索引

    聚簇索引就是叶子节点中存储的就是完整的行数据,索引和数据存储在一起;而非聚簇索引的索引文件和数据文件是分开的,所以查询数据会多一次查询

    因此聚簇索引的查询速度会快于非聚簇索引的查询速度,在Mysql的存储引擎中,「InnoDB支持聚簇索引,MyISAM不支持聚簇索引,MyISAM支持非聚簇索引」

    2 索引原则和优化

    1. 索引列不要在表达式中出现,这样会导致索引失效。如:「SELECT … WHERE id+1=5」;
    2. 索引列不要作为函数的参数使用。
    3. 索引列尽量不要使用like关键字。如:「SELECT … WHERE name like ‘%d%’」;
    4. 数字型的索引列不要当作字符串类型进行条件查询。如:「SELECT … WHERE id = ‘35’」;
    5. 尽量不要在条件NOT IN、<>、!= 中使用索引。
    6. 在索引列的字段中不要出现NULL值,NULL值会使索引失效,可以用特殊的字符比如空字符串’ '或者0来代替NULL值。
    7. 联合索引的查询应该遵循最左前缀原则。
    8. 一般对于区别性比较大的字段建立索引,在联合索引中区别性比较大(识别度比较高)放在最前面,提高索引的命中率。
    9. 索引的大小要适度,不易过大,避免索引的冗余。

    3 数据库引擎种类

    数据库引擎种类 说明
    MyISAM 高速引擎,拥有较高的插入,查询速度,但不支持事务
    InnoDB 5.5.5版本后MySQL的默认数据库引擎,支持事务和行级锁定,比MyISAM处理速度较慢
    ISAM MyISAM的前身,MySQL5.0 后不在默认安装
    MRG_MyISAM(MERGE) 将多个表建成一个表使用,在超大规模数据存储时很有用
    Memory 内存引擎,拥有较高的插入,更新和查询效率,但是会占用数据量成正比的内存空间,只在内存中保存数据,意味数据可能丢失
    Falcon 一种新的存储引擎,支持事务的处理,传言可能时InnoDB的替代者
    Archive 将数据压缩后存储,非常适合存储大量的独立的,作为历史记录的数据,但是只能进行插入和查询操作
    CSV csv存储引擎基于csv格式文件存储数据 应用跨平台的数据交换

    show engines; 你可以看一下

    展开全文
  • 目录一、索引介绍1、索引概念1、索引作用2、索引分类1)普通索引2)唯一索引3)主键索引4)组合索引2、索引创建方法3、索引查看4、索引删除5、索引配置二、事务介绍1、事务概念2、事务ACID特点3、事务控制语句4...

    一、索引介绍

    1、索引概念

    数据库索引:是一个排序的列表,存储着索引值和这个值对应的物理地址,无需整张表查询,通过物理地址找到所需数据,但是需要额外的磁盘空间存放索引文件

    1、索引作用

    • 数据库利用各种快速定位技术,能够大大加快查询速率
    • 当表很大或查询涉及到多个表时,可以成千上百倍的提高查询速度
    • 可以降低数据库的IO成本,并且还可以降低数据库的排序成本
    • 通过创建唯一性索引保证数据的唯一性
    • 可以加快表之间的连接

    2、索引分类和创建

    1)普通索引

    • 最基本的索引类型,没有唯一性之类的限制
    • 创建普通索引方式:
      ##创建表时创建
      mysql> create table num (id int(2),name varchar(10),index id_index(id));
      ##直接创建
      mysql> create index id_index on info(id);
      ##修改表结构方式创建
      mysql> alter table info add index name_index (name);

    2)唯一索引

    • 与“普通索引”基本相同
    • 与普通索引的区别是索引列的所有值只能出现一次,即必须唯一
    • 创建唯一索引的方式
      ##创建表时创建
      mysql> create table num (id int(2),name varchar(10),unique index id_index(id));
      ##直接创建
      mysql> create unique index id_index on info(id);
      ##修改表结构方式创建
      mysql> alter table info add unique index name_index (name);
      唯一可以为空,但是空只能一次。

    3)主键索引

    • 是一种特殊的唯一索引,指定为“primary key”
    • 一个表只能有一个主键,不允许有空值(非空且唯一)
    • 创建主键索引的方式
      mysql> create table infos (id int,address varchar(50),primary key(id));
      mysql> create table infos (id int primary key,address varchar(50));

    4)组合索引

    • 可以是单列上创建的索引,也可以是在多列上创建的索引
    • 最左原则,从左往右依次执行
    • 创建组合索引的方式

    5)全文索引

    • 创建表时创建全文索引
      mysql> create table infom(id int(2) not null,name varchar(10),fulltext key name_index(name));
    • 在已存在的表上创建全文索引
      mysql> create fulltext index name_index on info(name);
    • 通过SQL语句alter table创建全文索引
      mysql> alter table infor add fulltext index name_index(name);

    6)索引创建原则

    ●表的主键、外键必须有索引
    ●数据量超过300行的表应该有索引
    ●经常与其他表进行连接的表,在连接字段上应该建立索引
    ●唯一性太差的字段不适合建立索引
    ●更新太频繁地字段不适合创建索引
    ●经常出现在 Where子句中的字段,特别是大表的字段,应该建立索引
    ●索引应该建在选择性高的字段上
    ●索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引

    2、索引查看

    • 语法格式
      show index from table_name\G;(\G:竖着显示)
    • 示例
    mysql> show index from infor\G;
    

    3、索引删除

    • 语法格式
      drop index name_index on table_name;
      alter table table_name drop index index_name;
    • 删除索引的示例
      mysql> drop index name_index on infor;
      mysql> alter table info drop index name_index;

    二、事务介绍

    1、事务概念

    ●事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行
    ●事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元
    ●适用于多用户同时操作的数据库系统的场景,如银行、保险公司及证券交易系统等等
    ●通过事务的整体性以保证数据的一致性
    ●如果事务成功了一部分,一部分未成功,则执行回滚,回到事务的起点,重新开始操作

    2、事务的ACID特点

    注:数据库设计三大范式
    第一范式:如果数据表中的所有字段值都是不可分解的原子值,就说明该数据库满足了第一范式。
    第二范式是在第一范式的基础上的。需要确保数据库表中的每一列都和主键有关,而不是只与主键的某一部分相关(主要针对联合主键而言)。也就是说在一个数据表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
    第三范式:确保每列都和主键列直接相关,而不是间接相关。

    ●原子性(Atomicity)
    事务是一个完整的操作,事务的各元素是不可分的
    事务中的所有元素必须作为一个整体提交或回滚
    如果事务中的任何元素失败,则整个事务将失败
    ●一致性(Consistency)
    当事务完成时,数据必须处于一致状态
    在事务开始前,数据库中存储的数据处于一致状态
    在正在进行的事务中,数据可能处于不一致的状态
    当事务成功完成时,数据必须再回到已知的一致状态
    ●隔离性(Isolation)
    对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务
    修改数据的事务可在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据
    ●持久性
    指不管系统是否发生故障,事务处理的结果都是永久的
    一旦事务被提交,事务的效果会被永久地保留在数据库中

    3、事务的控制语句

    ●MySQL事务默认是自动提交的,当SQL语句提交时事务便自动提交
    ●事务控制语句
    begin 事务的开始
    commit 提交
    rollback 回滚
    savepoint 存档点名称 存档点
    release savepoint 存档点名称 删除存档点
    rollback to 存档点名称 回滚到某个存档点
    set transaction 设置事务

    3、事务的控制方法

    ●手动对事务进行控制的方法
    事务处理命令控制事务
    begin:开始一个事务
    commit:提交一个事务
    rollback:回滚一个事务
    使用set命令进行控制
    set autocommit=0:禁止自动提交
    set autocommit=1:开启自动提交(默认)

    4、事务操作

    在这里插入图片描述
    在这里插入图片描述

    mysql> select * from class;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    +----+
    3 rows in set (0.00 sec)
    
    mysql> begin;    ###事务开始
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> insert into class values(3);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> select * from class;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    |  3 |
    +----+
    4 rows in set (0.00 sec)
    
    mysql> rollback;   ##回滚后,回到之前的操作,后面插入的数据没有执行
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select * from class;
    +----+
    | id |
    +----+
    |  1 |
    |  2 |
    |  3 |
    +----+
    3 rows in set (0.00 sec)
    
    

    注:只能向前回滚,无法向后回滚

    三种情况事务开始:
    begin;
    set autocommit=0;
    start transaction

    三种情况结束事务:
    commit;
    set autocommit=1;
    rollback

    三、存储引擎介绍

    1、存储引擎概念

    ●MySQL中的数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制、索引技巧、锁定水平并最终提供不同的功能和能力,这些不同的技术以及配套的功能在 MySQL中称为存储引擎
    ●存储引擎就是 MySQL将数据存储在文件系统中的存储方式或者存储格式
    ●目前 MySQL常用的两种存储引擎
    MyISAM
    InnoDB
    (innodb支持事务,myisam不支持事务)
    ●MySQL存储引擎是 MySQL数据库服务器中的组件,负责为数据库执行实际的数据I/O操作
    使用特殊存储引擎的主要优点之一在于:
    仅需提供特殊应用所需的特性
    数据库中的系统开销较小
    具有更有效和更高的数据库性能
    ●MySQL系统中,存储引擎处于文件系统之上,在数据保存到数据文件之前会传输到存储引擎,之后按照各个存储引擎的存储格式进行存储

    2、MyISAM介绍

    ●myisam不支持事务,也不支持外键
    ●访问速度快
    ●对事物完整性没有要求
    ●myisam在磁盘上存储成三个文件
    .frm文件存储表定义
    数据文件的扩展名为.MYD(MYData)
    索引文件的扩展名是.MYI(MYIndex)
    ●表级锁定形式,数据在更新时锁定整个表(不允许两个人同时操作)
    ●数据库在读写过程中相互阻塞
    会在数据写入的过程阻塞用户数据的读取
    也会在数据读取的过程中阻塞用户的数据写入
    ●数据单独写入或读取,速度过程较快且占用资源相对少
    ●myisam
    静态表
    动态表
    压缩表

    1)、MyISAM介绍

    ●公司业务不需要事务的支持
    ●单方面读取或写入数据比较多的业务
    ●myisam存储引擎数据读写都比较频繁场景不适合
    ●使用读写并发访问相对较低的业务
    ●数据修改相对较少的业务
    ●对数据业务一致性要求不是非常高的业务
    ●服务器硬件资源相对比较差

    3、InnoDB

    1)innodb特点介绍

    ●支持事务:支持4个事务隔离级别
    ●行级(读写分离)锁定,但是全表扫描仍然会是表级锁定
    ●读写阻塞与事务隔离级别相关
    ●具有非常高效的缓存特性:能缓存索引,也能缓存数据
    ●表与主键以簇的方式存储
    ●支持外键约束,5.5以前不支持全文索引,5.5版本以后支持全文索引
    ●对硬件资源要求还是比较高的场合

    2)innodb适用生产场景分析

    ●业务需要事务的支持
    ●行级锁定对高并发有很好的适应能力,但需确保查询是通过索引来完成
    ●业务数据更新较为频繁的场景
    如:论坛、微博等
    ●业务数据一致性要求较高
    如:银行业务
    ●硬件设备内存较大(因为事务都先放内存),利用innodb较好的缓存能力来提高内存利用率,减少磁盘IO的压力

    4、企业选择存储引擎依据

    ●需要考虑每个存储引擎提供的核心功能及应用场景
    ●支持的字段和数据类型
    所有引擎都支持通用的数据类型
    但不是所有的引擎都支持其它的字段类型,如二进制对象
    ●锁定类型:不同的存储引擎支持不同级别的锁定
    表锁定
    行锁定
    ●索引的支持:
    建立索引在搜索和恢复数据库中的数据时显著提供性能
    不同引擎提供不同的制作索引技术
    有些存储引擎不支持索引
    ●事务处理的支持
    提高在向表中更新和插入信息期间的可靠性
    可根据企业业务是否支持事务选择存储引擎

    5、修改存储引擎

    方法1:alter table 修改
    alter table table_name engine=引擎;
    方法2:修改my.cnf,指定默认存储引擎并重启服务
    在[mysqld]下面添加default-storage-engine=InnoDB
    方法3:create table创建表时指定存储引擎
    create table 表名(字段)engine=引擎

    展开全文
  • oracle数据库的条件约束

    千次阅读 2018-02-28 14:43:52
    oracle表约束类别有,主键约束、唯一约束、检查约束、外键约束、空/非空约束五种:主键约束特点:1.定义主键,起唯一标识作用,其值不能为空,也不能重复2.一个表只能定义一个主键约束3.建立主键约束同时,...

    oracle表的约束类别有,主键约束、唯一约束、检查约束、外键约束、和空/非空约束五种:

    主键约束特点:

    1.定义主键,起唯一标识作用,其值不能为空,也不能重复

    2.一个表中只能定义一个主键约束

    3.建立主键约束的同时,在该列上建立一个唯一性索引,可以为它制定存储位置和存储参数

    4.主键约束既可以是列约束,也可以是表级约束

    唯一性约束:

    1.定义为唯一性的某一列或多个列的组合的取值必须唯一

    2.如果某一列或多个列仅定义唯一性约束,而没有定义非空约束,则该约束列可以包含多个空值

    3.oracle自动在唯一性约束列上建立一个唯一性索引,可以为它指定存储位置和存储参数

    4.唯一性约束既可以是列级约束,也可以是表级约束

    检查约束特点:

    1.检查约束是用来限制列的取值范围的,其表达式中必须引用相应的列,并且表达式的计算结果必须是一个布尔值

    2.约束表达式中不能包含子查询,也不能包含sysdate,user,等sql函数和rowid,rownum等伪列

    3.一个列可以定义多个检查约束

    4.检查约束既可以是列级约束,也可以是表级约束

    外键约束特点:

    1.定义外键约束的列的取值要么是主表参照列的值,要么为空

    2.外键列只能参照于主表中的主键约束或唯一约束列

    3.可以在一列或多列组合上定义外键约束;

    4.外键约束既可以是列级约束,也可以是表级约束

    空/非空约束特点:

    1.在一个表中可以定义多个not null约束

    2.只能定义列级约束

    举例说明上面五种约束的用法:

    SQL>create table student(

            sno  number(6)  constraint s_pk primary key,

            sname   varchar2(10)  not null,

            sex char(2)  constraint s_ck1 check(sex in ('M','F')),

            sage number(6,2),

            constraint  s-ck2 check(sage between  18 and 60),

    );

    说明:

    在sno列上创建了一个名为s_pk的主键约束,为列级约束

    在sname列上创建了一个非空约束,系统自动命名,为列级约束

    在sex列上创建了一个检查约束,名为s_ck1,为列级约束,sex列取值只能为‘M’或‘F’

    在sage列上创建了一个检查约束,名称为s_ck2,为表级约束,sage列取值范围为18到60之间

    展开全文
  • 数据库的特点作用3.常见的数据库4.工具基本结构介绍5.认识一些基本常见命令二、win10系统安装mysql图形工具三、Mac系统安装MySQL数据库1.下载安装mysql2.启动mysql3.关闭mysql4.登录mysql四、MySQL基本操作...

    文章目录


    一、认识数据库

    1.什么是数据库

    数据库(Database)就是按照数据结构来组织,存储和管理数据的仓库。专业的数据库是专门]对数据进行创建,访问,管理,搜索等操作的软件,比起我们自己用文件读写的方式对象数据进行管理更加的方便,快速,安全。

    2.数据库的特点及作用

    • 对数据进行持久化的保存
    • 方便数据的存储和查询,速度快,安全,方便
    • 可以处理并发访问
    • 更加安全的权限管理访问机制

    3.常见的数据库

    在这里插入图片描述

    4.工具基本结构介绍

    在这里插入图片描述
    在这里插入图片描述

    5.认识一些基本常见命令

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、win10系统安装mysql和图形工具

    Windows安装MySQL5.7.17

    1. 在MySQL官网 http://dev.mysql.com/downloads/mysql/ 上面下载ZIP安装包(第二个:Windows (x86, 64- bit), ZIP Archive)。
      在这里插入图片描述
      在这里插入图片描述

    2. 下载完成后解压,将其放到想要安装的目录下。 例如:D:\MySQL5.7\mysql-5.7.17-winx64

    3. 新建一个my.ini配置文件,原始的my-default.ini配置文件只是个模版,不要在里面改动。 my.ini的内容如下:
      [mysql] default-character-set=utf8
      [mysqld] port = 3306
      basedir=D:\MySQL5.7\mysql-5.7.17-winx64
      datadir=D:\MySQL5.7\mysql-5.7.17- winx64\data
      max_connections=200
      character-set-server=utf8
      default-storage-engine=INNODB
      explicit_defaults_for_timestamp=true
      在这里插入图片描述
      选择一个编辑器打开,这里我用的是Notepad++,之后将上面的内容复制到my.ini文件中
      在这里插入图片描述

    4. 在安装路径下新建一个空的data文件夹。
      在这里插入图片描述
      在这里插入图片描述

    5. 以管理员身份运行cmd,进入bin目录,执行 mysqld --initialize-insecure --user=mysql 命令。不进行这一 步,安装完成之后无法启动服务。
      在这里插入图片描述
      在这里插入图片描述

    6. 依然在管理员cmd窗口的bin目录下,执行 mysqld install 命令安装。完成后会提示安装成功。
      在这里插入图片描述

    7. 依然在管理员cmd窗口的bin目录下,执行 net start mysql 命令启动MySQL服务。
      在这里插入图片描述

    8. 修改环境变量,添加"D:\MySQL5.7\mysql-5.7.17-winx64\bin"。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    9. 在普通cmd窗口中,进入bin目录,执行 mysql -u root -p 命令,默认没有密码,回车进入。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    三、Mac系统中安装MySQL数据库

    1.下载安装mysql

    brew install mysql@5.7
    在这里插入图片描述
    如果看到以下界⾯则表示已经下载安装成功
    在这里插入图片描述

    2.启动mysql

    mysql.server start

    3.关闭mysql

    mysql.server stop

    4.登录mysql

    mysql -u root -p

    四、MySQL的基本操作命令

    使用方法:

    • 方式一: 通过在命令行敲命令来操作 ( 有助于命令的掌握)
    • 方式二: 通过图型界面工具,如 Navicat 等(在熟练掌握后再使用)
    • 方式三:通过编程语言(python,php,java,go…)执行mysql命令

    SQL ( Structure query language ) 结构化查询语言
    SQL语言分为4个部分:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)

    SQL语句中的快捷键:

    • \G 格式化输出(文本式,竖立显示)
    • \s 查看服务器端信息
    • \c 结束命令输入操作
    • \q 退出当前sql命令行模式
    • \h 查看帮助

    1.通过命令行连接MySQL

    在这里插入图片描述
    数据库语法特点:

    1. SQL 语句可以换行, 要以分号结尾
      在这里插入图片描述

    2. SQL 语句可以换行, 要以分号结尾
      在这里插入图片描述

    3. 如果提示符为 '> 那么需要输入一个’回车
      在这里插入图片描述

    4. 命令打错了换行后不能修改, 可以用 \c 取消
      在这里插入图片描述

    2. 数据库操作

    • 查看数据库 show databases;
    • 创建数据库 create database 库名 default charset=utf8;
    • 删除数据库 drop database 库名;
    • 打开数据库 use 库名;

    3. 数据表操作

    数据库管理系统中, 可以有很多库, 每个数据库中可以包括多张数据表

    • 查看表: show tables;

    • 创建表: create table 表名(字段名1 类型,字段名2 类型)engine=innodb default charset=utf8;

    • 创建表: 如果表不存在,则创建, 如果存在就不执行这条命令
      create table if not exists 表名(字段1 类型,字段2 类型);
      在这里插入图片描述

    • 删除表: drop table 表名;

    • 表结构: desc 表名;

    • 查看建表语句:show create table users;
      在这里插入图片描述
      在这里插入图片描述
      插入内容:
      在这里插入图片描述
      删除表:
      在这里插入图片描述

    4.数据操作 增删改查

    插入

    • insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
    • insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);
      在这里插入图片描述
      查询
    • select * from 表名;
    • select 字段1,字段2,字段3 from 表名;
    • select * from 表名 where 字段=某个值;
      修改
    • update 表名 set 字段=某个值 where 条件;
    • update 表名 set 字段1=值1,字段2=值2 where 条件;
    • update 表名 set 字段=字段+值 where 条件;
      删除
    • delete from 表名 where 字段=某个值;
      退出MySQL
    • exit; 或者 quit;
      查询
      在这里插入图片描述
      修改
      在这里插入图片描述
      删除
      在这里插入图片描述

    五、MySQL中的数据类型

    1.MySQL的数据类型

    • 数据类型是定义列中可以存储什么类型的数据以及该数据实际怎样存储的基本规则
    • 数据类型限制存储在数据列列中的数据。例如,数值数据类型列只能接受数值类型的的数据
    • 在设计表时,应该特别重视所用的数据类型。使用错误的数据类型可能会严重地影响应用程序的功能和性能。
    • 更改包含数据的列不是一件小事(而且这样做可能会导致数据丢失)。
    • 数据类型:整型、浮点型、字符串、日期等
    1. 字符串数据类型
      最常用的数据类型是串数据类型。它们存储串,如名字、地址、电 话号码、邮政编码等。
      不管使用何种形式的串数据类型,串值都必须括在引号内
      有两种基本的串类型,分别为定长串和变长串
    • 定长串:char
      接受长度固定的字符串,其长度是在创建表时指定的。
      定长列不允许存储多于指定长度字符的数据。
      指定长度后,就会分配固定的存储空间用于存放数据

    char(7) 不管实际插入多少字符,它都会占用7个字符位置

    • 变长串 varchar
      存储可变长度的字符串 varchar(7) 如果实际插入4个字符, 那么它只占4个字符位置,当然插入的数据长度不能超过7 个字符。

    注意

    既然变长数据类型这样灵活,为什么还要使用定长数据类型?
    回答:因为性能,MySQL处理定长列远比处理变长列快得多。

    • Text 变长文本类型存储
      在这里插入图片描述
    1. 数值类型
      数值数据类型存储数值。MySQL支持多种数值数据类型,每种存储的数值具有不同的取值范围。支持的取值范围越 大,所需存储空间越多。
      与字符串不一样,数值不应该括在引号内。
      在这里插入图片描述

    decimal(5, 2) 表示数值总共5位, 小数占2位
    tinyint 1字节(8位) 0-255。-128,127
    int 4字节。 -21亿,21亿。0-42亿
    MySQL中没有专门存储货币的数据类型,一般情况下使用DECIMAL(8, 2)

    有符号或无符号
    所有数值数据类型(除BIT和BOOLEAN外)都可以有符号或无符号

    • 有符号数值列可以存储正或负的数值
    • 无符号数值列只能存储正数。
    • 默认情况为有符号,但如果你知道自己不需要存储负值,可以使用UNSIGNED关键字
    1. 日期和时间类型
      MySQL使用专门的数据类型来存储日期和时间值
      在这里插入图片描述

    datetime 8字节1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    1. 二进制数据类型
      二进制数据类型可存储任何数据(甚至包括二进制信息),如图像、多媒体、字处理文档等
      在这里插入图片描述

    六、MySQL中的类型约束和运算

    1.表的字段约束

    • unsigned 无符号(给数值类型使用,表示为正数,不写可以表示正负数都可以)
    • 字段类型后面加括号限制宽度
      – char(5). varchar(7) 在字符类型后面加限制 表示 字符串的长度
      – int(4) 没有意义,默认无符号的int为int(11),有符号的int(10)
      – int(4) unsigned zerofill只有当给int类型设置有前导零时,设置int的宽度才有意义。
    • not null 不能为空,在操作数据库时如果输入该字段的数据为NULL ,就会报错
    • default 设置默认值
    • primary key 主键不能为空,且唯一.一般和自动递增一起配合使用。
    • auto_increment 定义列为自增属性,一般用于主键,数值会自动加1
    • unique 唯一索引(数据不能重复:用户名)可以增加查询速度,但是会降低插入和更新速度

    2.MySQL的运算符

    • 算术运算符: +、 -、 *、 /、 %
    • 比较运算符: =、 >、 <、 >=、 <=、!=
    • 数据库特有的比较: in、not in、is null、is not null、like、between、and
    • 逻辑运算符: and、or、not
    • like: 支持特殊符号%和_ ;

    其中%表示任意数量的任意字符,_表示任意一位字符

    3.主键

    1. 表中每一行都应该有可以唯一标识自己的一列,用于记录两条记录不能重复,任意两行都不具有相同的主键值
    2. 应该总是定义主键 虽然并不总是都需要主键,但大多数数据库设计人员都应保证他们创建的每个表具有一个主 键,以便于以后的数据操纵和管理

    要求

    • 记录一旦插入到表中,主键最好不要再修改
    • 不允许NULL
    • 不在主键列中使用可能会更改的值。

    (例如,如果使用一个名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)

    • 自增整数类型:数据库会在插入数据时自动为每一条记录分配一个自增整数,这样我们就完全不用担心主键 重复,也不用自己预先生成主键
    • 可以使用多个列作为联合主键,但联合主键并不常用。使用多列作为主键时,所有列值的组合必须是唯一的

    七、MySQL数据表操作详解

    • 数据库的操作
      –数据库创建
      –数据库删除
    • 数据表的操作
      –数据表的创建
      –数据表的修改 (表结构)
      –数据表的删除

    1.数据库的操作

    1. 数据库的创建
    # 链接mysql数据库后,进入mysql后可以操作数据
    # 1. 创建库
    create database if not exists tlxy default charset=utf8;
    -- 1. 数据库 tlxy 如果不存在则创建数据库,存在则不创建
    -- 2. 创建 tlxy 数据库,并设置字符集为utf8
    -- 3. 无特殊情况都要求字符集为utf8或者utf8mb4的字符编码
    
    1. 查看所有库
    # 1. 查看所有库
    show databases;
    
    1. 打开库/进入库/选择库
    # use 库名
    use tlxy
    
    1. 删除库
    # 删除库,那么库中的所有数据都将在磁盘中删除。
    drop database 库名
    

    2.数据表的操作

    1. 创建表

    语法格式:
    create table 表名(字段名,类型,【字段约束】,……);

    实例:

    # 以下创建一个 users 的表
    create table users(
    	-- 创建ID字段,为正整数,不允许为空 主键,自动递增
    	id int unsigned not null primary key auto_increment,
    	-- 创建 存储 名字的字段,为字符串类型,最大长度 5个字符,不允许为空
    	username varchar(5) not null,
    	-- 创建存储 密码 的字段,固定长度 32位字符, 不允许为空
    	password char(32) not null,
    	-- 创建 年龄 字段,不允许为空,默认值为 20
    	age tinyint not null default 20
    )engine=innodb default charset=utf8;
    
    # 查看表结构
    desc users;
    
    #查看建表语句
    show create table users;
    

    创建表的基本原则:

    • 表明和字段名 尽可能的符合命名规范,并且最好能够‘见名之意’
    • 表中数据必须有唯一标识,即主键定义。无特殊情况,主键都为数字并自增即可
    • 表中字段所对应的类型设置合理,并限制合理长度
    • 表引擎推荐使用innodb,并无特殊情况都要求为utf8或者utf8mb4的字符编码
    1. 修改表结构

    语法格式:alter table 表名 action (更改的选项)

    添加字段

    # 语法:alter table 表名 add 添加的字段信息
    -- 在 users 表中 追加 一个 num 字段
    alter table users add num int not null;
    
    -- 在指定字段后面追加字段 在 users 表中 age字段后面 添加一个 email 字段
    alter table users add email varchar(50) after age;
    
    -- 在指定字段后面追加字段,在 users 表中 age字段后面 添加一个 phone
    alter table users add phone char(11) not null after age;
    
    -- 在表的最前面添加一个字段
    alter table users add aa int first;
    
    

    删除字段

    # 删除字段 alter table 表名 drop 被删除的字段名
    alter table users drop aa;
    

    修改字段

    语法格式: alter table 表名 change|modify 被修改的字段信息
    change: 可以修改字段名,
    modify: 不能修改字段名。
    
    # 修改表中的 num 字段 类型,使用 modify 不修改表名
    alter table users modify num tinyint not null default 12;
    
    # 修改表中的 num 字段 为 int并且字段名为 nn
    alter table users change num mm int;
    
    # 注意:一般情况下,无特殊要求,不要轻易修改表结构
    
    1. 修改表名

    语法:alter table 原表名 rename as 新表名

    1. 更改表中的自增的值
    # 在常规情况下,auto_increment 默认从1开始继续递增
    alter table users auto_increment = 1000;
    
    1. 修改表引擎
    # 推荐在定义表时,表引擎为 innodb。
    # 通过查看建表语句获取当前的表引擎
    mysql> show create table users\G;
    *************************** 1. row ***************************
    	Table: users
    Create Table: CREATE TABLE `users` (
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8
    1 row in set (0.00 sec)
    
    # 直接查看当前表状态信息
    mysql> show table status from tlxy where name = 'users'\G;
    *************************** 1. row ***************************
    	 Name: users
    	Engine: InnoDB
    
    # 修改表引擎语句
    alter table users engine = 'myisam';
    
    1. 删除表
    drop table 表名
    

    八、MySQL数据库中的表引擎

    1.服务器处理客户端请求

    其实不论客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:**客户端进程向服务器进程发送 一段文本(MySQL语句),服务器进程处理后再向客户端进程发送一段文本(处理结果)。**那服务器进程对客户 端进程发送的请求做了什么处理,才能产生最后的处理结果呢?客户端可以向服务器发送增删改查各类请求,我们 这里以比较复杂的查询请求为例来画个图展示一下大致的过程:
    在这里插入图片描述

    虽然查询缓存有时可以提升系统性能,但也不得不因维护这块缓存而造成一些开销,比如每次都要去查询缓 存中检索,查询请求处理完需要更新查询缓存,维护该查询缓存对应的内存区域。从MySQL 5.7.20开始,不 推荐使用查询缓存,并在MySQL 8.0中删除。

    2.存储引擎

    MySQL 服务器把数据的存储和提取操作都封装到了一个叫 存储引擎 的模块里。我们知道 是由一行一行的记录 组成的,但这只是一个逻辑上的概念,物理上如何表示记录,怎么从表中读取数据,怎么把数据写入具体的物理存 储器上,这都是 存储引擎 负责的事情。为了实现不同的功能, MySQL 提供了各式各样的 存储引擎 ,不同 存储引 擎 管理的表具体的存储结构可能不同,采用的存取算法也可能不同。

    存储引擎以前叫做 表处理器 ,它的功能就是接收上层传下来的指令,然后对表中的数据进行提取或写入操 作。

    为了管理方便,人们把 连接管理 、 查询缓存 、 语法解析 、 查询优化 这些并不涉及真实数据存储的功能划分为 MySQL server 的功能,把真实存取数据的功能划分为 存储引擎 的功能。各种不同的存储引擎向上边的 MySQL server 层提供统一的调用接口(也就是存储引擎API),包含了几十个底层函数,像"读取索引第一条内容"、“读取 索引下一条内容”、"插入记录"等等。

    所以在 MySQL server 完成了查询优化后,只需按照生成的执行计划调用底层存储引擎提供的API,获取到数据后返 回给客户端就好了。

    MySQL 支持非常多种存储引擎:

    存储引擎 描述
    ARCHIVE 用于数据存档(行被插入后不能再修改)
    BLACKHOLE 丢弃写操作,读操作会返回空内容
    CSV 在存储数据时,以逗号分隔各个数据项
    FEDERATED 用来访问远程表
    InnoDB 具备外键支持功能的事务存储引擎
    MEMORY 置于内存的表
    MERGE 用来管理多个MyISAM表构成的表集合
    MyISAM 主要的非事务处理存储引擎
    NDB MySQL集群专用存储引擎

    3.MyISAM和InnoDB表引擎的区别

    1. 事务支持
      MyISAM不支持事务,而InnoDB支持。

    事物:访问并更新数据库中数据的执行单元。事物操作中,要么都执行要么都不执行

    1. 存储结构
      MyISAM:每个MyISAM在磁盘上存储成三个文件。
    • .frm文件存储表结构。
    • .MYD文件存储数据。
    • .MYI文件存储索引。
      InnoDB:主要分为两种文件进行存储
    • .frm 存储表结构
    • .ibd 存储数据和索引 (也可能是多个.ibd文件,或者是独立的表空间文件)
    1. 表锁差异
      MyISAM只支持表级锁,用户在操作myisam表时,select,update,delete,insert语句都会给表自动加锁,如 果加锁以后的表满足insert并发的情况下,可以在表的尾部插入新的数据。
      InnoDB支持事务和行级锁,是 innodb的最大特色。行锁大幅度提高了多用户并发操作的新能。但是InnoDB的行锁,只是在WHERE的主键是有 效的,非主键的WHERE都会锁全表的。

    2. 表主键
      MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址。
      InnoDB:如果没有设定主键或者非空唯 一索引,就会自动生成一个6字节的主键(用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值。 InnoDB的主键范围更大,最大是MyISAM的2倍。

    3. 表的具体行数
      MyISAM:保存有表的总行数,如果select count() from table;会直接取出出该值。
      InnoDB:没有保存表的总行数 (只能遍历),如果使用select count() from table;就会遍历整个表,消耗相当大,但是在加了wehre条件后, myisam和innodb处理的方式都一样。

    4. CURD操作
      MyISAM:如果执行大量的SELECT,MyISAM是更好的选择。
      InnoDB:如果你的数据执行大量的INSERT或 UPDATE,出于性能方面的考虑,应该使用InnoDB表。DELETE 从性能上InnoDB更优,但DELETE FROM table 时,InnoDB不会重新建立表,而是一行一行的删除,在innodb上如果要清空保存有大量数据的表,最好使用 truncate table这个命令。

    5. 外键
      MyISAM:不支持
      InnoDB:支持

    6. 查询效率
      MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。
      推荐考虑使用InnoDB来替代MyISAM引擎,原因是InnoDB自身很多良好的特点,比如事务支持、存储 过程、视 图、行级锁定等等,在并发很多的情况下,相信InnoDB的表现肯定要比MyISAM强很多。
      另外,任何一种表都不是万能的,只用恰当的针对业务类型来选择合适的表类型,才能最大的发挥MySQL的性能优 势。如果不是很复杂的Web应用,非关键应用,还是可以继续考虑MyISAM的,这个具体情况可以自己斟酌。

    7. MyISAM和InnoDB两者的应用场景
      MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那 么MyISAM是更好的选择。
      InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要 执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。现在默认使用 InnoDB。

    九、MySQL中的字符集utf8

    1.了解一下字符集和乱码

    字符集简介
    我们知道在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系了, 建立这个关系最起码要搞清楚两件事儿:

    1. 你要把哪些字符映射成二进制数据?
      也就是界定清楚字符范围。
    2. 怎么映射?
      将一个字符映射成一个二进制数据的过程也叫做 编码 ,将一个二进制数据映射到一个字符的过程叫做 解 码

    人们抽象出一个 字符集 的概念来描述某个字符范围的编码规则

    我们看一下一些常用字符集的情况:

    • ASCII 字符集
      共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所 以可以使用1个字节来进行编码,我们看一些字符的编码方式:

    ‘L’ -> 01001100(十六进制:0x4C,十进制:76)
    ‘M’ -> 01001101(十六进制:0x4D,十进制:77)

    • ISO 8859-1 字符集
      共收录256个字符,是在 ASCII 字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以 使用1个字节来进行编码。这个字符集也有一个别名 latin1 。
    • GB2312 字符集
      收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个, 其他文字符号682个。同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪:
      –如果该字符在 ASCII 字符集中,则采用1字节编码。
      –否则采用2字节编码。
      这种表示一个字符需要的字节数可能不同的编码方式称为 变长编码方式 。比方说字符串 ‘爱u’ ,其 中 ‘爱’ 需要用2个字节进行编码,编码后的十六进制表示为 0xCED2 , ‘u’ 需要用1个字节进行编码,编码后 的十六进制表示为 0x75 ,所以拼合起来就是 0xCED275 。

    小贴士: 我们怎么区分某个字节代表一个单独的字符还是代表某个字符的一部分呢?别忘了 ASCII 字 符集只收录128个字符,使用0~127就可以表示全部字符,所以如果某个字节是在0~127之内的,就意 味着一个字节代表一个单独的字符,否则就是两个字节代表一个单独的字符。

    • GBK 字符集
      GBK 字符集只是在收录字符范围上对 GB2312 字符集作了扩充,编码方式上兼容 GB2312 。
    • utf8 字符集
      收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容 ASCII 字符集,采用变长编码方式,编 码一个字符需要使用1~4个字节,比方说这样:

    ‘L’ -> 01001100(十六进制:0x4C)
    ‘啊’ -> 111001011001010110001010(十六进制:0xE5958A)

    小贴士: 其实准确的说,utf8只是Unicode字符集的一种编码方案,Unicode字符集可以采用utf8、 utf16、utf32这几种编码方案,utf8使用1~4个字节编码一个字符,utf16使用2个或4个字节编码一个 字符,utf32使用4个字节编码一个字符。更详细的Unicode和其编码方案的知识不是本书的重点,大家 上网查查哈~ MySQL中并不区分字符集和编码方案的概念,所以后边唠叨的时候把utf8、utf16、utf32 都当作一种字符集对待。

    对于同一个字符,不同字符集也可能有不同的编码方式。比如对于汉字 ‘我’ 来说, ASCII 字符集中根本没有收录 这个字符, utf8 和 gb2312 字符集对汉字 我 的编码方式如下:

    utf8编码:111001101000100010010001 (3个字节,十六进制表示是:0xE68891)
    gb2312编码:1100111011010010 (2个字节,十六进制表示是:0xCED2)

    2.MySQL中的utf8和utf8mb4

    我们上边说 utf8 字符集表示一个字符需要使用1~4个字节,但是我们常用的一些字符使用1~3个字节就可以表示 了。而在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以设计 MySQL 的大叔偷偷的定义了两个概念:

    • utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
    • utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

    有一点需要大家十分的注意,在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用 1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使 用 utf8mb4 。

    字符集的查看

    MySQL 支持好多好多种字符集,查看当前 MySQL 中支持的字符集可以用下边这个语句:

    show charset;
    

    十、MySQL的DML操作数据的增删改

    数据的DML操作:添加数据,修改数据,删除数据

    1.添加数据

    格式: insert into 表名[(字段列表)] values(值列表…);

    --标准添加(指定所有字段,给定所有的值)
    mysql> insert into stu(id,name,age,sex,classid) values(1,'zhangsan',20,'m','lamp138');
    Query OK, 1 row affected (0.13 sec)
    
    mysql>
    --指定部分字段添加值
    mysql> insert into stu(name,classid) value('lisi','lamp138');
    Query OK, 1 row affected (0.11 sec)
    
    -- 不指定字段添加值
    mysql> insert into stu value(null,'wangwu',21,'w','lamp138');
    Query OK, 1 row affected (0.22 sec)
    
    -- 批量添加值
    mysql> insert into stu values
    	-> (null,'zhaoliu',25,'w','lamp94'),
    	-> (null,'uu01',26,'m','lamp94'),
    	-> (null,'uu02',28,'w','lamp92'),
    	-> (null,'qq02',24,'m','lamp92'),
    	-> (null,'uu03',32,'m','lamp138'),
    	-> (null,'qq03',23,'w','lamp94'),
    	-> (null,'aa',19,'m','lamp138');
    Query OK, 7 rows affected (0.27 sec)
    Records: 7 Duplicates: 0 Warnings: 0
    

    2.修改数据

    格式:update 表名 set 字段1=值1,字段2=值2,字段n=值n… where 条件

    -- 将id为11的age改为35,sex改为m值
    mysql> update stu set age=35,sex='m' where id=11;
    Query OK, 1 row affected (0.16 sec)
    Rows matched: 1 Changed: 1 Warnings: 0
    
    -- 将id值为12和14的数据值sex改为m,classid改为lamp92
    mysql> update stu set sex='m',classid='lamp92' where id=12 or id=14 --等价于下面
    mysql> update stu set sex='m',classid='lamp92' where id in(12,14);
    Query OK, 2 rows affected (0.09 sec)
    
    Rows matched: 2 Changed: 2 Warnings: 0
    

    3.删除数据

    格式:delete from 表名 [where 条件]

    -- 删除stu表中id值为100的数据
    mysql> delete from stu where id=100;
    Query OK, 0 rows affected (0.00 sec)
    
    -- 删除stu表中id值为20到30的数据
    mysql> delete from stu where id>=20 and id<=30;
    Query OK, 0 rows affected (0.00 sec)
    
    -- 删除stu表中id值为20到30的数据(等级于上面写法)
    mysql> delete from stu where id between 20 and 30;
    Query OK, 0 rows affected (0.00 sec)
    
    -- 删除stu表中id值大于200的数据
    mysql> delete from stu where id>200;
    Query OK, 0 rows affected (0.00 sec) 
    

    十一、MySq查询语句-健硕数据select

    SQL示例:

    -- 创建表
    CREATE TABLE `stu` (
    	`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    	`name` varchar(10) NOT NULL,
    	`email` char(50) NOT NULL,
    	`phone` char(11) NOT NULL,
    	`age` tinyint(4) NOT NULL,
    	`sex` char(1) DEFAULT NULL,
    	`class_id` int(10) DEFAULT NULL,
    	PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
    
    -- 添加数据
    insert into stu values
    (null,'张三','zhangsan@qq.com','13701104321',21,'男',1),
    (null,'李四','lisi@qq.com','13701104322',22,'男',1),
    (null,'王五','wangwu@qq.com','13701104323',20,'⼥',1),
    (null,'赵六','zhaoliu@qq.com','13701104324',19,'男',1),
    (null,'⽥七','tianqi@qq.com','13701104325',23,'⼥',1),
    (null,'王五六','wangwuliu@qq.com','13701104326',23,'⼥',1),
    (null,'熊⼤','xiongda@qq.com','13701104327',25,'男',2),
    (null,'熊⼆','xionger@qq.com','13701104328',22,'男',2),
    (null,'⼀⼀','yiyi@qq.com','13701104329',19,'⼥',2),
    (null,'呀呀','yaya@qq.com','13701104320',22,'男',2);
    
    -- 查看表数据
    select * from stu;
    

    检索数据select

    1. 检索单个列
    select name from stu
    

    如果没有明确排序查询结果(下⼀章介绍),则返回的数据的顺序没有特殊意义。
    返回数据的顺序可能是数据被添加到表中的顺序,也可能不是。只要返回相同数⽬的⾏,就是正常的。

    1. 检索多个列
    select id,name,age,sex from stu
    

    在选择多个列时,⼀定要在列名之间加上逗号,但最后⼀个列名后不加。
    如果在最后⼀个列名后加了逗号,将出现错误。

    1. 检索所有列
    select * from stu
    

    使⽤通配符 ⼀般,除⾮你确实需要表中的每个列,否则最好别使⽤*通配符。
    虽然使⽤通配符可能会使你⾃⼰省事,不⽤明确列出所需列,但检索不需要的列通常会降低检索和应⽤程序的性能。
    使⽤通配符有⼀个⼤优点。由于不明确指定列名(因为星号检索每个列),所以能检索出名字未知的列。

    1. 检索不同的⾏ DISTINCT
    select distinct classid from stu
    

    DISTINCT关键字,顾名思义,此关键字指示MySQL只返回不同的值
    DISTINCT关键字应⽤于所有列⽽不仅是前置它的列。
    如果给出SELECT DISTINCT vend_id, prod_price,除⾮指定的两个列都不同,否则所有⾏都将被检索出来

    1. 限制结果 LIMIT
    select * from stu limit 3,4
    

    LIMIT 3, 4的含义是从⾏3开始的4⾏.(跳过前3⾏,取4⾏)
    替代语法 LIMIT 4 OFFSET 3意为从⾏3开始取4⾏,就像LIMIT 3, 4⼀样。

    1. 使⽤完全限定的表名
    select name from stu
    select stu.name from stu
    select stu.name from chuange.stu
    

    十二、MySQL数据查询-OrderBy排序

    1.排序数据 ORDER BY

    select * from stu order by age
    

    默认查询出的数据,并不是随机排序的,如果没有指定排序,数据⼀般将以它在底层表中出现的顺序显示
    关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义
    通常,ORDER BY⼦句中使⽤的列将是为显示所选择的列。
    但是,实际上并不⼀定要这样,⽤⾮检索的列排序数据是完全合法的。

    2.按多个列排序

    select * from stu order by classid,age
    

    在需要对多列数据进⾏排序时,使⽤逗号分隔列名,并会按照前后顺序依次对⽐排序。
    order by 的排序默认升序,可以使⽤DESC设置降序排列。

    select * from stu order by classid,age DESC
    

    以上语句就是先对classid进⾏升序排序,然后在结果中对age进⾏降序排序

    注意

    ORDER BY⼦句的位置 在给出ORDER BY⼦句时,应该保证它位于FROM⼦句之后。
    如果使⽤LIMIT,它必须位于ORDER BY之后。使⽤⼦句的次序不对将产⽣错误消息。

    十三、MySQL数据查询之Where条件

    数据库表⼀般包含⼤量的数据,很少需要检索表中所有⾏。
    通常只会根据特定操作或报告的需要提取表数据的⼦集。
    只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filter condition)。 在SELECT语句中,数据根据WHERE⼦句中指定的搜索条件进⾏过滤。

    select name from stu where age = 22
    

    在同时使⽤ORDER BY和WHERE⼦句时,应该让ORDER BY位于WHERE之后,否则将会产⽣错误

    1.WHERE⼦句操作符

    操作符 说明
    = 等于
    <> != 不等于
    < ⼩于
    <= ⼩于等于
    > ⼤于
    >= ⼤于等于
    BETWEEN … and… 指定两个值之间
    IS NULL 空值

    2.组合WHERE⼦句

    MySQL允许给出多个WHERE⼦句。
    这些⼦句可以两种⽅式使⽤:以AND⼦句的⽅式或OR⼦句的⽅式使⽤。也称为逻辑操作符。

    select name from stu where age = 22 and sex = 'm'
    

    AND ⽤在WHERE⼦句中的关键字,⽤来指示检索满⾜所有给定条件的⾏

    select name from stu where age = 22 or sex = 'm'
    

    OR ⽤来表示检索匹配任⼀给定条件的⾏

    AND与OR

    WHERE可包含任意数⽬的AND和OR操作符。允许两者结合以进⾏复杂和⾼级的过滤。
    但是,组合AND和OR带来了⼀个有趣的问题。

    例如:我需要在数据库中查询出1期或2期的学员,并且要求是⼥⽣

    select name from stu where class_id=1 or class_id =2 and sex='m'
    

    以上语句不会按照预期检索出正确的数据,问题出在哪⾥?
    原因在于计算的次序。SQL在处理OR操作符前,优先处理AND操作符。
    当SQL看到上述WHERE⼦句时,它理解是 1期班级的所有⼥⽣,或者2期的所有学员,⽽不分性别。换句话说,由于AND在计算次序中优先级更⾼,操作符被错误地组合了。

    因此想要解决就需要提升优先级,使⽤圆括号明确地分组相应的操作符

    select name from stu where (class_id=1 or class_id =2) and sex='m'
    

    因为圆括号具有较AND或OR操作符⾼的计算次序,数据库⾸先过滤圆括号内的OR条件。
    这时,SQL语句变成了获取1期或2期的学员并且要求是⼥⽣

    IN与NOT

    IN操作符⽤来指定条件范围,范围中的每个条件都可以进⾏匹配。

    select name from stu where class_id in (1,2)
    

    IN WHERE⼦句中⽤来指定要匹配值的清单的关键字,功能与OR相当

    为什么要使⽤IN操作符?其优点具体如下:

    • 在使⽤⻓的合法选项清单时,IN操作符的语法更清楚且更直观。
    • 在使⽤IN时,计算的次序更容易管理(因为使⽤的操作符更少)。
    • IN操作符⼀般⽐OR操作符清单执⾏更快。
    • IN的最⼤优点是可以包含其他SELECT语句,使得能够更动态地建⽴WHERE⼦句。

    NOT WHERE⼦句中⽤来否定后跟条件的关键字

    select name from stu where class_id not in (1,2)
    

    为什么使⽤NOT?对于简单的WHERE⼦句,使⽤NOT确实没有什么优势。
    但在更复杂的⼦句中,NOT是⾮常有⽤的。
    例如,在与IN操作符联合使⽤时,NOT使找出与条件列表不匹配的⾏⾮常简单。

    十四、MySQL查询语句-Like与通配符

    前⾯介绍的所有操作符都是针对已知值进⾏过滤的。
    但是,这种过滤⽅法并不是任何时候都好⽤。
    例如,怎样搜索姓名中包含⽂本a的所有⽤户?⽤简单的⽐较操作符肯定不⾏,必须使⽤通配符。
    为在搜索⼦句中使⽤通配符,必须使⽤LIKE操作符。
    LIKE指示MySQL,后跟的搜索模式利⽤通配符匹配⽽不是直接相等匹配进⾏⽐较。

    • 百分号(%)通配符 在搜索串中,%表示任何字符出现任意次数
    select name from stu where name like 'a%'
    select name from stu where name like '%a'
    select name from stu where name like '%a%'
    
    • 下划线(_)通配符 下划线的⽤途与%⼀样,但下划线只匹配单个字符⽽不是多个字符
    • 使⽤通配符的技巧

    正如所⻅,MySQL的通配符很有⽤。
    但这种功能是有代价的:通配符搜索的处理⼀般要⽐前⾯讨论的其他搜索所花时间更⻓。
    这⾥给出⼀些使⽤通配符要记住的技巧

    1. 不要过度使⽤通配符。如果其他操作符能达到相同的⽬的,应该使⽤其他操作符。
    2. 在确实需要使⽤通配符时,除⾮绝对有必要,否则不要把它们⽤在搜索模式的开始处。
    3. 把通配符置于搜索模式的开始处,搜索起来是最慢的。
    4. 仔细注意通配符的位置。如果放错地⽅,可能不会返回想要的数据
    • 了解下MySQL的正则 REGEXP

    所有种类的程序设计语⾔、⽂本编辑器、操作系统等都⽀持正则表达式

    select name from stu where name regexp '[0-5]abc'
    

    十五、MysQL查询之字段的计算

    存储在数据库表中的数据⼀般不是应⽤程序所需要的格式。下⾯举⼏个例⼦

    • 如果想在⼀个字段中既显示⽤户名,⼜显示班级号,但这两个信息⼀般包含在不同的表列中。
    • 同时姓名、⼿机号和地址存储在不同的列中(应该这样),但快递单打印程序却需要把它们作为⼀个恰当格式的字段检索出来。
    • 列数据是⼤⼩写混合的,但报表程序需要把所有数据按⼤写表示出来。
    • 物品订单表存储物品的价格和数量,但不需要存储每个物品的总价格(⽤价格乘以数量即可)。为打印发票,需要物品的总价格。
    • 需要根据表数据进⾏总数、平均数计算或其他计算。

    计算字段并不实际存在于数据库表中。计算字段是运⾏时在SELECT语句内创建的

    拼接 Concat

    stu表包含⽤户名和⼿机号码信息。假如要⽣成⼀个学⽣报表,需要在学⽣的名字中按照name(phone)这样的格式列出。
    解决办法是把两个列拼接起来。在MySQL的SELECT语句中,可使⽤Concat()函数来拼接两个列。

    select concat(name,'(',phone')') from stu
    

    使⽤别名 AS

    SELECT语句拼接字段可以完成。但此新计算列的名字是什么呢?实际上它没有名字,它只是⼀个值。
    如果仅在SQL查询⼯具中查看⼀下结果,这样没有什么不好。
    但是,⼀个未命名的列不能⽤于客户机应⽤中,因为客户机没有办法引⽤它。
    为了解决这个问题,SQL⽀持列别名。别名(alias)是⼀个字段或值的替换名。别名⽤AS关键字赋予。

    select concat(name,'(',phone')') from stu as name_phone from stu
    

    计算

    在mysql中可以对列中的字段进⾏计算,使⽤基本算术操作符,此外,圆括号可⽤来区分优先顺序。

    运算符 说明
    +
    -
    *
    /

    SELECT提供了测试和试验函数与计算的⼀个很好的办法。
    虽然SELECT通常⽤来从表中检索数据,但可以省略FROM⼦句以便简单地访问和处理表达式。
    例如,SELECT 3*2;将返回6,SELECT Trim(‘abc’);将返回abc,⽽SELECT Now()利⽤Now()函数返回当前⽇期和时间。
    通过这些例⼦,可以明⽩如何根据需要使⽤SELECT进⾏试验。

    十六、MySQL查询之常用函数介绍

    与其他⼤多数计算机语⾔⼀样,SQL⽀持利⽤函数来处理数据。
    函数⼀般是在数据上执⾏的,它给数据的转换和处理提供了⽅便。

    ⽂本处理函数

    函数 说明
    Left() 返回串左边的字符
    Length() 返回串的⻓度
    Locate() 找出串的⼀个⼦串
    Lower() 将串转换为⼩写
    LTrim() 去掉串左边的空格
    Right() 返回串右边的字符
    RTrim() 去掉串右边的空格
    SubString() 返回⼦串的字符 **
    Upper() 将串转换为⼤写
    Concat 拼接字符串. **

    ⽇期和时间处理函数

    函数 说明
    AddTime() 增加⼀个时间(时、分等)
    CurDate() 返回当前⽇期 **
    CurTime() 返回当前时间 **
    Date() 返回⽇期时间的⽇期部分
    DateDi"() 计算两个⽇期之差. **
    Date_Add() ⾼度灵活的⽇期运算函数
    Date_Format() 返回⼀个格式化的⽇期或时间串
    Day() 返回⼀个⽇期的天数部分
    DayOfWeek() 对于⼀个⽇期,返回对应的星期⼏
    Hour() 返回⼀个时间的⼩时部分
    Minute() 返回⼀个时间的分钟部分
    Month() 返回⼀个⽇期的⽉份部分
    Now() 返回当前⽇期和时间. **
    Second() 返回⼀个时间的秒部分
    Time() 返回⼀个⽇期时间的时间部分
    Year() 返回⼀个⽇期的年份部分

    数值处理函数

    函 数 说 明
    Abs() 返回⼀个数的绝对值
    Cos() 返回⼀个⻆度的余弦
    Exp() 返回⼀个数的指数值
    Mod() 返回除操作的余数
    Pi() 返回圆周率
    Rand() 返回⼀个随机数. **
    Sin() 返回⼀个⻆度的正弦
    Sqrt() 返回⼀个数的平⽅根
    Tan() 返回⼀个⻆度的正切

    十七、MySQL查询语句之聚集函数与GroupBy分组

    1.聚集函数的使用

    我们经常需要汇总数据⽽不⽤把它们实际检索出来,为此MySQL提供了专⻔的函数。
    使⽤这些函数,MySQL查询可⽤于检索数据,以便分析和报表⽣成

    • 确定表中⾏数(或者满⾜某个条件或包含某个特定值的⾏数)。
    • 获得表中⾏组的和。
    • 找出表列(或所有⾏或某些特定的⾏)的最⼤值、最⼩值和平均值。

    上述例⼦都需要对表中数据(⽽不是实际数据本身)汇总。
    因此,返回实际表数据是对时间和处理资源的⼀种浪费

    函数 说明
    COUNT() 返回某列的⾏数
    MAX() 返回某列的最⼤值
    MIN() 返回某列的最⼩值
    SUM() 返回某列值之和
    AVG() 返回某列的平均值

    注意

    在使⽤count时,如果指定列名,则指定列的值为空的⾏被忽略,但如果COUNT()函数中⽤的是星号
    (*),则不忽略

    2.数据分组 GROUP BY与HAVING

    GROUP BY

    SQL聚集函数可⽤来汇总数据。这使我们能够对⾏进⾏计数,计算和与平均数,获得最⼤和最⼩值,⽽不⽤检索所有数据。
    ⽬前为⽌的所有计算都是在表的所有数据或匹配特定的WHERE⼦句的数据上进⾏的。

    例如我们需要获取某个班级的学员⼈数:

    select count(*) as nums from stu where class_id = 2
    

    但如果要返回每个班级的⼈数怎么办?

    此时就需要使⽤分组了,分组允许把数据分为多个逻辑组,以便能对每个组进⾏聚集计算。

    select class_id,count(*) as nums from stu group by class_id
    

    那么如果需要返回⼈数少于5⼈的班级怎么办?
    或返回班级⼈数⼤于5⼈的班级怎么办?

    HAVING

    除了能⽤GROUP BY分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。
    例如,需要获取班级⼈数⼩于等于5⼈的班级。
    事实上,⽬前为⽌所学过的所有类型的WHERE⼦句都可以⽤HAVING来替代。
    唯⼀的差别是WHERE过滤⾏,⽽HAVING过滤分组。

    select class_id,count(*) as nums from stu group by class_id;
    
    select class_id,count(*) as nums from stu group by class_id having nums >= 5;
    

    3.使⽤Group By进⾏分组时的注意点

    在使⽤group by进⾏分组时,按照标准的SQL模式,需要把select查询中的所有列(除了聚集函数外)全部都列在group by后⾯

    mysql> select class_id,count(*) as nums from stu group by class_id;
    +----------+------+
    | class_id | nums |
    +----------+------+
    |    1     |  7   |
    |    2     |  5   |
    +----------+------+
    2 rows in set (0.00 sec)
    -- 在select⾥⾯有 class_id,class_name, 但是group by 后⾯只有 class_id,那么语法错误。
    
    mysql> select class_id,class_name,count(*) as nums from stu group by class_id;
    ERROR 1055 (42000): Expression #2 of SELECT list is not in GROUP BY clause and
    contains nonaggregated column 'chuange.stu.class_name' which is not functionally
    dependent on columns in GROUP BY clause; this is incompatible with
    sql_mode=only_full_group_by
    
    -- 正确的语句,应该是,把select中所以列都作为分组条件
    mysql> select class_id,class_name,count(*) as nums from stu group by
    class_id,class_name;
    +----------+------------+------+
    | class_id | class_name | nums |
    +----------+------------+------+
    | 1        | 1| 7    |
    | 2        | 2| 5    |
    +----------+------------+------+
    
    2 rows in set (0.00 sec)
    

    4.总结SELECT⼦句及其顺序

    ⼦句 说明 是否必须
    SELECT 要返回的列或表达式
    FROM 从中检索数据的表 仅在从表选择数据时使⽤
    WHERE ⾏级过滤
    GROUP BY 分组说明 仅在按组计算聚集时使⽤
    HAVING 组级过滤
    ORDER BY 输出排序顺序
    LIMIT 要检索的⾏数

    十八、MySQL数据库数据的导入出

    1.数据导出

    1. 数据库数据导出
    # 不要进入mysql,然后输入以下命令 导出某个库中的数据
    mysqldump -u root -p tlxy > ~/Desktop/code/tlxy.sql
    

    导出一个库中所有数据,会形成一个建表和添加语句组成的sql文件
    之后可以用这个sql文件到别的库,或着本机中创建或回复这些数据

    1. 将数据库中的表导出
    # 不要进入mysql,然后输入以下命令 导出某个库中指定的表的数据
    mysqldump -u root -p tlxy tts > ~/Desktop/code/tlxy-tts.sql
    

    2.数据导入

    把导出的sql文件数据导入到mysql数据库中

    # 在新的数据库中 导入备份的数据,导入导出的sql文件
    mysql -u root -p ops < ./tlxy.sql
    
    # 把导出的表sql 导入数据库
    mysql -u root -p ops < ./tlxy-tts.sql
    

    十九、MySQL数据库权限管理

    mysql中的root用户是数据库中权限最高的用户,千万不要用在项目中。
    可以给不同的用户,或者项目,创建不同的mysql用户,并适当的授权,完成数据库的相关操作。
    这样就一定程度上保证了数据库的安全。

    创建用户的语法格式:

    grant 授权的操作 on 授权的库.授权的表 to 账户@登录地址 identified by ‘密码’;

    示例:

    # 在mysql中 创建一个 zhangsan 用户,授权可以对tlxy这个库中的所有表 进行 添加和查询 的权限
    grant select,insert on tlxy.* to zhangsan@'%' identified by '123456';
    
    # 用户 lisi,密码 123456 可以对tlxy库中的所有表有 所有操作权限
    grant all on tlxy.* to lisi@'%' identified by '123456';
    
    # 删除用户
    drop user 'lisi'@'%';
    
    展开全文
  • 数据库一些概念:1.1.PRIMARY KEY主键什么是主键:表一列或者多列组成的唯一的key,也就是通过这一个或者多个列能唯一的标识一条记录(正常都是用一列实现)。特点:1.主键的列不能包含空值Null. 2.主键往往设置为...
  • mysql约束,主键,外键

    2020-09-29 19:07:21
    mysql学习笔记2 约束 数据库表约束:对表中的数据进行限制,保证数据的正确性、有效性完整性,一个表如果添加了...主键的作用 用来唯一标识数据库中的每一条记录; 主键关键字: primary key 主键的特点: 非空 not nul
  • 数据库基础

    2012-09-22 16:27:04
    §16.4 过程函数中的例外处理 282 §16.4.1 使用系统定义例外处理 282 §16.4.1.1 没有例外处理缺点 283 §16.4.1.2 使用预定义例外处理 283 §16.4.2 使用用户定义例外处理+ 286 §16.4.2.1 定义用户...
  • 前言 本文是个人学习SQLServer数据库时的以往笔记的整理,内容主要是对数据库的基本...主键的作用:保证表的每条数据的唯一性 特点: 主键不能重复 不能为空 分类: 逻辑主键:选择为表增加的那些“自动编号”列...
  • 文章目录索引机制索引定义:索引的作用和优点:索引的弊端和缺点:什么地方该用索引,什么地方应该避免使用索引?使用索引:**不该使用索引**:索引的建立方法普通索引创建索引修改表结构(添加索引)创建表的时候直接...
  • 13.6.4 获得数据库中所有视图 13.6.5 获得指定视图语句 第三篇 实例开发篇 第14章 定制自己工作环境 14.1 工具环境设置介绍 14.1.1 Editor 14.1.2 Tabs 14.1.3 Debug 14.1.4 Compatibility 14.1.5 Build 14.1.6 ...
  • 13.6.4 获得数据库中所有视图 13.6.5 获得指定视图语句 第三篇 实例开发篇 第14章 定制自己工作环境 14.1 工具环境设置介绍 14.1.1 Editor 14.1.2 Tabs 14.1.3 Debug 14.1.4 Compatibility 14.1.5 Build 14.1.6 ...
  • 数据库课程设计(基于B/S)

    热门讨论 2008-12-28 15:28:06
    在SQL Server2000数据库中,首先创建newspaper数据库,然后根据数据库逻辑结构分析创建表4-1━4-66张数据表。在前台访问数据库阶段设置了用户密码,用户为sa,密码为空。 表4-2 department部门表结构 字段名称...
  • 采用数据转储登录日志文件两种方法结合方法备分数据库。 针对不同故障,制定恢复策略 1、事务故障恢复策略 (1)反向扫描日志文件,查找该事务更新操作. (2)对事务更新操作执行逆操作. (3)继续反向扫描...
  • Oracle8i_9i数据库基础

    2010-03-03 14:16:58
    §16.4 过程函数中的例外处理 282 §16.4.1 使用系统定义例外处理 282 §16.4.1.1 没有例外处理缺点 283 §16.4.1.2 使用预定义例外处理 283 §16.4.2 使用用户定义例外处理+ 286 §16.4.2.1 定义用户...
  • §1.2 关系数据库系统(RDBMS)组成........................................................................24 §1.2.1 RDBMS 内核...........................................................................
  • 对Web技术支持,使用户能够很容易地将数据库中的数据发布到Web页面上。  7.SQL Server提供数据仓库功能,这个功能只在Oracle其他更昂贵DBMS中才有。  SQL Server 2000与以前版本相比较,又具有以下新特性...
  • sqlserver存储过程触发器

    千次阅读 2019-01-17 11:57:53
    存储过程的特点,触发器存储过程的区别,触发器的优点,触发器的作用:实现由主键和外键所不能保证的复杂参照完整性数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性...
  • 幂等是一个数学与计算机学概念,在数学某一元运算为幂等时,其作用在任一元素两次后会作用一次结果相同。在计算机编程,一个幂等操作的特点是其任意多次执行所产生影响均与一次执行影响相
  • 6-12笔记

    2014-06-06 11:24:51
    主键的作用就是保证表数据的唯一性。主键的特点:主键不能重复;不能为空; 3、主键分为逻辑主键(没有实际业务意义的主键)业务主键(表那些有业务意义的列作为主键)。建议使用逻辑主键。组合主键,选中多列...
  • 数据库中查询语句速度很慢,如何优化?数据库三范式是什么?Mysql技术特点是什么?Heap表是什么?Mysql服务器默认端口是什么?与Oracle相比,Mysql有什么优势?如何区分FLOATDOUBLE?区分CHAR_LENGTHLENGTH?...
  • 索引的作用1.3:索引的优缺点1.4:索引的分类1.5:创建索引的原则依据1.6:外键与候选键1.7:查看索引1.8:表的文件分类1.9:创建表索引的结构分析二:事务2.1:概念2.2:数据库设计三大范式2.2.1:第一范式(确保...
  • 这两种方式的作用是如果数据库中存在记录就更新,否则就插入新记录,但是在使用上也是有一点区别的。 总结如下: 1. 如果表中不存在主键记录,replaceinsert*update都与insert是一样的特点。 2. 如果表中...
  • 来来来,我告诉你为什么要有索引索引的概念索引的作用索引的分类普通索引创建的三种方式与删除创建唯一索引与创建的三种方式主键索引与创建的两种方式组合索引全文索引创建索引的原则依据事务的概念事务的ACID特点 ...
  • Spring中文帮助文档

    热门讨论 2013-08-05 14:40:17
    3.4. Bean的作用域 3.4.1. Singleton作用域 3.4.2. Prototype作用域 3.4.3. Singleton beansprototype-bean的依赖 3.4.4. 其他作用域 3.4.5. 自定义作用域 3.5. 定制bean特性 3.5.1. 生命周期回调 3.5.2. ...
  • MySQL索引

    2020-08-17 20:28:30
    索引概念:索引是对数据库一列或多列的值进行排序的一种结构,使用索引可快速访问数据库的特定信息 索引的作用: 提高查询速度 确保数据的唯一性 可以加速表表之间的连接,实现表与表之间的参照完整性 使用...
  • 2018-10-24 17:12:45
    约束的作用:保证数据库中数据的完整性(正确性准确性) 常见的约束:主键约束,外键约束,默认约束,唯一约束 1.主键约束 主键是用于标识当前记录的字段。它的特点是非空,唯一。在开发中一般情况下主键是不具备任何含义...
  • 7、索引 上

    2021-04-18 14:23:12
    7.1、索引分类 索引的作用 提高查询速度 确保数据的唯一性 可以加速表表之间的连接 , 实现表与表之间的参照完整性 使用分组排序子句进行数据检索时 , 可以显著减少分组...确定特定数据记录在数据库中的位置 7
  • MySQL-09-索引

    2020-11-06 15:38:27
    MySQL-09-索引 1.索引的作用 提高查询速度 确保数据的唯一性 可以加速表表之间的连接 , 实现表与表之间的参照完整性 使用分组排序子句进行数据检索时 , 可以显著减少分组...确定特定数据记录在数据库中的位置

空空如也

空空如也

1 2 3 4
收藏数 62
精华内容 24
关键字:

数据库中主键的作用和特点