Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查
什么是数据库?
存储数据的仓库
数据库的存储介质:磁盘和内存。
为什么要用数据库不用文件?(数据库与文件进行数据存储的区别)
1.文件存储安全性低
2.数据库对数据进行良好的存储,查询以及管理
3.便于程序控制(C/S架构)
关系型数据库:以行和列的形式组织(OLTP)联机事务处理
Oracle:甲骨文产品,适合大型项目,适合复杂业务逻辑,如ERP、OA等,收费
MySQL:甲骨文,不适合复杂业务,开源
SQL Server:微软产品,安装部署在windows server上,适合中大型项目,收费
MariaDB:基于MySQL的开源数据库产品
Sqlite:轻量化,免费,数据量大麻烦,文件模式
非关系型数据库(OLAP联机分析处理):不规定基于SQL实现。
memcache/redis:基于键值对
mongodb:基于文档类型
为什么使用MySQL数据库?
1.采用客户端服务器模型,可以多个客户端请求数据库,数据库管理系统对数据库进行统一管理。
2.开源免费
通过MysSQL连接服务器的指令:mysql -uroot -p
断开服务器连接指令:退出:quit或者Ctrl+C
SQL分类:
DDL数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DML中又单独分了一个DQL,数据查询语言,代表指令: select
DCL数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
数据库:安装配置,数据库基础,基础操作,进阶操作,索引事务
数据库基础:库的操作,表的操作
注意事项:
数据库操作语句中不区分大小写
库名称、表名称、表字段名。。。不能使用关键字,若非要使用则使用‘ ’括起来
数据库操作的每条语句都要以分号;结尾
数据库语句中不区分双引号和单引号
库的操作:
1.创建数据库
CREATE DATABASE +名称(CREATE DATABASE db_name)数据库名字不能以数字起始或单独只使用数字
create database if not exists class_90;//创建数据库,若存在则不创建,若不存在则创建
2.查看所有数据库
show databases;
select database();//查看当前所选择的数据库
3.使用数据库
use db_name;
4.删除数据库
drop_database db_name;
备份:mysqldump -uroot -p -B class_90 > class_90.sql
还原:mysql -uroot -p < class_90.sql
数据类型:
整型:bit[M],tinyint,smallint,int,bigint
浮点型:float(m,d),double(m,d),decimal(m,d),numeric(m,d)
m为有效数字的个数,d为数字中小数的个数 decimal(6,3)
字符串:char(m)
varchar(m)--可变长度
text(m)--长文本数据
blob(m)--二进制长文本数据
日期:date,time,datetime(1000~9999)8字节, timestamp(1970~2038)4字节
表的操作
1.表的创建:
create table tb_name(fields_name type,...);
create table if not exists stu(id int,name varchar(32),ch decimal(4,2));
create table if not exists stu(id int,name varchar(32),sex bit(1),ch decimal(4,2),en decimal(4,2),bir datetime);
2.表的查看
查看库中所有的表show tables;
查看指定表结构 desc tb_name;
查看表的创建语句 show create table tb_name;
3.删除表
drop table tb_name;
表的增删改查:
新增:insert
insert into tb_name values(1,"张三",0,88.88,77.29,now());
insert into tb_name (id,name,bir)values(2,"李四",now());//单条数据新增
insert into tb_name values(3,"王五",0,23.88,77.59,now()),(4,"赵六",0,98.88,99.59,now());//多行数据新增
删除:delete
delete from tb_name;//删除表中所有数据
delete from tb_name where id=2;//删除id=2的数据
修改:update
update tb_name set id=2;//修改表中所有数据
update tb_name set id=2 where name="王五";
查询:select
select[* /fileds_name] from tb_name where condition;
select *from tb_name;//查询所有数据
select name,ch,en from tb_name;//查询指定字段的数据
select *from tb_name where name="王五";//条件查询
select ch+en as 总成绩 from tb_name;//查询字段可以为表达式,as取别名
去重:select distinct id from tb_name;//只能显示去重的列
select distinct id,name from tb_name;//以id和name一起作为整体去重
排序:order by desc-降序 asc-升序,默认升序
select *from stu order by ch desc;//表为stu,通过ch进行stu表的排序,desc降序
select *from stu order by ch desc,en desc;//多列时第一列为第一优先排序,第一列相等则以第二列进行降序排序
分页查询:limit
limit num;--只查询前num条数据
limit num offset start;//从第start条开始查询前num条数据
select *from stu order by ch limit 3;//查询语文成绩前三的同学信息
select *from stu limit 2 offset 0;//从第0条开始查询2条数据
select *from stu limit num offset (n-1)*num; //分页查询
条件查询:where 子条件,没有where都是针对所有数据
关系运算符: >,>=,<,<= 大小判断
=,<=>是否相等判断
!=,<>是否不相等判断
is NULL/is not NULL 判断字段是否为NULL
in(d1,d2,d3) 判断字段是否是集合中的某一个
between start and end 判断字段数据是否在start和end之间
like 模糊匹配,例如:select *from stu where name like "王%";
子条件 where
逻辑运算符:
逻辑与:and,两个条件都为真则结果为真
逻辑或:or,两个条件任意一个为真则结果为真
逻辑非:not,单个条件为真,则结果为假
增删改查进阶:表的约束,分组查询,数据库表的设计,多表联查。
表的约束:对表中某个字段值的约束
NOT NULL:约束字段的值不能为NULL
UNIQUE:约束表的字段的值必须唯一,唯一键约束
PRIMARY KEY:主键,约束字段必须非空且唯一(且一张表只能有一个主键)
create table if not exists tbt(id int ,primary key,name varchar(32));
create table if not exists tbt(id int, name varchar(32),primary key pkey(id,name)); 以id和name作为一个整体,组合主键。
DEFAULT:默认值约束,当不插入数据或者插入NULL则表示插入默认数据
create table if not exists tbt( id int, name varchar(32) NOT NULL);
AUTO_INCREMENT: 自动增长属性--只能对整形字段进行设置 (只针对主键--扩展属性
create table if not exists tbt( id int unique auto_increment, name varchar(32) );
FOREIGN KEY: 外键约束,约束字段匹配另一张表中的值。
create table if not exists tb_class( id int primary key, name varchar(32) not null unique);//子表
create table if not exists tb_stu( id int primary key, name varchar(32),class_id int,foreign key(class_id) references tb_class(id));//父表
子表对应外键的字段必须是父表中对应字段所存在的数据
CHECK字句:--检测数值是否符合条件
聚合查询:
聚合函数:
count(): 统计数据条数 实例:select max(ch) from stu;
sum(fields_name):某一列字段数据的综合
avg(fields_name):某一列字段数据平均数值
max(fields_name):某一列字段数据最大数值
min(fields_name):某一列字段数据最小数值
分组查询:按照表中某一字段作为依据对数据进行分组
group by column having condition;
分组查询中,通常是对分组的数据进行统计运算。
select role from emp group by role having avg(salary)>1500;
//其中emp是表,按照表中role进行统计salary的平均avg大于1500的有谁。
数据库表的设计:
三大范式:如何让数据库表设计的更加合理的一种规范
第一范式-1nf:保证表中每个字段具有不可分割原子性。
第二范式:表中数据必须与主键完全相关(不能部分相关,减少数据冗余)
将此表分成2部分进行设计:
第三范式:表中字段必须与主键直接相关,不能间接相关
班主任与学号是间接相关,产生数据冗余信息,
ER关系图--实体关系图
方形表示一个实体,圆形表示一个属性,菱形表示一个关系。
一对一:
在数据库表中,理解为,其中任意一方将对方的id作为自己的一个字段,则可以将两张表联系起来。
多对多:
多表联查:
笛卡尔积:
多表连接方式:内连接,外连接(左连接,右连接)
内连接:取交集,学生表,班级表--得出一一对应关系的
select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件
右连接:以右表作为一个主表,在左表中查询数据,若查询不到则以NULL显示
学生表join班级表on学生表的班级id=班级表的id
select 字段 from 表名1 right join 表名2 on 连接条件;
左连接:与右连接相反
select 字段名 from 表名1 left join 表名2 on 连接条件
Mysql库及表的基本概念、增删查改操作以及表的约束、多表联查相关推荐
- 【TcaplusDB知识库】GO快速上手PB表的增删查改操作
PROTOBUF说明 PROTO表是基于PROTOBUF协议设计的TcaplusDB表,PROTOBUF协议是Google开源的通用RPC通信协议,用于TcaplusDB存储数据的序列化.反序列化等操 ...
- C++通过ODBC方式连接数据库SQLServer及增删查改操作【图书借阅系统为例】
C++通过ODBC方式连接数据库SQLServer及增删查改操作[图书借阅系统为例] 文章目录 前言 一.ODBC如何配置 二.SQL Server如何设置账号密码 三.C++连接数据库以及增删查改操 ...
- java调用js查询mongo_MongoDB增删查改操作示例【基于JavaScript Shell】
本文实例讲述了MongoDB增删查改操作.分享给大家供大家参考,具体如下: MongoDB自带了一个JavaScript Shell,所以在其中使用js语法是可以的. Insert操作: 单条插入 v ...
- 火山视窗文本数组类增删查改操作
本源码转载自利快云https://www.lkuaiy.com/ 火山视窗文本数组类增删查改操作 文本数组类可对文本型数据进行数组操作,本类可以非常方便的实现对文本数组的增删查改. 一.添 ...
- 火山视窗整数数组类增删查改操作
本源码转载自利快云https://www.lkuaiy.com/ 火山视窗整数数组类增删查改操作 整数数组类可对整数数据进行数组操作,本类可以非常方便的实现对整数数组的增删查改. 一.添加 ...
- 数据库mysql增删查改操作指令
1.基础操作 MySQL服务器->许多数据库->许多数据表-> 指定表头,表头描述了列名和列类型-> 每行为一个记录,每列为一个字段 数据类型:tinyint(1字节),sma ...
- 【MySQL】数据库中表的增删查改操作详解
文章目录 前言 SQL的通用语法 一.表的创建与表的新增 语法 数据类型的介绍 演示 二.表的删除 语法 删整张表的语法 删记录的语法 演示 三.表的查询 查询整张表 (一)全列查询 (二)指定列查询 ...
- Django:数据库表的建立与增删查改(ForeignKey和ManytoMany)
数据库表的创建: 1.Django工程项目建立,基础环境调试. 2.创建表 from django.db import models class Publisher(models.Model): ...
- 数据结构C语言实现顺序表——增删查改操作实现详解
顺序表 顺序表是什么? 顺序表是将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示.实现增删查改的功能. 顺序表所需的头文件: #include<stdio.h> ...
- Hibernate一对多/多对一关系映射详解及相应的增删查改操作
以客户与订单的关系为例 1.在实体模型类中绑定两者关系: 客户类: public class Customer {private Integer id;//客户idprivate String nam ...
最新文章
- Normalization,Regularization 和 standardization
- 【2017-02-20】C#基础 - 运算符//表格,示例,代码巩固练习
- 【tomcat】servlet原理及其生命周期
- javascript对象包含哪些要素_javascript有哪几种对象?
- Joseph Problem(解约瑟夫问题)
- Android平台使用Camera2(5.0+)替代过时的Camera
- 第十二届 蓝桥杯 青少年C++组 10月比赛 第1题
- 测试笔的使用_宽带故障怎么办?毕亚兹红光笔1秒定位光纤故障,快速解决问题...
- Java案例:接口的静态方法
- 现在是 RSS 复兴的时候了!
- Sql Server 2005各大版本区别与下载
- Java 一个简单的绘制类似花瓣的程序
- 关于《PHP任务学习》的说明
- 生活养生--转载微博
- 透析JMS、MQ看看应用与应用的底层如何完成通信
- paip.log4j 日志系统 参数以及最佳实践
- mysql执行计划(explain)
- 使用J-link+J-Flash给STM32芯片烧写序列号
- html影院选座模板,jQuery实现影院选座订座效果
- GEE开发之Landsat8_SR计算NDVI和数据分析
热门文章
- Mac brew报错Error: The following directories are not writable by your user: /usr/local/share/man/man5
- keras实例化model后,结果返回NoneType
- 为什么用c语言程序中的if语句实现从1加到100最后的结果是负数,用C语言程式计算从1加到100的程式是怎样的?...
- php中的DS,PHP Ds\Set reverse()用法及代码示例
- mongodb查询文件服务器的数据,服务器端知识库mongodb基础篇
- Map/Reduce
- (第十三周)评论Final发布II
- 从博客园迁移到自己用Hexo搭的博客
- 自己写一个java.lang.reflect.Proxy代理的实现
- 第四届HTML5峰会 - 上海站