MySQL——数据类型、索引的建立、数据的约束

数据类型

  • 数值类型:INT、BIGINT、FLOAT、DOUBLE,DECIMAL等。

  • 字符串类型:CHAR、VARCHAR、TEXT等。

  • 日期和时间类型:DATE、DATETIME、TIMESTAMP等。

  • 二进制类型:BLOB、LONGBLOB、VARBINARY等。

  • 枚举类型:ENUM。

  • 集合类型:SET。

    • 数值类型
      在这里插入图片描述

    • 字符串类型

    • 字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
      字符串类型主要是varcharchar, UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节
      在这里插入图片描述

    • 日期和时间类型

    • 表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR
      在这里插入图片描述

  • 示例

    CREATE TABLE users (
      id INT PRIMARY KEY,
      name VARCHAR(50) NOT NULL,
      email VARCHAR(100) UNIQUE,
      password VARCHAR(100) NOT NULL,
      created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
      updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      age INT CHECK(age >= 18),
      address TEXT,
      role ENUM('admin', 'user') DEFAULT 'user'
    );
    
    

这个语句将创建一个名为users的表,包含多个列和约束。其中id列是主键name列是非空字符串email列是唯一的password列是非空字符串created_at列是日期时间类型updated_at列是日期时间类型,但在更新时会自动更新,age列使用检查约束以确保其值大于等于18,address列是文本类型role列是枚举类型,且默认值为’user’。

索引的建立

MySQL索引的建立对于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;

数据的约束

概念:对表中的数据进行限定,保证数据的正确性、有效性和完整性。

  • 分类
    • 非空约束(NOT NULL):确保列中不包含空值。
    • 唯一约束(UNIQUE):保证列中的所有值都是唯一的,可以包含空值。
    • 主键约束(PRIMARY KEY):用于唯一标识表中的每一行数据,通常使用整数类型的列。
    • 外键约束(FOREIGN KEY):用于定义列与其他表的关系,保证引用完整性。

非空约束:not null,值不能为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,值不能重复

  • 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

  • 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;
      

外键约束:foreign key

  • 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
      
  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值