数据约束:

 

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)
)

 

posted on   博塬  阅读(203)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现



点击右上角即可分享
微信分享提示