SQL语句 列类型及列约束

一、列类型
MySQL数据库提供了非常丰富的列类型,用于限定在指定列上可以保存的数据格式。

(1)数字类型
①TINYINT
 占一个字节储存空间,表示范围-128~127
②-SMALLINT
 占用2个字节储存空间,表示范围-32768~32767
 ③INT
 占用4个字节储存空间,表示范围-2147483648~2147483647
 ④BIGINT
 占用8个字节储存空间,表示范围 -9223372036854775808~9223372036854775807
 ⑤FLOAT[(M,D)] #M表示总有效位数,D表示小数点后面允许的有效位数
 单精度浮点数,占4个字节 最大3.4E38,范围远远大于INT,可能产生四舍五入
⑥DOUBLE[(M,D)]
 双精度浮点数,占8个字节,范围远远大于BIGINT,可能产生四舍五入。
 ⑦DECIMAL[(M,D)]
严格定点数,用于保存精确小数。例如:钱...

(2)布尔类型
 BOOL/BOOLEAN
 取值只能是true/false 

(3)字符串类型
①CHAR(M)
 固定长度字符串,长度最大为255个字符
②VARCHAR(M)
 长度可变的字符串,长度最大为65535个字符
③TEXT(M)
 长度可变的字符串,长度最大可以到2^32,即4G个字符 

(4)日期时间类型
①DATE
 日期类型,支持的范围是'1000-01-01'到'9999-12-31';
②TIME
 时间类型,支持的范围是'00:00:00'到'23:59:59';
③DATETIME
 日期时间类型,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59' #由于系统中日期时间类型的表示范围不完全一样,且不同语言区域中的默认日期格式不一样,推荐使用BIGINT来储存时间日期。 

二、列约束
指表中特定列上出现的所有数据必须满足特定的内容要求,如果插入的新数据行中的数据不满足该要求,那么该记录就无法成功插入。

MySQL中共提供了6中约束
(1)主键约束
PRIMARY KEY,声明为主键约束的列,值不能空,且必须唯一

CREATE TABLE user(
      uid INT PRIMARY KEY,
      ......
    );

若主键列是整数类型,则同时可以声明此列上的值为“自动增长”——若插入数据时,未指定值或者指定为NULL值,则默认就会生成一个在当前最大值基础上+1的下一个整数值。

CREATE TABLE user(
      ......,
      loginPwd VARCHAR(32) UNIQUE,
      ......
    );
  #NULL != NULL

(2)唯一约束
UNIQUE, 限定指定列上的值不能出现重复值

CREATE TABLE user(
      ......,
      loginName VARCHAR(32) UNIQUE,
      ......
    );
    #声明为唯一约束的列上可以出现NULL值,且可以出现多个NULL值。

(3)非空约束
NOT NULL,限定指定列上的值不能为NULL

CREATE TABLE user(
      ......,
      loginPwd VARCHAR(32) UNIQUE,
      ......
    );
  #NULL != NULL

(4)检查约束   
检查约束可以对输入的数据范围进行检验

检查约束可以对输入的数据范围进行检验
  CREATE TABLE student(
     ......,
     age TINYINT CHECK(age>=0 AND age<=100),
     ......
   );
 #MySQL中不支持检查约束

(5)外键约束
 FOREIGN KEY,外键列上出现的值必须在其参考表的主键列上出现过

使用外键列,需要使用FOREIGN KEY关键字指定外键列,并使用REFERENCES关键字指定其参考的列。

#部门表的主键
  CREATE TABLE dept(
    did INT PRIMARY KEY,
    ......
  );
  #员工表外键
  CREATE TABLE emp(
    eid INT PRIMARY KEY,
    ......,
    deptId INT,
    FOREIGN KEY(deptId) REFERENCES dept(did)
  );
  #dept:声明外键列
  #did:指定外键列参考的主键列

(6)默认约束
DEFAULT, 指定当前列上未明确指定值时所使用的默认值。

CREATE TABLE userOrder(
    oid INT PRIMARY KEY,
    price DECIMAL(10,2) DEFAULT 0,
    status VARCHAR(32) DEFAULT '等待付款'
  );
  #插入数据行时使用默认值
  INSERT INTO userOrder VALUES(10,DEFAULT,DEFAULT);
  #插入数据行时未明确指定值的列将使用默认值
  INSERT INTO userOrder(oid) VALUES(10);
上一篇: MySQL SQL语句简介
下一篇: SQL语句 简单查询及复杂查询
作者邮箱: 203328517@qq.com