首页 技术 正文
技术 2022年11月17日
0 收藏 609 点赞 4,849 浏览 3336 个字

 个人博客地址:https://www.vastyun.com

一、MYSQL约束

1.默认值约束,当字段没有插入值的时候,mysql自动给该字段分配默认值。
默认值的字段允许为空。
对默认值字段也可以插入null。

 CREATE TABLE STUDENT(
ID INT,
NAME VARCHAR(20),
ADDRESS VARCHAR(20) DEFAULT '京口区'
);
INSERT INTO STUDENT (ID, NAME ) VALUES (1,'张三');
INSERT INTO STUDENT (ID , NAME,ADDRESS ) VALUES (2,'李四' ,NULL);

MYSQL基础操作之数据约束与关联查询

2.非空约束

 CREATE TABLE STUDENT(
ID INT,
NAME VARCHAR(20),
GENDER VARCHAR(2) NOT NULL
);

2.1非空字段必须赋值(错误显示)

INSERT INTO STUDENT (ID , NAME) VALUES(1, '李四');

MYSQL基础操作之数据约束与关联查询

2.2不能插入null(错误显示)

INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三' ,NULL);

MYSQL基础操作之数据约束与关联查询

3.唯一约束

 CREATE TABLE STUDENT (
ID INT UNIQUE,
NAME VARCHAR(20)
);
INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三');

下面语句执行发生错误

INSERT INTO STUDENT (ID , NAME) VALUES (1, '李四');

错误提示

MYSQL基础操作之数据约束与关联查询

4.主键约束(非空+唯一),通常每张表都会设置一个主键字段。用于标注表记录的唯一性。
 主键一般都是没有业务含义的。

 CREATE TABLE STUDENT(
ID INT PRIMARY KEY,
NAME VARCHAR(20)
); INSERT INTO STUDENT (ID , NAME) VALUES (1, '张三');

下面语句执行显示错误

INSERT INTO STUDENT (ID , NAME ) VALUES (NULL , '李四');

错误提示

MYSQL基础操作之数据约束与关联查询

下面错误也是一种错误

INSERT INTO STUDENT (ID ,NAME ) VALUES (1, '李四');

MYSQL基础操作之数据约束与关联查询

5.自增长约束
可以自动的递增

 CREATE TABLE STUDENT(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20)
);
INSERT INTO STUDENT (NAME) VALUES ('张三');
INSERT INTO STUDENT (NAME) VALUES ('李四');

MYSQL基础操作之数据约束与关联查询

整表数据删除,不影响自增的删除语句

DELETE FROM STUDENT;

删除表之后再次(不用再创建表),添加插入语句如图所示

MYSQL基础操作之数据约束与关联查询

删除表中所有数据,删除外键也是用这个语句。

DELETE FROM STUDENT;

再次插入数据

MYSQL基础操作之数据约束与关联查询

6.外键约束

被约束的表为副表,外键设置在副表上

eg:创建员工表(副表),创建部门表(主表),先创建主表,再创建副表

CREATE TABLE DEPT(
ID INT PRIMARY KEY,
DEPTID VARCHAR(20)
);INSERT INTO DEPT (ID , DEPTNAME) VALUES (1, '软件设计部门');
INSERT INTO DEPT (ID , DEPTNAME) VALUES (2, '人事部');
INSERT INTO DEPT (ID , DEPTNAME) VALUES (3, '财务部');
INSERT INTO DEPT (ID , DEPTNAME) VALUES (4, '运营部');CREATE TABLE EMPLOYEE(
ID INT PRIMARY KEY AUTO_INCREMENT,
EMPNAME VARCHAR(20),
DEPTID INT,
CONSTRAINT EMPLOYEE_DEPT_FK FOREIGN KEY (DEPTID) REFERENCES DEPT(ID)
);INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('张三' , 1);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('李四' , 2);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('王五' , 3);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('赵六' , 4);

查询两张表

MYSQL基础操作之数据约束与关联查询

MYSQL基础操作之数据约束与关联查询

7.下面进行级联关联,意味着,当主表修改时,副表也修改

修改以上表的创建语句,并重新插入新的语句

 DROP TABLE EMPLOYEE; CREATE TABLE EMPLOYEE(
ID INT PRIMARY KEY AUTO_INCREMENT,
EMPNAME VARCHAR(20),
DEPTID INT,
CONSTRAINT EMPLOYEE_DEPT_FK FOREIGN KEY (DEPTID) REFERENCES DEPT(ID) ON UPDATE CASCADE ON DELETE CASCADE
); INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('张三' , 1);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('李四' , 2);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('王五' , 3);
INSERT INTO EMPLOYEE (EMPNAME , DEPTID) VALUES ('赵六' , 4);

查询如图所示

MYSQL基础操作之数据约束与关联查询

修改主表的一条记录

UPDATE DEPT SET ID=5 WHERE ID=4;

主表的运行结果

MYSQL基础操作之数据约束与关联查询

副表的运行结果

MYSQL基础操作之数据约束与关联查询

————————————————————————————–

二、关联查询

1.交叉查询

SELECT * FROM EMPLOYEE,DEPT;

MYSQL基础操作之数据约束与关联查询

2.内连接查询

多表查询规则:1)查询哪些表    2)确定哪些字段    3)表与表之间的查询条件(连接表的数量-1)

 SELECT EMPNAME , dept.DEPTNAME
FROM EMPLOYEE
INNER JOIN DEPT
ON EMPLOYEE.DEPTID = DEPT.ID;

MYSQL基础操作之数据约束与关联查询

3.使用别名

 SELECT EMPNAME AS '员工姓名', D.DEPTNAME AS '部门' -- 注意这里的D
FROM EMPLOYEE AS E
INNER JOIN DEPT AS D
ON E.DEPTID = D.ID;

MYSQL基础操作之数据约束与关联查询

4.左外连接查询,左边的数据一定会完全显示。查询时先写左表

首先我们改造一下副表

UPDATE EMPLOYEE SET DEPTID = NULL WHERE  ID= 4;

MYSQL基础操作之数据约束与关联查询

如果是内连接查询则显示

MYSQL基础操作之数据约束与关联查询

如果左连接查询

  SELECT    D.DEPTNAME, E.EMPNAME
FROM DEPT AS D -- 左表
LEFT OUTER JOIN EMPLOYEE AS E -- 右表
ON D.ID = E.DEPTID;

MYSQL基础操作之数据约束与关联查询

右连接其实和左连接一样,只是查询表的位置不同,下面是右连接,显示的和左连接的相同

  SELECT D.DEPTNAME,E.EMPNAME
FROM EMPLOYEE AS E-- 左表
RIGHT JOIN DEPT AS D -- 右表
ON E.ID = D.ID;

MYSQL基础操作之数据约束与关联查询

5.自连接查询,自连接查询一般应用于表数据为树状结构。

首先我们创建表并查询

 CREATE TABLE PERSON(
ID INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
BOSSID INT
); INSERT INTO PERSON (NAME,BOSSID) VALUES ('张三',NULL);
INSERT INTO PERSON (NAME,BOSSID) VALUES ('李四',1);
INSERT INTO PERSON (NAME,BOSSID) VALUES ('王五',2);
INSERT INTO PERSON (NAME,BOSSID) VALUES ('赵六',3);
INSERT INTO PERSON (NAME,BOSSID) VALUES ('李七',3); SELECT P.NAME AS '老板' ,B.NAME AS '员工'
FROM PERSON AS P
RIGHT JOIN PERSON AS B
ON P.ID = B.BOSSID;

显示结果

MYSQL基础操作之数据约束与关联查询

注意上面创建表的BOSSID的结构。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,078
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,553
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,402
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,177
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,814
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898