数据库04—约束条件

约束条件

unsigned         --无符号
zerofill        -- 0填充
not null        --非空
default         -- 默认值
unique          -- 唯一
auto_increment  --自增
primary key     --主键
foreign key     --外界

MySQL 约束条件

约束条件用于对表中字段进行约束,一般写在某个字段最后,如果有多个约束条件,用空格分隔,创建新表时约束条件的写法如下:

Copycreate table 表名称
(字段名称 数据类型[(长度) 约束条件1 约束条件2 ...],...
);

1.unsigned——无符号

语法

create table  表名称
( 字段名称 int unsigned,  #说明此字段为无符号整数类型......
);

2.zerofill-- 0填充

定义了数据类型的长度,如果实际位数小于定义的长度,显示时会在左边用0 填充

语法

create table 表名称(字段名称 int zerofill,.....
);

3.not null–非空

语法

create table 表名称
( 字段名称 数据类型(长度) not null, #在表中插入数据中这个字段不能为空......
);
不等于''空字符串

4.default --默认值

语法

create table 表名称
(字段名称 数据类型(长度) default 0, #默认值 0......
);

5.unique—— 唯一

在表中插入数据时,该字段的值是唯一的,不能与已有数据的该字段值重复

create table 表名称
( 字段名称 数据类型(长度) unique,......
);
eg:create table t1 (id int, name varchar(16) unique)localhost192.168.  局域网47.193.1*****host       portmysql -h 127.0.0.1 -P 3306 -u root -p 密码

联合唯一

单个字段可以重复,但多个字段组合起来是唯一的

语法

create  table 表名称
(字段名称1 数据类型[(长度) 约束条件],字段名称1 数据类型[(长度) 约束条件],......, unique(字段名称1,字段名称2)  # 字段名称1和字段名称2是联合唯一的
);eg:
# 多列唯一create table t2 (id int,host varchar(32),port int,unique(host, port))

6.auto_increment --自增

在表中插入数据时,如果不对该字段赋值,会自动在已有最大值的基础上+1

语法

create table 表名称
(字段名称 数据类型(长度) auto_increment,...
);
#可以理解为 为主键使用的,自增,每次增加1
create table t3(id int  primary key  auto_increment,name varchar(16)
)#结论
id int primary key auto_increment
cid int primary key auto_increment
uid int primary key auto_increment

7.primary key --主键

主键一般与自增一起使用,也是约束唯一, 但它还可以提高查询效率

在外键中也经常绑定与主键

语法

create table 表名称
( 字段名称 int primary key  auto_increment,......
);eg:# 1. 从限制角度来说,主键相当于非空且唯一id int primary key == id int not null uniquecreate table t4(id int  primary key)#InnoDB 存储引擎规定一张表中必须有一个主键,为什么之前的创建表没有指定主键,也能创建成功?InnoDB引擎帮你用一个隐藏的字段创建了一个主键,隐藏意味着看不到,也不能用。#主键的功能: 查询速度快,主键本质也是一种索引

8.foreign key --外键

外键是表与表间关系的一种键

外键前期准备

1. 在数据表中一般不存中文# 问题扩展性差

表关系判断

一对一
一对多
多对多
#############一对多###################站在不同的角度去判断1. 一个用户可以有多个部门吗?不可以2. 一个部门可以有多个用户吗?可以# 结论:只要是一个可以,一个不可以,那么,他们就是 一对多 的关系   #########################多对多######################    站在不同的角度去判断1. 一个图书可以有多个作者吗?可以2. 一个作者可以有多个书吗?可以# 结论:只要是一个可以,另外一个可以,那么,他们就是 多对多 的关系#########################一对一######################    站在不同的角度去判断1. 一个作者可以有多个作者详情吗?不可以2. 一个作者详情可以有多个作者吗?不可以# 结论:只要是一个不可以,另外一个也不可以,那么,他们就是 一对一 的关系 

一对一关系外键建在任何一个表中都可以
但是,推荐建在查询频率高的一个表,

SQL语句实现表关系

####################一对多#######################
1. 实现一对多, 一对多的外键建在多的一方# 创建带有表关系的表
# 1.先创建基表,
# 2.在添加外键关系
# 3.先创建被关联的表,  先创建没有外键的表
create table userinfo(
id int  primary key  auto_increment,username varchar(32),salary decimal(8,2),dep_id int,foreign  key (dep_id) references dep(id)
);
create table dep(id int primary key auto_increment,name varchar(32),descript varchar(64)
)
####################多对多#######################create table book(id int primary key auto_increment,title varchar(16),price int
);create table author(id int primary key auto_increment,name varchar(16),phone int
);# 多对多一定要先创建第三张表create table book2author(id int primary key auto_increment,book_id int,author_id int,foreign key (book_id) references author(id)on update cascade  # 级联更新on delete cascade,  # 级联删除foreign key (author_id) references book(id)on update cascade  # 级联更新on delete cascade  # 级联删除
);

级联更新级联删除

create table userinfo_1 (id int primary key auto_increment,username varchar(32),salary decimal(8, 2),dep_id int,foreign key (dep_id) references dep_1(id)on update cascade  # 级联更新on delete cascade  # 级联删除
)create table dep_1(id int primary key auto_increment,name varchar(32),descript varchar(64)
)insert into dep_1 (name , descript) values ('技术部', '技术');insert into dep_1 (name , descript) values ('外交部', '外交');

查询关键字

表准备
create table emp(id int primary key auto_increment,name varchar(20) not null,sex enum('male','female') not null default 'male', #大部分是男的age int(3) unsigned not null default 28,hire_date date not null,post varchar(50),post_comment varchar(100),salary double(15,2),office int, #一个部门一个屋子depart_id int
);#插入记录
#三个部门:教学,销售,运营
insert into emp(name,sex,age,hire_date,post,salary,office,depart_id) values
('tom','male',78,'20150302','teacher',1000000.31,401,1),
('kevin','male',81,'20130305','teacher',8300,401,1),
('tony','male',73,'20140701','teacher',3500,401,1),
('owen','male',28,'20121101','teacher',2100,401,1),
('jack','female',18,'20110211','teacher',9000,401,1),
('jenny','male',18,'19000301','teacher',30000,401,1),
('sank','male',48,'20101111','teacher',10000,401,1),
('哈哈','female',48,'20150311','sale',3000.13,402,2),#以下是销售部门
('呵呵','female',38,'20101101','sale',2000.35,402,2),
('西西','female',18,'20110312','sale',1000.37,402,2),
('乐乐','female',18,'20160513','sale',3000.29,402,2),
('拉拉','female',28,'20170127','sale',4000.33,402,2),
('僧龙','male',28,'20160311','operation',10000.13,403,3), #以下是运营部门
('程咬金','male',18,'19970312','operation',20000,403,3),
('程咬银','female',18,'20130311','operation',19000,403,3),
('程咬铜','male',18,'20150411','operation',18000,403,3),
('程咬铁','female',18,'20140512','operation',17000,403,3);
1.select用来指定表的字段数据select * from emp;select id,name from emp;"""在工作中一般很少使用*号 我们只是为了教学方便"""2.from后面跟需要查询的表名即可3.where筛选数据

查询关键字之where

# 1.查询id大于等于3小于等于6的数据
select id,name from emp where id >= 3 and id <= 6;
select *  from emp where id between 3 and 6;  # 2.查询薪资是20000或者18000或者17000的数据
select * from emp where salary = 20000 or salary = 18000 or salary = 17000;
select * from emp where salary in (20000,18000,17000);  # 简写"""
模糊查询关键字  like关键符号%:匹配任意个数的任意字符_:匹配单个个数的任意字符show variables like '%mode%';
""" elasticsearch
# 3.查询姓名中带有字母o的员工姓名和薪资
select name,salary from emp where name like '%o%';# 4.查询姓名由四个字符组成的员工姓名和薪资
select name,salary from emp where name like '____';
select name,salary from emp where char_length(name) =4;# 5.查询id小于3或者大于6的数据
select *  from emp where id not between 3 and 6;# 6.查询薪资不在20000,18000,17000范围的数据
not in 不走索引
select * from emp where salary not in (20000,18000,17000);# 7.查询岗位描述为空的员工名与岗位名  针对null不能用等号,只能用is
select name,post from emp where post_comment = NULL;  # 查询为空!
select name,post from emp where post_comment is NULL;
select name,post from emp where post_comment is not NULL;

查询关键字之group by分组

分组将单个单个的个体按照指定的条件分成一个个整体"""
分组之后默认只能直接获取到分组的依据
其他字段无法再直接获取(可以间接获取)
"""
# 严格模式
set global sql_mode='STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH,only_full_group_by'# 1.每个部门的最高薪资
select post,max(salary) from emp group by post;
# 2.每个部门的最低薪资
select post,min(salary) from emp group by post;
# 3.每个部门的平均薪资
select post,avg(salary) from emp group by post;
# 4.每个部门的人数
select post,count(id) from emp group by post;
# 5.每个部门的月工资总和
select post,sum(salary) from emp group by post;"""
可以给字段起别名(as还可以给表起别名)select post as '部门',sum(salary) as '总和' from emp group by post;
"""
# 查询分组之后的部门名称和每个部门下所有的员工姓名
"""
group_concat()  获取分组以外的字段数据 并且支持拼接操作
select post,group_concat(name) from emp group by post;
select post,group_concat(name,':',salary) from emp group by post;concat()  未分组之前使用的拼接功能
select concat(name,':',sex) from emp;concat_ws()
select concat_ws(':',name,sex,salary,age) from emp;
"""
聚合函数
分组之后频繁需要使用的max       最大值min      最小值sum      求和count 计数avg       平均值

数据库04—约束条件相关推荐

  1. Oracle数据库:约束条件:主键约束、唯一约束、检查约束、非空约束、外键约束、默认值填写

    Oracle数据库:约束条件:主键约束.唯一约束.检查约束.非空约束.外键约束.默认值填写 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开 ...

  2. mysql设置自动递增_《MySQL数据库》约束条件和自增长序列

    一.约束(constraint) 约束就是在表上强制执行的一种校验规则,当执行DML操作时,数据必须符合这些规则,如果不符合,将无法执行. 约束的全称:约束条件,也称之为完整性约束条件.可以保证表中数 ...

  3. 数据库——完整性约束条件

    文章目录 1.完整性约束条件测试 1.1完整性约束条件有哪些 1.1.1主键 1.1.2自增长 1.1.3测试非空NOT NULL 1.1.4测试默认值DEFAULT 1.1.5测试唯一UNIQUE ...

  4. python数据库pymysql_Python——数据库04 Python操作MySQL pymysql模块使用,python,04python,MySQLpymysql...

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQ ...

  5. Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例

    Oracle数据库:排序order by语句,select from where order by的执行先后顺序,各种样例 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多 ...

  6. Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图、序列、索引等对象的导出,oracle完结,后续开启mysql的学习

    Oracle数据库:oracle数据表格dmp,sql,pde格式导入与导出,视图.序列.索引等对象的导出,oracle完结,后续开启mysql的学习 2022找工作是学历.能力和运气的超强结合体,遇 ...

  7. 【Qt】数据库实战(二)

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 连接到数据库 04. 操作结果集 06. 附录 01. 概述 SQL即结构化查询语言,是关系数据库的标准语言.前面已经在Q ...

  8. 『数据库』这篇数据库的文章真没人看--数据库完整性

    『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 实体完整性 参照完整性 用户定义的完整性 完整性约束命名子句 域中的完整性限制 触发器 激活触发器 删除触发器 小结 ...

  9. 【数据库题型大总结】名词解释总结

    (1)非常重要 数据:是数据库中存储的基本对象,是描述事物的符号记录 数据库:是永久存储在计算机内的,有组织的.可共享的大量数据的集合 数据库管理系统:是位于用户与操作系统之间的一层数据管理软件,和操 ...

  10. 数据库逻辑删除的sql语句_SQL查询优化的数据库设计和逻辑断言

    数据库逻辑删除的sql语句 Database design and Logical Asseveration play a vital role in database performance and ...

最新文章

  1. 2022 AI趋势8大预测!
  2. 春节红包大战7年,BAT的变与不变
  3. CentOS 更改Apache默认网站目录
  4. kibana java_kibana安装
  5. 开启事物_《原神》全新角色甘雨登场 「浮生孰来」活动祈愿开启_新闻资讯_最新手游时评_原创手游资讯...
  6. 加了密的PDF如何破解复制?
  7. 万字详解Lambda、Stream和日期
  8. Hibernate - HHH000352: Unable to release batch statement
  9. 宝塔面板FTP连接方法
  10. 发力多人在线游戏!PS5有望2020年E3展会亮相!
  11. python 调用 c 模块
  12. AVOD-代码理解系列(三)
  13. 镜像iso文件下载地址
  14. ESD笔记(三)_常用ESD保护电路优缺点
  15. 偶数提取(不用二次倒位,直接一步到位)
  16. 数据分析实战 -- 股票量化交易分析
  17. python处理word替换_python替换word中的关键文字(使用通配符)
  18. 【 rbx1翻译 第七章、控制移动基座】第二节、运动控制级别
  19. 女生做软件测试的利弊如何权衡?
  20. 第五届“强网”拟态防御国际精英挑战赛在南京举行——开辟网络安全新赛道 引领网络弹性新优势

热门文章

  1. html自动写对联,HTML 实现网站对联广告位
  2. 论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement
  3. MATLAB地图工具箱学习总结(一)从地图投影说起
  4. QT菜单栏颜色与背景颜色设置
  5. 潜入蓝翔技校二十天 探究蓝翔黑客真正的奥秘
  6. Java实现图片上传到服务器,并把上传的图片读取出来
  7. win2003 开启显示加速
  8. win10资源管理器explorer总是崩溃重启
  9. 七日杀服务器怎么修改天数,七日杀如何调整天数 | 手游网游页游攻略大全
  10. 技术团队人效计算公式