个人博客地址: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);

2.非空约束

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

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

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

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

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

3.唯一约束

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

下面语句执行发生错误

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

错误提示

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 , '李四');

错误提示

下面错误也是一种错误

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

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

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

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

DELETE FROM STUDENT;

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

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

DELETE FROM STUDENT;

再次插入数据

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

查询两张表

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

查询如图所示

修改主表的一条记录

UPDATE DEPT SET ID=5 WHERE ID=4;

主表的运行结果

副表的运行结果

--------------------------------------------------------------------------------------

二、关联查询

1.交叉查询

SELECT * FROM EMPLOYEE,DEPT;

2.内连接查询

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

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

3.使用别名

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

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

首先我们改造一下副表

UPDATE EMPLOYEE SET DEPTID = NULL WHERE  ID= 4;

如果是内连接查询则显示

如果左连接查询

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

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

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

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;

显示结果

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

MYSQL基础操作之数据约束与关联查询的更多相关文章

  1. MySQL数据约束和关联查询

    1 默认值deafult:在建表的时候字段后使用 default ,默认值字段允许为null. 2 非空 not null:在建表的时候字段后使用  not null. 非空字段必须赋值,并且不能是n ...

  2. MySql数据库操作之数据约束

    首先数据库的外键是数据库提供的一种完整性约束.在许多数据库的书上也会介绍到,然而对于外键这个完整性性约束究竟应该在数据库端实现,还是在项目业务端实现很多人有着不同的意见. 个人开发(小型应用).数据库 ...

  3. mysql基础操作(二):简单查询DQL

    -- 1.查询所有字段 select * from student; -- 2.查询指定的字段 select id from student; select id, name from student ...

  4. MYSQL基础操作

    MYSQL基础操作 [TOC] 1.基本定义 1.1.关系型数据库系统 关系型数据库系统是建立在关系模型上的数据库系统 什么是关系模型呢? 1.数据结构可以规定,同类数据结构一致,就是一个二维的表格 ...

  5. MySQL基础操作(二)

    MySQL基础操作 一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用.注意:使用视图时 ...

  6. MySQL基础(三)——约束

    MySQL基础(三)--约束 约束是在表上强制执行的数据校验规则,主要用于维护表中数据的完整性以及当数据之间有以来关系时,保护相关的数据不会被删除. 根据约束对列的限制,可以划分为:单列约束(只约束一 ...

  7. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

  8. 【MySQL】MySQL基础操作语句

    mysql基础操作语句,包括数据库的增.删.切换,以及表的增.删.改.查.复制. 创建数据库 mysql> create database tem; 使用数据库 mysql> use te ...

  9. MySQL基础操作&&常用的SQL技巧&&SQL语句优化

    基础操作     一:MySQL基础操作         1:MySQL表复制             复制表结构 + 复制表数据             create table t3 like t ...

随机推荐

  1. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  2. Linux简单指令操作

    Linux CentOS运维中,常用的操作和命令记录下: 1.DNS设置 在Linux服务器上,当我们ping出现这个错误时:ping: unknown host,很大可能是系统的DNS没有设置或者设 ...

  3. 适合WebApi的简单的C#状态机实现

    目标 采用了Restful WebApi的架构,再把业务逻辑状态转移放到后端就有点违背初衷了.实际上只要后端Api的权限设置的好,把状态转移放到前端也未尝不可.我考虑的结果是,一般如果变更这个状态本身 ...

  4. ABP文档 - 审计日志

    文档目录 本节内容: 简介 关于 IAuditingStore 配置 通过特性启用/禁用 注意 简介 维基百科:“一个审计追踪(也叫审计日志)是一个安全相关的时序记录.记录组.和/或记录源和目标,作为 ...

  5. css中常见的属性-----在路上(14)

    一.css文字属性 color : #999999; /*文字颜色*/ font-family : 宋体,sans-serif; /*文字字体*/ font-size : 9pt; /*文字大小*/ ...

  6. Composer概述及其自动加载探秘

    composer概述 一开始,最吸引我的当属 Composer 了,因为之前从没用过 Composer . Composer 是PHP中用来管理依赖关系的工具,你只需在自己的项目中声明所依赖的外部工具 ...

  7. DotNet生成随机数的一些方法

    在项目开发中,一般都会使用到“随机数”,但是在DotNet中的随机数并非真正的随机数,可在一些情况下生成重复的数字,现在总结一下在项目中生成随机数的方法. 1.随机布尔值: /// <summa ...

  8. 跟我学习NHibernate (1)

    引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...

  9. MyCat源码分析系列之——配置信息和启动流程

    更多MyCat源码分析,请戳MyCat源码分析系列 MyCat配置信息 除了一些默认的配置参数,大多数的MyCat配置信息是通过读取若干.xml/.properties文件获取的,主要包括: 1)se ...

  10. C#多线程--线程池(ThreadPool)

    先引入一下线程池的概念: 百度百科:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务.线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行, ...