首页 > 数据库 >MySQL基础详解(3)

MySQL基础详解(3)

时间:2024-08-11 21:54:41浏览次数:18  
标签:基础 主键 索引 详解 MySQL TABLE 约束 添加 ALTER

文章目录

索引

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
      

标签:基础,主键,索引,详解,MySQL,TABLE,约束,添加,ALTER
From: https://blog.csdn.net/2301_77698138/article/details/141112607

相关文章

  • LeetCode 22. 括号生成 回溯写法详解
    22.括号生成22.括号生成题目来源题目分析题目难度题目标签题目限制解题思路核心算法步骤代码实现代码解读性能分析测试用例扩展讨论优化写法其他实现总结22.括号生成题目来源22.括号生成题目分析给定一个数字n,表示生成括号的对数,要求设计一个函数生成所......
  • mysql 给了用户所有权限ALL PRIVILEGES,但是该用户没有grant权限
    在MySQL中,给用户ALLPRIVILEGES权限但没有grant权限的情况可能是因为MySQL版本的更新导致了语法的变化。在MySQL8.0及更高版本中,GRANTALLPRIVILEGES的用法已经不再支持,需要使用GRANTALLPRIVILEGESON*.*TO'username'@'host'WITHGRANTOPTION;的格式来授予用户全局权限和......
  • LeetCode 216. 组合总和 III 回溯写法详解
    216.组合总和III216.组合总和III题目来源题目分析题目难度题目标签题目限制解题思路核心算法步骤代码实现代码解读性能分析测试用例扩展讨论优化写法其他实现总结216.组合总和III题目来源216.组合总和III题目分析题目要求找出所有相加之和为n的k......
  • 【1.0版】【MYSQL安全】sql注入系列:宽字节注入
    主题sql注入系列:宽字节注入原理mysql在使用GBK编码的时候,会认为两个字符为一个汉字,例如%aa%5c就是一个汉字(前一个ascii码大于128才能到汉字的范围)。我们在过滤’的时候,往往利用的思路是将‘转换为\’因此我们在此想办法将‘前面添加的\除掉,一般有......
  • USB协议详解第6讲(USB描述符-端点描述符)
    1.USB描述符USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB端点描述符的组成。2.端点描述符组成前面讲了设备描述符、标准配置描述符、接口描述符,本篇我们讲解端点描述符。首先......
  • Tomcat详解
    1.安装tomcat1.去到tomcat官网下载tomcat安装包,下载的是免安装的包,解压就可用apache-tomcat-8.5.85.zip解压后的如下: 目录说明:bin存放启动和关闭Tomcat的脚本文件,比较常用的是catalina.sh、startup.sh、shutdown.sh三个文件conf存放Tomcat服务器的各种配置文......
  • VulnhubJIS-CTF靶机详解
    项目地址https://www.vulnhub.com/entry/jis-ctf-vulnupload,228/修改靶机的网卡开机时长按shift,进入此页面选择第二个,进入等待加载完成选择root模式进入将只读模式改为读写模式mount-oremount,rw/查看本机的网卡名称ifconfig-a修改默认网卡......
  • C语言入门教程——手把手教零基础/新手入门(完整C语言学习笔记整理)
    前言    作为一名拥有多年开发经验的技术人员,我的职业生涯涵盖了多种编程语言,包括C语言、C++、C#和JavaScript等。出于对编程的热爱以及希望帮助更多初学者的目的,我决定利用业余时间整理一套全面的C语言学习指南。这套指南旨在为C语言初学者和编程爱好者提供......
  • 【1.0版】【MYSQL安全】SQL注入:DNSlog外带盲注回显
    主题SQL注入:DNSlog外带盲注回显利用条件DBMS中需要有可用的,能直接或间接引发DNS解析过程的子程序,即使用到UNCLinux没有UNC路径,所以当处于Linux系统时,不能使用该方式获取数据有个重要条件:load_file()函数可以使用。也就是说需要配置文件my.ini中secure_file_priv=UNCU......
  • 【1.0版】【MYSQL安全】sql注入系列:堆叠注入
    主题sql注入系列:堆叠注入原理mysql数据库sql语句的默认结束符是以;结尾,在执行多条SQL语句时就要使用结束符隔开,那么在;结束一条sql语句后继续构造下一条语句,是否会一起执行我们发现确实同时执行了,那么在实际中我们引号闭合之后也有可能可以进行堆叠注入,但是堆叠注入和开......