一.列约束
mysql可以对要插入的数据进行特定的验证,只有满足条件才允许插入,否则被认为非法的插入。例如编号不能出现重复,性别只能是男或者女,工资只能是正数
create table t3(
id INT 列约束
);
(1)主键约束-PRIMARY KEY
声明了主键约束的列上不允许插入重复的值,一个表中只能有一个主键约束,通常是加在编号列,会加快数据的查询速度。
#练习:编写脚本文件xz.sql,先丢弃再创建xz,设置编码utf8,进入数据库,保存笔记本类别的表
family,包含有fid,类别名称fname,插入以下数据 10 联想 20 戴尔 30 小米;
创建保存笔记本数据的表laptop,包含有lid,标题title,价格price,规格spec,
详情detail,上架时间shelfTime,是否在售isOnsale,所属类别编号familyId,
插入若干条数据;每个都使用主键约束
#设置客户端连接服务器端的编码
SET NAMES UTF8;
#丢弃数据库,如果存在
DROP DATABASE IF EXISTS xz;
#创建数据库,设置编码
CREATE DATABASE xz CHARSET=UTF8;
#进入数据库
USE xz;
#创建保存笔记本类别的表
CREATE TABLE family(
fid INT PRIMARY KEY,
fname VARCHAR(16)
);
#插入数据
INSERT INTO family VALUES(10,'联想');
INSERT INTO family VALUES(20,'戴尔');
INSERT INTO family VALUES(30,'小米');
#创建保存笔记本数据的表
CREATE TABLE laptop(
lid INT PRIMARY KEY,
title VARCHAR(128),
price DECIMAL(7,2), #99999.99
spec VARCHAR(64),
detail VARCHAR(5000),
shelfTime DATE,
isOnsale BOOLEAN,
familyId INT
);
#插入数据
INSERT INTO laptop VALUES(1,'小米Air',3799,'开发版','详情1','2020-1-1',1,30);
NULL,空,表示一个无法确定的值,例如暂时无法确定商品的价格,无法确定一个员工的电话...
主键约束的列上不允许为空
NULL是关键字,不能加引号
(2)非空约束-NOT NULL
声明了非空约束的列上禁止插入NULL
(3)唯一约束-UNIQUE
声明了唯一约束的列不允许出现重复的值,允许插入NULL,甚至多个NULL
可能会影响排序
两个NULL之间不能划等号
(4)默认值约束-DEFAULT
使用DEFAULT关键字设置默认值,具体应用方式有两种:
INSERT INTO laptop VALUES(5,'小米Air',DEFAULT...);
INSERT INTO laptop(lid,title,price,spec) VALUES(6,'Apple',...);
(5)检查约束-CHECK
也称为自定义约束,用户可以自己指定约束条件
create table t1(
score tinyint check(score>=0 and score<=100)
);
mysql不支持检查约束:影响数据的插入速度、对服务器造成比较大的压力
通过JS就可以完成
(6)外键约束
为了建立表之间的关联,外键约束列上的值,必须得在另一个表的主键列中出现过。
外键列和对应的主键列的列类型要保持一致。
foreign key(外键列) references 另一个表(主键列)
#将familyId作为外键,取值范围到family表的fid列
foreign key(familyId) references family(fid)