zoukankan      html  css  js  c++  java
  • (七)MySQL常见的数据类型、约束和标识列

    一、MySQL常见数据类型

    1、数值型:

    ①整型:tinyint、smllint、mediumint、int/integer、bigint

    图源:尚硅谷李玉婷

    案例1:关键表格teacher,分别添加有、无符号int型字段

    CREATE TABLE teacher(
    	id INT UNSIGNED,
    	phone INT
    );

    注意:定义五符号型字段,直接在数据类型后面添加UNSIGNED,默认为有符号型。

    案例2:插入数据的大小不在定义的数据类型范围中

    INSERT INTO teacher VALUES(-100,12345678900);

    插入数据后表中的数据:

    注意:当插入的数据不在定义的范围中时,就近选择符合条件的数据插入。

    案例3:插入一个显示宽带为7的int型字段

    ALTER TABLE teacher ADD COLUMN mail_num INT(7);

    注意:显示宽度表示在该字段中最多显示7个字符的数字。

    ②小数型:

      浮点型:float(M,D)、double(M,D)

      定点型:dec(M,D)、decimal(M,D)

    注意:D代表小数点后保留D位(四舍五入),M代表小数点前后总位数,定点型精度要高于浮点型(表现在小数点后保留位数)

    ③字符型:

      较短文本:char、varchar(常用)

      其他:binary、varbinary、enum(枚举类型)、set(集合)

      较长文本:text、blob

    案例1:比较char和varchar

    char:固定的长度 默认长度为1 效率高
    varchar:非固定长度 定义时长度不可省略 效率低

    案例2:创建新表包含enum类型(枚举类型),并插入新类型

    CREATE TABLE my_str(
    	NAME ENUM('a','b','c')
    );
    INSERT INTO my_str VALUES('a');

    注意:向枚举类型中插入数据,仅仅可以插入定义时后面跟随的诸多数据之一,且不可插入其它数据。

    案例3:比较enum和set

    INSERT INTO tab_enum VALUES('a');
    INSERT INTO tab_set VALUES('a,c,d'); 

    注意:enum同时只可以插入诸多数据之一,但set可同时插入多个,而且向set中插入数据时只能使用一个引号。

    ④日期型:datetime(8字节,时间范围大)、timestamp(4字节,受时区影响)

    案例1:创建新表my_time,包含两个字段类型分别为datetime和imestamp,并插入当前时间

    CREATE TABLE my_time(
    	t1 DATETIME,
    	t2 TIMESTAMP
    );
    INSERT INTO my_time VALUES(NOW(),NOW());

    表中数据:

    修改当前时区:

    SET time_zone='+9:00';

    再次查看表中数据:

    比较上面两张图片可以看出t2的时间发生变化,说明t2的数据类型(TIMESTAMP)受时区影响。

    二、MySQL常见约束

    1、六大约束:

    #1NOT NULL:非空
    #2UNIQUE:唯一
    #3PRIMARY KEY:主键(不可重复也不可为空)
    #4DEDFAULT:默认
    #5FOREIGN KEY:外键(与其他表相关联)
    #6CHECK:检查约束(mysql中不支持)

    2、语法:

    CREATE TABLE 表名(
    	字段名 字段类型 列级约束,
    	字段名 字段类型,
    	表级约束
    );

    3、添加约束(通用写法)

    从表:
    CREATE TABLE IF NOT EXISTS stuinfo(
    	id INT PRIMARY KEY,
    	stuname VARCHAR(20),
    	sex CHAR(1),
    	age INT DEFAULT 18,
    	seat INT UNIQUE,
    	majorid INT,
    	CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
    );
    主表:
    CREATE TABLE major(
    	id INT PRIMARY KEY,
    	majorName VARCHAR(20)
    );

    注意:

    ①类型为UNIQUE的字段类型允许包含NULL但至多只能包含一个。

    ②添加外键时主表中与从表相关联的字段要为key类型(主键、唯一)。

    ③外键插入数据时先插入主表再插入从表,删除数据时先删除从表再删除主表。

    4、添加/删除约束条件

    #1.添加/删除非空约束
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20)  NOT NULL;
    ALTER TABLE stuinfo MODIFY COLUMN stuname VARCHAR(20) NULL;
    
    #2.添加/删除默认约束
    ALTER TABLE stuinfo MODIFY COLUMN age INT DEFAULT 18;
    ALTER TABLE stuinfo MODIFY COLUMN age INT;
    
    #3.添加/删除主键
    ALTER TABLE stuinfo MODIFY COLUMN id INT PRIMARY KEY;
    ALTER TABLE stuinfo DROP PRIMARY KEY;
    
    #4.添加/删除唯一
    ALTER TABLE stuinfo MODIFY COLUMN seat INT UNIQUE;
    ALTER TABLE stuinfo DROP INDEX seat;
    
    #5.添加/删除外键
    ALTER TABLE stuinfo ADD CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id); 
    ALTER TABLE stuinfo DROP FOREIGN KEY fk_stuinfo_major;#起名便于删除

    注意:

    ①删除唯一约束:ALTER TABLE 表名 DROP INDEX 字段名

    ②添加外键:ALTER TABLE 从表名 ADD CONSTRAINT 别名 FOREIGN KEY(字段) REFERENCE 主表名(字段);

    ③删除外键:ALTER TABLE 从表名 DROP FOREIGN KEY 别名;

    三、MySQL标识列

    1、创建表时设置自增长列:

    CREATE TABLE my_increase(
    	id INT PRIMARY KEY AUTO_INCREMENT
    );

    2、添加/删除自增长列:

    ALTER TABLE test_1 MODIFY COLUMN id INT(11) AUTO_INCREMENT;
    ALTER TABLE test_1 MODIFY COLUMN id INT(11);

    注意:删除自增长列不使用DROP,而是直接修改表的性质。

    3、设置自增长步长:

    SET auto_increment_increment=3;

    4、修改自增长起点的方法:先将起点数值插入到表中再自增长插入

      自增长插入方法(可重复运行该语句):

    INSERT INTO my_increase VALUES(NULL);

    运行结果:

  • 相关阅读:
    三:oracle练习
    二:SQL 函数
    一:SQL基本语法
    生产者与消费者模式(理解) 进程间通信之消息队列编程
    C语言
    前端面试:基础javascript篇(二)
    Koa入门和源码分析
    前端面试:基础javascript篇(一)
    前端面试题(二)
    C复习
  • 原文地址:https://www.cnblogs.com/ldu-xingjiahui/p/12594038.html
Copyright © 2011-2022 走看看