Bootstrap

MySQL基础详解(3)

索引

MySQL索引是数据库表中的一个或多个列的值进行排序的一种结构,它的作用是帮助MySQL快速高效地查询数据。索引可以极大地提高数据库的查询速度,但同时也会占用额外的磁盘空间,并且在插入、删除和更新数据时可能会降低性能,因为索引也需要被更新。

普通索引

创建索引
CREATE INDEX indexName ON table_name (column_name)
修改表结构(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
创建表的时候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (username(length))  
 
);  
删除索引的语法
DROP INDEX indexName ON mytable; 

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

创建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length)) 
修改表结构
ALTER table mytable ADD UNIQUE [indexName] (username(length))
创建表的时候直接指定
CREATE TABLE mytable(  
 
ID INT NOT NULL,   
 
username VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (username(length))  
 
);  

使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):

    该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL,

  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):

    这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。

  • ALTER TABLE tbl_name ADD INDEX index_name (column_list):

    添加普通索引,索引值可出现多次。

  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):

    该语句指定了索引为 FULLTEXT ,用于全文索引。

以下实例为在表中添加索引。

ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:

ALTER TABLE testalter_tbl DROP INDEX c;

使用ALTER 命令添加和删除主键

主键作用于列上(可以一个列或多个列联合主键),添加主键索引时,你需要确保该主键默认不为空(NOT NULL)。实例如下:

ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);

你也可以使用 ALTER 命令删除主键:

ALTER TABLE testalter_tbl DROP PRIMARY KEY;

删除主键时只需指定PRIMARY KEY,但在删除索引时,你必须知道索引名。


显示索引信息

你可以使用 SHOW INDEX 命令来列出表中的相关的索引信息。可以通过添加 \G 来格式化输出信息。

尝试以下实例:

SHOW INDEX FROM table_name;

约束

MySQL中的约束是用来限制表中数据的规则,以保证数据的完整性、精确性和可靠性。MySQL中常见的约束包括非空约束(NOT NULL)、唯一约束(UNIQUE)、主键约束(PRIMARY KEY)、外键约束(FOREIGN KEY)。

非空约束:

  • 作用:限制某个字段/某列的值不允许为空。
  • 关键字:NOT NULL。
  • 注意:空字符串(‘’)不等于NULL,0也不等于NULL。
  • 创建方式:在创建表时,在字段定义后添加NOT NULL约束;或使用ALTER TABLE语句修改现有字段,添加NOT NULL约束。
  • 1.创建表时添加约束

    CREATE TABLE stu(
       id INT,
       NAME VARCHAR(20) NOT NULL  -- name为非空
    );
    
  • 2.创建表完后,添加非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
    
  • 3.删除name的非空约束

    ALTER TABLE stu MODIFY NAME VARCHAR(25);
    

唯一约束:

  • 作用:确保某一列/某一个字段的值不会重复。
  • 关键字:UNIQUE。
  • 特点:同一个表可以有多个唯一约束;唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一;唯一性约束允许列值为空(如果两条数据该字段都赋值NULL,不会受到唯一性约束的限制)。
  • 创建方式:在创建表时,在字段定义后添加UNIQUE约束;或使用ALTER TABLE语句添加UNIQUE约束。
  • 1.创建表时添加唯一约束

    CREATE TABLE stu(
       id INT,
       phone_num VARCHAR(20) UNIQUE  -- 添加了唯一的约束
    );
    

    注意mysql中,唯一约束限定的列的值可以有多个null

    MySQL默认也会对UNIQUE的列建立索引

  • 2.删除唯一约束

    alter table stu modify phone_num varchar(20);
    -- 若无法删除可先将索引删除
    ALTER TABLE stu DROP INDEX phone_num;
    
  • 3.在创建表后,添加唯一约束

    ALTER TABLE stu MODIFY phone_nume VARCHAR(20) UNIQUE;
    

主键约束:

  • 作用:用来唯一标识表中的一行记录。
  • 关键字:PRIMARY KEY。
  • 特点:主键约束相当于唯一约束+非空约束的组合;一个表最多只能有一个主键约束;主键约束对应着表中的一列或者多列(复合主键);如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
  • 创建方式:在创建表时,在字段定义后添加PRIMARY KEY约束;或在定义完所有字段后,使用CONSTRAINT关键字指定主键约束;或使用ALTER TABLE语句添加主键约束。
  • 1.注意:

    含义:非空且唯一

    主键就是表中记录的唯一标识

  • 2.在创建表时,添加主键约束

    CREATE TABLE stu (
       id INT PRIMARY KEY,  -- 给id添加主键约束
       NAME VARCHAR(20)
    );
    
  • 3.删除主键

    ALTER TABLE stu DROP PRIMARY KEY; -- 去除主键
    alter table stu modify id int; -- 移除not null的限约束
    
  • 4.创建完表后,添加主键

    ALTER TABLE stu MODIFY id INT PRIMARY KEY;  
    
  • 5.自动增长:

    • 1.概念:如果某一列时数值类型的,使用auto_increment可以来完成值的自动增长

    • 2.在创建表时,添加主键约束,并且完成主键自动增长

      CREATE TABLE stu(
          id INT PRIMARY KEY AUTO_INCREMENT,  -- 给id添加主键约束  并完成主键自动增长
          NAME VARCHAR(20)
      );
      
    • 3.删除自动增长

      ALTER TABLE stu MODIFY id INT;
      
    • 4.添加自动增长

      ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
      

外键约束:

  • 作用:限定某个表的某个字段的引用完整性。
  • 特点:从表的外键列,必须引用/参考主表的主键或唯一约束的列;在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名(如student_ibfk_1),也可以指定外键约束名;一个表可以建立多个外键约束。
  • 创建方式:在创建表时,使用FOREIGN KEY关键字指定外键列,并通过REFERENCES关键字指定被引用的表和列;或使用ALTER TABLE语句添加外键约束。
  • 1.在创建表时,可以添加外键

    create table 表名(
    
       ...
    
       外键列
    
       constraint 外键名称 foreign key (外键列名称) references 主表名称(主表列名称) 
    
    );
    
  • 2.删除外键

    ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
    
  • 3.创建表之后,添加外键

    ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ;
    
  • 4.级联操作

    • 添加级联操作

      ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY(外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
      
    • 分类:

      级联更新:ON UPDATE CASCADE
      
      级联删除:ON DELETE CASCADE
      
;