数据约束:
1.1什么数据约束:
对用户操作表的数据进行约束
1.2 默认值(缺省约束):
作用: 当用户对使用默认值的字段不插入值的时候,就使用默认值。
注意:
1)对默认值字段插入null是可以的。
2)对默认值字段可以插入非null
-- 1.1 默认值 CREATE TABLE student( id INT, NAME VARCHAR(20), address VARCHAR(20) DEFAULT '山东淄博' -- 默认值 )
DROP TABLE student; -- 当字段没有插入值的时候,mysql自动给该字段分配默认值 INSERT INTO student(id,NAME) VALUES(1,'张三');
-- 注意:默认值的字段允许为null INSERT INTO student(id,NAME,address) VALUE(2,'李四',NULL); INSERT INTO student(id,NAME,address) VALUE(3,'王五','山东淄博'); |
CREATE TABLE teacher1(
tid INT,
tname VARCHAR(30),
addr VARCHAR(30) DEFAULT '山东淄博'
)
INSERT INTO teacher1 VALUES (1,'张老师','山东济南');
INSERT INTO teacher1(tid,tname) VALUES (2,'吴老师');
INSERT INTO teacher1 VALUES (3,'邢老师',NULL);
SELECT * FROM teacher1
1.3 非空:
作用: 限制字段必须赋值
注意:
1)非空字符必须赋值
2)非空字符不能赋null
-- 1.2 非空 -- 需求: gender字段必须有值(不为null) CREATE TABLE student( id INT, NAME VARCHAR(20), gender VARCHAR(2) NOT NULL -- 非空 )
-- 非空字段必须赋值 INSERT INTO student(id,NAME) VALUES(1,'李四'); -- 非空字符不能插入null INSERT INTO student(id,NAME,gender) VALUES(1,'李四',NULL); |
CREATE TABLE teacher1(
sid INT,
sname VARCHAR(20) NOT NULL,
addr VARCHAR(30) DEFAULT'山东济南'
)
INSERT INTO teacher1 VALUES (1,'熊大','山东淄博');
INSERT INTO teacher1(tid,addr) VALUES (2,'山东枣庄');
INSERT INTO teacher1 VALUES (2,NULL,'山东枣庄');
SELECT * FROM teacher1;
1.4 唯一:
作用: 对字段的值不能重复
注意:
1)唯一字段可以插入null
2)唯一字段可以插入多个null
-- 1.3 唯一 CREATE TABLE student( id INT UNIQUE, -- 唯一 NAME VARCHAR(20) )
INSERT INTO student(id,NAME) VALUES(1,'zs'); INSERT INTO student(id,NAME) VALUES(1,'lisi'); -- ERROR 1062 (23000): Duplicate entry '1' for key 'id'
INSERT INTO student(id,NAME) VALUES(2,'lisi'); |
CREATE TABLE teacher1(
sid INT,
sname VARCHAR(20) NOT NULL,
idcard VARCHAR(30) UNIQUE
)
INSERT INTO teacher1 VALUES (1,'海绵宝宝','370303xxx');
INSERT INTO teacher1 VALUES (2,'派大星','370303xxx');
INSERT INTO teacher1 VALUES (2,'派大星',NULL);
INSERT INTO teacher1 VALUES (3,'章鱼哥',NULL);
SELECT * FROM teacher1;
1.5 主键:
作用: 非空+唯一
注意:
1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。
2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业务含义的id字段。
-- 1.4 主键(非空+唯一) DROP TABLE student;
CREATE TABLE student( id INT PRIMARY KEY, -- 主键 NAME VARCHAR(20) )
INSERT INTO student(id,NAME) VALUES(1,'张三'); INSERT INTO student(id,NAME) VALUES(2,'张三'); -- INSERT INTO student(id,NAME) VALUES(1,'李四'); -- 违反唯一约束: Duplicate entry '1' for key 'PRIMARY'
-- insert into student(name) value('李四'); -- 违反非空约束: ERROR 1048 (23000): Column 'id' cannot be null |
CREATE TABLE teacher1(
tid INT PRIMARY KEY,
tname VARCHAR(20) NOT NULL,
idcard VARCHAR(30) NOT NULL UNIQUE
)
INSERT INTO teacher1 VALUES (1,'海绵宝宝','3703x');
INSERT INTO teacher1 VALUES (NULL,'派大星','3703y');
SELECT * FROM teacher1;
1.6 自增长:
作用: 自动递增
-- 1.5 自增长 CREATE TABLE student( id INT(4) ZEROFILL PRIMARY KEY AUTO_INCREMENT, -- 自增长,从0开始 ZEROFILL 零填充 NAME VARCHAR(20) )
-- 自增长字段可以不赋值,自动递增 INSERT INTO student(NAME) VALUES('张三'); INSERT INTO student(NAME) VALUES('李四'); INSERT INTO student(NAME) VALUES('王五');
SELECT * FROM student; -- 不能影响自增长约束 DELETE FROM student; -- 可以影响自增长约束 TRUNCATE TABLE student; |
CREATE TABLE teacher1(
tid INT PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(20),
idcard VARCHAR(30)
)
SELECT * FROM teacher1;
INSERT INTO teacher1(tname,idcard) VALUES ('熊大','3703xx');
DELETE FROM teacher1 WHERE tid=2;
TRUNCATE TABLE teacher1;
DELETE FROM teacher1;
CREATE TABLE teacher1(
tid INT(5) ZEROFILL PRIMARY KEY AUTO_INCREMENT,
tname VARCHAR(10),
addr VARCHAR(20)
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现