/*
*MySql数据库
*数据库:是一个文件系统,访问数据的时候需要通过标准的sql语句来完成,
*关系型数据库:保存的是实体于实体时间的关系
*常见数据库:oracle:oracle(甲骨文)公司的数据产品,收费的大型数据库
MySQL:开源的,被oracle收购了,小型的数据库
5.x免费,6.x收费了
SQLServer:微软的,收费的中型数据库
DB2:IBM公司收费的大型数据库
SyBASE:PowerDigener软件
*MySQL:
*一个数据库服务器中可以有多个数据库
*一个数据库中有多个表
*每个表有多个字段
*字段跟java中类的属性是对应的
*每一条记录对应的是java的实例对象
*SQL:Structrued Query Language 结构化查询语言
*非过程性语言:不依赖其他语句,写一条语句,就会执行一个结果
*过程性语言:吓一跳语句,需要依赖上一条或者上几条语句
*Oracle开发了PL/SQL,只能在oracle数据库中使用
*SQL Server,Sybase的T-SQL
*SQL语言的分类:
*DDL:数据库定义语言
*用来定义数据库的对象,如数据表,表,视图
**DML:数据操纵语言
*插入数据(insert),修改数据(update),删除数据(delete)
*DCL:数据控制语言
*用于设置用户权限和控制事物语句
**DQL:数据查询语言
*select
*CURD--增删改查
*数据库
*创建数据库:
*语法:create database 数据库名 character set 编码 collate 校对规则;
*校对规则:和编码是成对出现的
*eg:create database mydb1 character set 'utf8' collate 'utf8_bin';
*查看数据库:show database
*查看数据库定义:show create database 数据库名;
*会显示数据库定义的一些信息
*删除数据库:drop database 数据库名
*修改数据库:alter database 数据库名 character set 要修改的编码方式 collate 要修改的校对规则;
*切换数据库:use 数据库名;
*查看当前使用的数据库:select database();
*表
*语法:create table 表名 (
字段1 字段类型(长度) 约束,
字段2 字段类型(长度) 约束
......
);
*注意:
*表名,小括号,后面要有分号,字段之间用逗号隔开
*数据的类型后面有长度,如果是字符串类型,长度必须加
其他类型有默认的长度,必须int 默认长度为11
*数据的类型:
*字符串:VARCHAR 可变长度 长度限定之后,根据你存入的具体数据的长度进行调整,节约空间
CHAR 固定长度 长度限定之后,存入的数据长度远远小于限定的长度,数据库也会用空格补全,把空间占满,所以不常用
**存入的数据都不可以超过限定的长度
*char的效率较高,因为不用去判断长度
*大数据类型:BLOB 存储二进制文件
TEXT 存储字符 两个一般都不用
*数值型:TINYINT
SMALLINT
INT (int)
BIGINT(long)
FLOAT
DOUBLE
*逻辑型:BIT(Boolean)
*日期型:DATE:只包含日期,不包含时间
TIME:只包含时分秒
DATETIME: 包含日期和时分秒,需要手动录入时间
TIMESTAMP:包含日期和时分秒,不传入数据,会默认选择当前系统的事件存入
*eg:
create table employee1(
id int,
name varchar(20),
gender varchar(10),
birthday date(),
enter_date date(),
job varchar(100),
salary double(),
resume text()
);
*查看表:show tables
*查看表信息:desc 表名;
*查看建表语句和字符集:show create table
*删除表:drop table 表名
*约束:单表
*主键:可以唯一标识当条记录的字段,通过primary key声明
*一般为int型的id
*auto_increment:数据库维护主键,自增长,必须为int或者long类型
*默认是唯一,非空的。
*唯一
*值是唯一的,但是允许为空。使用unique声明
*非空
*值不能为空 使用not null
*eg:增加了约束的表
create table employee2(
id int primary key auto_increment,
name varchar(20) not null,
email varchar(10) unique not null,
password varchar(100) not null,
);
*修改表:
*删除:alter table 表名 drop (字段);
*追加:alter table 表名 add 字段 类型(长度) 约束;
*修改:alter table 表名 modify(字段 类型(长度) 约束);
*修改表名:rename table 表名 to 新表名;
*修改列名:change [列] 旧列名 列定义
修改表的字符集:alter table 表名 character 字符集
*数据
*插入
*insert into 表名(字段1,字段2,...) values(值1,值2,...):
*前面和后面要一一对应
*insert into values(值1,值2,...);
*默认插入所有列,没有的都要用占位符,不然会报错
*注意
*数据与字段的类型个个数要相同
*字段的类型和值要对应
*字段的长度要控制
*字符串或者日期类型要使用单引号,int等类型就不用
*解决中文乱码问题:
[client]
port=3306
[mysql]
default-character-set=gbk
修改完成之后需要重新启动服务
*修改:
*语法:update 表名 set 字段=值,字段=值...[条件语句(where...)]
*没有条件语句则默认更新所有的记录
*有where提交,则选择一条记录修改
*删除:delete
*语法:delete from 表名 [where ];
*删除所有数据 truncate 表名
*和delete的区别:
*truncate删除数据,先删除整个表,再创建一个新的表
*delete删除数据,一条一条的删除,
*delete效率没那么高,但是一般都用delete
*查询:
*语法:select * from 表名; 查询表中所有信息
select 字段1,字段2 from 表名; 显示字段1,字段2
select DICTINCT 字段名 from 表名 取出重复的数据
*有一次笔试考过去重复数据
*查询的列可以运算
*在所有的学生分数上加10分
*select name,math+10,english+10,chinese+10 from stu;
*统计每个学生的总分
*select name,math+english+chinese from stu;
*可以使用别名:使用as 别名,且as可省略
*使用别名显示学生的总分
*select name,(math+english+chinese) as sum from stu;
*查询后就显示name和sum两列
*使用where条件进行过滤
*查询孔海海的成绩
*select * from stu where name='孔海海';(正经的编程要用主键)
*常用符号: < > <= >= = <>(不等于)
in(范围内取内容)
like --模糊查询 写法:like ‘张_’(‘张%’) ;
*下划线只能有一个字符,%可以有多个字符
*like ‘%张’ xxx张
like ‘张%’ 张xxx
like ‘%张%’ xxx张xxx
is null --判断是否为null
and --并且
or --或者
not --不成立
查询英语分数在 80-90之间的同学。
select * from stu where english >80 and english <90;
select * from stu where english between 80 and 90;
查询数学分数为18,78,46的同学。(in)
select * from stu where math in(18,78,46);
查询所有姓孔的学生成绩。
select * from stu where name like '孔%';
查询数学分>80,语文分>80的同学。
select * from stu where math >80 or chinese > 80;
*排序 使用order by 升序(ASC,默认)/降序(desc)
*排序语句出现在select语句的末尾
*order by语句只能写一个
按照多个的排序时候,用逗号隔开,但是不要order by语句了
对数学成绩排序后输出。
select name,math from stu order by math;
对总分排序按从高到低的顺序输出
select name,math+english+chinese from stu order by (math+english+chinese) desc;
对学生成绩按照英语进行降序排序,英语相同学员按照数学降序
select * from stu order by english desc,math desc;
对姓孔的学生成绩排序输出
select * from stu where name like '美%' order by english desc;
*聚集函数
*count 获取数量
*统计班上的学生总数
select count(*) from stu;
*统计数学成绩大于90的学生人数
select count(*) from stu where math>90
*统计总分大于150的学生人数
select count(*) from stu where(math+english+chinese)>150
*sum 求和(忽略null)
*统计班上数学的总成绩
select sum(math) from stu
*统计班上各科的总成绩
select sum(math),sum(english),sum(chinese) from stu;
*统计班上所有科目成绩的总和
select sum(math+english+chinese) from stu;
select sum(math)+sum(english)+sum(chinese) from stu;
*如果有学生的成绩存在空值的时候,第一种会出现问题,因为null+number+number为null,
sum函数忽略空值,那么那一行就没有了
*sum函数不能计算字符串
而第二种,就忽略了那一个为null的分数,对总分是没有影响的
*解决:有一个可以判断分数是否为null的函数,如果为null,则把那个分数置为0,0是可以和数字相加的。
select sum(ifnull(math,0)+english+chinese) from stu;
判断math,如果math为空,则math为0
*avg 求平均数
*统计班上语文的平均分
select sum(chinese)/count(*) from stu;
select avg(chinese) from stu;
*max 最大值
*统计班级数学的最高分
*select max(math) from stu;
*min 最小值
*统计班级数学的最低分
*select min(math) from stu;
*group by 分组
*小结:select语句 S-F-W-G-H-O
*selec ... from ... where ... group by ... having ... order by ...;
顺序不能改变
*create table stu
(
id int primary key auto_increment,
name varchar(20),
math int,
english int,
chinese int
);
insert into stu values(null,'孔海海',77,88,99);
设置为自增长后,用null占位,会默认从1开始自增
*多表操作
*外键约束
*作用:保证数据的完整性
*语法:alter table 表名 add foreign key 当前表名(需要设置为外键的字段) references 要映射的的表名(被映射到的表的字段)
*数据库的设计
*一对多 一个班级可以有多个学生,一个部分有多个员工
*建表原则:
*在多方表中添加一个字段,把这个字段作为外键,并且指向一方的主键
两个字段的类型必须一致
*多对多:一个学生可以选择多门课程,每门课可以被多个学生选择
*建表原则:
*创建一个中间表,表中至少两个字段,分别转换成两个一对多
两个字段作为外键分别指向两个多对多关系表的主键
*一对一(了解)
*一个公司对于一个地址。
*这样的情况,是完全可以存放在一张表中的
*但,具体情况具体分析。
*建表原则:
*主键对应:两个表的主键必须一致,将两个表的主键进行关联
*唯一外键对应:为表重新设置外键(不能为空,不能相同)
*多表查询
*笛卡尔积:
*语法:select * from 表A,表B;
*查询返回的结果就是笛卡尔积
表A 表B
aid aname bid bname
a1 aa1 b1 bb1
a2 aa2 b2 bb2
b3 bb3
select * from 表A,表B; 返回的结果就是笛卡尔积。
结果:
a1 aa1 b1 bb1
a1 aa1 b2 bb2
a1 aa1 b3 bb3
a2 aa2 b1 bb1
a2 aa2 b2 bb2
a2 aa2 b3 bb3
*内连接
*普通的内连接
*使用前提:需要有外键
*提交关键字:inner join ... on
select * from dept inner join emp on dept.did = emp.dno;
*隐式的内连接(用得多)
*可以不使用inner join ... on 关键字
select * from dept,emp where dept.did = emp.dno;
*外连接
*用的少是因为一些不符合要求的数据也会查出来,可能会出错。
*左外连接(看左表,查出左表中的全部数据)
*前提:需要外键
*语法:使用关键字 left [outer] join ... on
*右外连接(看右表,查出右表中的全部数据)
*语法:使用关键字 right [outer] join ... on
*子查询
*查询的内容需要另一个查询的结果。
*any
*>any 大于结果的最小值
*all
*>all 大于结果的最大值
*练习:
create table dept(
did int primary key auto_increment,
dname varchar(30)
);
create table emp(
eid int primary key auto_increment,
ename varchar(20),
salaly double,
dno int
);
查看所有人所属的部门名称和员工名称?
select dept.dname,emp.ename from dept,emp where dept.did = emp.dno;
select d.dname,e.ename from dept d,emp e where d.did = e.dno;
统计每个部门的人数(按照部门名称统计,分组group by count)
select d.dname,count(*) from dept d,emp e where d.did = e.dno group by d.dname;
统计部门的平均工资(按部门名称统计 ,分组group by avg)
select d.dname,avg(salaly) from dept d,emp e where d.did = e.dno group by d.dname;
统计部门的平均工资大于公司平均工资的部门(子查询)
* 公司的平均工资
select avg(salaly) from emp;
* 部门的平均工资
select d.dname,avg(e.salaly) as sa from dept d,emp e where d.did = e.dno group by d.dname having sa > (select avg(salaly) from emp);
*/相关推荐
WiFi信道状态信息 基于Intel 5300的CSI Tool 安装及使用(一)
经过半个月的坎坷安装过程,连Windows系统都没装过的本人终于颤颤巍巍把CSI TOOL装好了,下面记录一下适于我所使用设备的安装过程。设备:一台THINKPAD X201,一台师兄借的华硕主板的台式机首先,如果你和我一样对linux其实一窍不通的话,建议先反复看教程里的安装代码,照猫画虎很难一步实现的,中途一定会有这或那的问题需要解决,所以该了解的基础linux指令还是要了解,起码安装过程中的那些指令可以去查一查。.........
MYSQL可以存储DICT字典
MYSQL可以存储DICT字典 在数据库管理系统中,MYSQL是一种常用的关系型数据库,它可以存储各种类型的数据,包括字典(DICT)类型的数据。字典是一种键值对的数据结构,通常用于存储一组相关联的信息。在MYSQL中,我们可以通过创建适当的数据表来存储字典数据,以便后续的检索和处理。 字典数据表设计 在MYSQL中,我们...
DESeq2实战:如何用LRT检验分析基因表达随时间变化的模式(附完整代码)
本文详细介绍了如何使用DESeq2中的LRT检验分析基因表达随时间变化的模式,包括实验设计、数据预处理、模型构建、结果提取与可视化等完整流程。通过实战案例和完整代码,帮助生物信息学研究者掌握时间序列RNA-seq分析的核心技术,特别适合需要快速上手的实践者。
元祖数据mysql,mysql数据库中dict的元组
I am running MySQL query from python that returning tuple of dict, lets call it result. Now each dict has 3 key/value pairs as an element, one of these 3 element is date. Now I want to create "tuple o...
Linux新手必看:FinalShell连接不上?从检查IP到配置固定地址的完整排错指南
本文为Linux新手提供了FinalShell连接失败的完整排错指南,涵盖IP检查、SSH服务状态、防火墙配置和静态IP设置等关键步骤。通过详细的命令行操作和配置示例,帮助用户快速解决远程连接问题,提升Linux使用效率。
手把手教你用TP4056和PMOS管搭建锂电池自动切换电路(含元器件选型指南)
本文详细介绍了如何使用TP4056和PMOS管搭建锂电池自动切换电路,包括核心架构设计、元器件选型指南和PCB布局优化。通过智能充电算法和电源路径切换模块,实现外部供电与锂电池的无缝切换,提升便携式设备的电源管理效率。
随笔之pymysql查询结果转字典dict
直接上可用代码 import mysql def get_sql_conn(): """ 获取数据库连接 """ conn= pymysql.connect(host="*.*.*.*",user="username",password="password",db="dbname") cursor = conn.cursor() return co...
node-red 可视化探索
配置socket选择配置流程产生url。
mysql中的字典项是啥_常见数据库设计(1)——字典数据
在稍大一些的项目中,我们总是需要管理各种各样的类型类型数据(如商品类型、游戏类型。。。)。对于这些类型的管理类似,如果为每一种类型都建立一张表去维护(而在项目中,正常出现50种类型),那工作量是可想而之大,并且我们不得不去了解每一个类型表的名字,以去关联它。因此,我们需要一种数据模型以完成对多种多样类型管理的需求。字典表dictionary字段名 类型 ...
Cyclone DDS背景技术
DDSI标准与DDS 1.2和1.4标准密切相关,DDSI中的实体与DCPS中的实体之间有明确的对应关系。但是,这种对应关系不是一一对应的。 此处,仅仅对DDSI规范的概念进行描述,暂不涉及Eclipse Cyclone DDS实现的细节。DDSI规范的概念将帮助对互操作性interoperability感兴趣的技术人员了解规范的外延边界和Eclipse Cyclone DDS实现的开始。
LPDDR5电路设计的新功能
本文从硬件电路设计的角度,简述了LPDDR5 JEDEC标准中新增的功能。
python 把mysql表转成dict_将Python dictionary(dict)对象转储到MySQL表的最快方法?
不过,为了回答你的问题,我把这个贴在了另一个问题上,我也在这里转载:def ins_query_maker(tablename, rowdict):keys = tuple(rowdict)dictsize = len(rowdict)sql = ''for i in range(dictsize) :if(type(rowdict[keys[i]]).__name__ == 'str'):sql...
Docker/Hyper-V/Wsl2等虚拟化组件一键切换工具 (附源码, Docker Desktop开发模式与三角洲游戏模式一键切换工具)
开启 Docker、Hyper-V 或 WSL2 后游戏无法启动?🎮💻 本文教你用一键批处理工具⚡快速切换“开发/游戏模式”,开发娱乐两不误!🔄✨
MySQL笔记---对数据库(database)的操作
例如,创建一个使用USE 数据库名称;
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
LinePhone3.2.7(android端最新版本) sip客户端
SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/
MySQL数据库笔记
INSERT INTO DEPT(DID,DNAME,LOC)VALUES(2,"UI设计部","哈尔滨");INSERT INTO DEPT(DID,DNAME,LOC)VALUES(1,"研发部","哈尔滨");UPDATE DEPT SET DNAME='研发测试部',LOC='南京' WHERE DID=1。#查询公司里面学历是本科的女员工,5代表博士, 4硕士,3本科,2本科,1高中,0初中。#数字可以加''也可以加""也可以不叫,但字符串必须加。#char 定长字符串,查询快,但浪费资源。
jre9下载 jdk9
(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】
MYSQL学习笔记三(数据库基本操作)
MYSQL帮助 MYSQL除了提供官网的帮助文档,为我们学习提供了帮助命令。如下图: 可以通过help命令查询更多的操作命令。例如如下的数据库创建。 创建数据库 关于数据库的创建,在上一笔记中已经做了可视化的说明。可视化的创建比较简单,这里主要来说明如何使用T-SQL命令创建数据库。创建数据库的语法可以使用help命令来进行查看,如下: CREATE{DATABASE|SCHEMA}[IF N...
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
MySQL数据库笔记-Day1-DB和DBMS简介&SQL简介&DDL
数据库,简单来说,就是数据的仓库,被称为DataBase(简称DB),指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合 与普通的“数据仓库”不同的是,数据库依据“数据结构”来组织数据,因为“数据结构”,所以我们看到的数据是比较“条理化”的数据库的本质:存储,维护和管理数据的集合简单理解:用于存储数据的地方,可视为存储数据的容器【面试题】数据库的特点及作用a.有极高的查询效率b.实现数据的共享,减少数据的冗余c.数据之间具有较高的独立性。
php mysql mysql_select_db,php mysql实现mysql_select_db选择数据库 – PHP笔记 – CFEI.NET
保持永远的学习心态,我们才能成长,今天我们继续来讲PHP方面的知识。mysql_select_db函数有两个参数:[php]mysql_select_db(database,connection)[/php]如果成功,则该函数返回 true。如果失败,则返回 false。参数描述database必需。需要选择的数据库。connection可选。MySQL 连接。如果没有设置该参数,则表明使用上一个...
MYSQL笔记七 数据库相关常用命令
=====不加定界符会报error。rename database ------原来的版本中有,现在已弃用。
很好的mysql,c++,db,java,hadoop等笔记收集
很好的mysql,c++,db,java,hadoop等笔记收集 http://www.cnblogs.com/ggjucheng/archive/2012/11/02/2751119.html
MySQL学习笔记01【数据库概念、MySQL安装与使用】
MySQL数据库软件 MySQL数据库的安装 MySQL数据库的卸载 MySQL服务(启动与关闭) 登录 本地/异地 MySQL MySQL安装目录 MySQL数据目录
《SQL高级应用和数据仓库基础(MySQL版)》学习笔记 ·001【数据库基本概念、MySQL安装与介绍】
文章目录一、数据库基本概念1、DB与DBMS2、数据库系统的构成3、数据管理发展过程4、数据库5、关系型数据库二、MySQL安装与卸载三、与MySQL相关的常用命令四、MySQL相关概念1、 一、数据库基本概念 1、DB与DBMS 概念 解释 数据库(DB) 按照某些数据结构、专门存储和维护信息的容器 数据库管理系统(DBMS) 管理数据库的软件 数据字典 记录数据库中存放...
超级无敌详细的Mysql数据库笔记(基础篇版)
1.概述:多表查询会产生笛卡尔乘积,即两个集合A集合 和 B集合的所有组合情况。在多表查询时,需要消除无效的笛卡尔积2.分类连接查询内连接: 相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名子连接事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
MySQL数据库学习笔记(一)
本文讲解了数据库基础概念、SQL语法分类与使用,以及表结构定义与常用数据类型
【学习笔记分享】MySQL数据库基础篇(上)话说你也在学MySQL?
【学习笔记分享】MySQL数据库基础篇(上)话说你也在学MySQL?
MySQL数据库基础笔记
MySQL数据库基础笔记摘要: 数据库概念:包括数据库(DB)、数据库管理系统(DBMS)及其分类(关系型RDBMS如MySQL、非关系型NoSQL) MySQL简介:流行的开源关系型数据库,适合中小型应用 安装配置:详细说明下载、安装、环境变量配置及验证流程 SQL语言:DDL(定义)、DML(操作)、DQL(查询)、DCL(控制)四大组成部分及常用命令 数据类型与约束:字符、数值、日期等数据类型及主键、外键等约束条件 数据定义操作:CREATE/ALTER/DROP语句的语法和使用示例 (149字)
2万+



被折叠的 条评论
为什么被折叠?



