ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql数据库3

2021-12-03 17:00:08  阅读:161  来源: 互联网

标签:INSERT did INTO teacher -- VALUES mysql 数据库


数据约束

 

默认值约束

当用户对使用默认值的字段不插入值的时候,就使用默认值。

注意:1)对默认值字段插入null是可以的。

  2)对默认值字段可以插入非null
CREATE TABLE teacher(
    tid INT,
    tname VARCHAR(12),
    addr VARCHAR(20) DEFAULT '张店区'
)
INSERT INTO teacher VALUES(1,'小红帽','博山区');
INSERT INTO teacher(tid,tname) VALUES(2,'大灰狼');
INSERT INTO teacher VALUES(3,'外婆',NULL);
SELECT * FROM teacher
DROP TABLE teacher

非空约束

限制字段必须赋值

 

 

注意:1)非空字符必须赋值

  2)非空字符不能赋null
CREATE TABLE teacher(
    tid INT,
    tname VARCHAR(12) NOT NULL,
    addr VARCHAR(20) DEFAULT '张店区'
)
INSERT INTO teacher VALUES(1,'小红帽','博山区');
-- Field 'tname' doesn't have a default value
INSERT INTO teacher(tid,addr) VALUES(2,'淄川区');
-- Column 'tname' cannot be null
INSERT INTO teacher VALUES(3,NULL,'临淄区');
SELECT * FROM teacher

-- 唯一约束

对字段的值不能重复

注意:1)唯一字段可以插入null

  2)唯一字段可以插入多个null
CREATE TABLE teacher(
    tid INT,
    tname VARCHAR(12) NOT NULL,
    idcard VARCHAR(20) UNIQUE,
    addr VARCHAR(20) DEFAULT '张店区'
)
INSERT INTO teacher VALUES(1,'小红帽','370303x','淄川区');
INSERT INTO teacher VALUES(2,'小蓝帽','370303x','临淄区');
-- 允许存入null值,允许存入多个null值
INSERT INTO teacher VALUES(3,'小白帽',NULL,'博山区');
INSERT INTO teacher VALUES(4,'小黑帽',NULL,'博山区');
SELECT * FROM teacher

-- 主键约束

非空+唯一

注意:1)通常情况下,每张表都会设置一个主键字段。用于标记表中的每条记录的唯一性。

  2)建议不要选择表的包含业务含义的字段作为主键,建议给每张表独立设计一个非业
CREATE TABLE teacher(
    tid INT PRIMARY KEY,
    tname VARCHAR(12) NOT NULL,
    idcard VARCHAR(20) UNIQUE,
    addr VARCHAR(20) DEFAULT '张店区'
)
INSERT INTO teacher VALUES(1,'小红帽','370303x','博山区');
-- Duplicate entry '1' for key 'PRIMARY'
INSERT INTO teacher VALUES(1,'小白帽','370303y','博山区');
-- Column 'tid' cannot be null
INSERT INTO teacher VALUES(NULL,'小白帽','370303y','博山区');

SELECT * FROM teacher
DROP TABLE teacher


-- 自增长约束(主键的基础上)

自动递增

自增长字段可以不赋值,自动递增
CREATE TABLE teacher(
    tid INT PRIMARY KEY AUTO_INCREMENT,
    tname VARCHAR(12) NOT NULL,
    idcard VARCHAR(20) UNIQUE,
    addr VARCHAR(20) DEFAULT '张店区'
)
INSERT INTO teacher(tname,idcard) VALUES('小红帽','370303x');
INSERT INTO teacher(tname,idcard) VALUES('小蓝帽','370303y');
INSERT INTO teacher(tname,idcard) VALUES('小蓝帽','370303z');
-- 清空表
DELETE FROM teacher
TRUNCATE TABLE teacher


INSERT INTO teacher VALUES(10,'小小帽','370303y','博山区');
INSERT INTO teacher(tname,idcard) VALUES('小蓝帽','370303z');

SELECT * FROM teacher

DROP TABLE teacher

-- 零填充(自增长约束的基础上)
CREATE TABLE teacher(
    tid INT(5) ZEROFILL PRIMARY KEY AUTO_INCREMENT,
    tname VARCHAR(12) NOT NULL,
    idcard VARCHAR(20) UNIQUE,
    addr VARCHAR(20) DEFAULT '张店区'
)

INSERT INTO teacher(tname,idcard) VALUES('小红帽','370303x');
INSERT INTO teacher(tname,idcard) VALUES('小蓝帽','370303y');
INSERT INTO teacher(tname,idcard) VALUES('小蓝帽','370303z');
SELECT * FROM teacher

-- 外键约束

约束两种表的数据

出现两种表的情况:

解决数据冗余高问题: 独立出一张表

如: 员工表  和  部门表

问题出现:在插入员工表数据的时候,员工表的部门ID字段可以随便插入!!!!!

使用外键约束:约束插入员工表的部门ID字段值

解决办法: 在员工表的部门ID字段添加一个外键约束。

注意1)被约束的表称为副表,约束别人的表称为主表,外键设置在副表上的!!!

  2)主表的参考字段通用为主键!

  3)添加数据: 先添加主表,再添加副表

  4)修改数据: 先修改副表,再修改主表

  5)删除数据: 先删除副表,再删除主表


-- 创建主表
CREATE TABLE dept(
    did INT PRIMARY KEY AUTO_INCREMENT,
    dname VARCHAR(10),
    mgr VARCHAR(10)
)
-- 创建副表
CREATE TABLE emp(
    eid INT PRIMARY KEY AUTO_INCREMENT,
    ename VARCHAR(10),
    esex CHAR(5),
    edate DATE,
    money DOUBLE,
    did INT, -- 外键
    CONSTRAINT emp_dept_fk FOREIGN KEY(did)
    REFERENCES dept(did)  -- 外键约束
)
-- 添加数据(先添加主表,再添加副表)
INSERT INTO dept(dname,mgr) VALUES('开发部','tom');
INSERT INTO dept(dname,mgr) VALUES('测试部','jerry');
INSERT INTO dept(dname,mgr) VALUES('产品部','tony');

INSERT INTO emp(ename,esex,edate,money,did) VALUES('张三','男','1999-09-09',6000,1);
INSERT INTO emp(ename,esex,edate,money,did) VALUES('李四','女','1995-05-05',4500,1);
INSERT INTO emp(ename,esex,edate,money,did) VALUES('王五','男','2006-06-06',5000,2);
INSERT INTO emp(ename,esex,edate,money,did) VALUES('赵六','男','2002-02-02',3000,3);
SELECT * FROM emp
SELECT * FROM dept
-- 修改数据(先改副表,在改主表)
UPDATE emp SET did=1 WHERE did=3
UPDATE dept SET did=4 WHERE did=3
-- 删除数据(先删副标在删主表)
DELETE FROM emp WHERE did=2
DELETE FROM dept WHERE did=2

 

 

连接查询(多表查询)

连接就是指两个或2个以上的表(数据源)“连接起来成为一个数据源”。

实际上,两个表的完全的连接是这样的一个过程:

左边的表的每一行,跟右边的表的每一行,两两互相“横向对接”后所得到的所有数据行的结果。

注意:连接之后,并非形成了一个新的数据表,而只是一种“内存形态”。


-- 交叉连接
SELECT * FROM emp JOIN dept
-- 内连接
SELECT * FROM emp JOIN dept ON emp.did=dept.did
-- 查询李四的部门经理
SELECT mgr FROM emp JOIN dept ON emp.did=dept.did WHERE ename='李四'
-- 查询测试部产品部员工名称
SELECT ename FROM emp JOIN dept ON emp.did=dept.did WHERE dname='产品部'
-- 查询所有男生所属的部门信息
SELECT dname FROM emp JOIN dept ON emp.did=dept.did WHERE esex='男'
-- 左外连接
SELECT * FROM dept LEFT JOIN emp ON dept.did=emp.did
-- 右外连接
SELECT * FROM emp RIGHT JOIN dept ON emp.did=dept.did

标签:INSERT,did,INTO,teacher,--,VALUES,mysql,数据库
来源: https://www.cnblogs.com/zongyvshu/p/15638825.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有