mysql列类型、列约束

MySQL服务器端数据的逻辑结构:

  SERVER=>DATABASE=>TABLE=>ROW=>COLUMN

1.常用的SQL语句:

  (1)增:INSERT INTO 表 VALUES(值, 值, ...);

  (2)删:DELETE  FROM  表;

  (3)改:UPDATE 表 SET 列=值, ...,列=值 ;

  (4)查:SELECT  *  FROM 表;

2.MySQL中的列类型

  (1)数值类型   —— 可用引号括起来也可以不用

       整数数值类型:   student(  age TINYINT  )

         TINYINT:微整数,占1字节,-128~127

         SMALLINT:小整数,占2字节,-32768~32767

         INT:整数,占4个字节, -2147483648~2147483647

         BIGINT:大整数,占8个字节,.....

       小数数值类型:  product( price DECIMAL(7, 4) )  //一共7位,其中4位小数位

         FLOAT(M,D):单精度浮点型,占4字节,3.4E38,计算时可能产生四舍五入

         DOUBLE(M,D):双精度浮点型,占8字节 1.8E30,计算时可能产生四舍五入

         DECIMAL(M,D):定点小数,不会产生精度舍入

       布尔数值类型:   product( isOnsale BOOL)

         BOOL,布尔/真假类型只能取值为TRUE/FALSE。注意:MySQL数据库中没有真正意义上的布尔类型,TRUE等同于1,FALSE等同于0

  (2)日期时间类型  —— 必须用引号括起来

       DATE:日期类型,形如'2017-5-10'

       TIME:时间类型,形如'22:08:5'  

       DATETIME:日期/时间类型,形如'2017-10-25 22:8:5'

  (3)字符串类型  —— 必须用引号括起来   emp(resume ...)

       CHAR(M):定长字符串,比VARCHAR操作速度更快,M不能超过255

       VARCHAR(M):变长字符串,比CHAR更能节约空间,M不能超过65535

       TEXT(M):大型变长字符串,M不能超过2G

3.MySQL中的列约束

  Constraint:约束,数据库中某列上的数据往往必须符合某种规范,如编号不能重复、年龄必须在一定范围、密码有长度限制、员工所在部门必须真的存在......类似的限制/规范就称为“列约束”

  (1)主键约束 —— PRIMARY  KEY

       声明为主键的列上,不能出现重复值,也不能出现NULL值,所有的记录会自动按照主键列上值由小到大排序 —— 因此一个表中至多只能有一个主键列。

  (2)非空约束 —— NOT NULL

       声明为非空的列,不能出现NULL,但可以出现重复值。

  (3)唯一约束 —— UNIQUE

       声明为唯一约束的列,不能出现重复的值,但可以出现NULL,且允许多个NULL出现(两个NULL值是不等的)

  (4)检查约束 —— CHECK

       检查约束可以检查新插入的数据是否满足指定的条件,如:

       student( age INT CHECK(age>=18  AND  age<=60)  )

       MySQL不支持此约束!

  (5)默认值约束 —— DEFAULT

       student(sid INT, sex CHAR(1) DEFAULT '男' ); 

       使用默认值的方式

       1)INSERT INTO student VALUES(10, DEFAULT);

     2)INSERT INTO student(sid) VALUES(20);

  (6)外键约束 —— FOREIGN KEY...REFERENCES

4.MySQL中使用自增列

  id INT PRIMARY KEY AUTO_INCREMENT

  自增列:只能用于整数列,且必须是主键列。自增列无需手工赋值,会自动采用1/2/3....数列,在当前最大值基础上+1。

  注意:SQL标准中没有此关键字,它是MySQL所专有的!

例子:

SET NAMES UTF8;
#丢弃数据库
DROP DATABASE IF EXISTS tedu;
#创建数据库
CREATE DATABASE tedu CHARSET=UTF8;
#进入数据库
USE tedu;

#创建部门表
CREATE TABLE dept(
  did INT PRIMARY KEY,
  dname VARCHAR(32) UNIQUE NOT NULL,
  empCount INT
);
INSERT INTO dept VALUES('10','研发部','3');
INSERT INTO dept VALUES('20','市场部I','1');
INSERT INTO dept VALUES('30','市场部II','2');

#创建员工表
CREATE TABLE emp(
  eid INT PRIMARY KEY,        #主键列
  ename VARCHAR(4),
  salary DECIMAL(8,2) DEFAULT 99999.99,
  birthday DATE DEFAULT '1990-1-1',
  deptId INT,   
  FOREIGN KEY(deptId) REFERENCES dept(did)
);
INSERT INTO emp 
VALUES(1,'丁丁', 8000, DEFAULT, 10);

INSERT INTO emp(eid,ename,salary,deptId) 
VALUES(6,'当当', 5000, 10);

INSERT INTO emp 
VALUES(3,'豆豆', 3000, '1998-1-3', 10);
INSERT INTO emp 
VALUES(4,'丫丫', 7000, '1998-1-4', 20);
INSERT INTO emp 
VALUES(5,'明明', 9000, '1998-1-5', 30);
INSERT INTO emp 
VALUES(2,'白白', 8500, '1998-1-6', NULL);

你可能感兴趣的:(mysql)