请选择 进入手机版 | 继续访问电脑版

MySQL介绍,SQL入门及表结构分析

[复制链接]
滚雪球少年 发表于 2021-1-2 12:13:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
MySQL是什么:

先简单表明一下数据库是什么,数据库就是数据的堆栈,也是一种文件系统,需要使用SQL来举行利用。
MySQL则是关系型数据库(库中的数据存在实体与实体的关系)。
常见的数据库(Java开辟中,MySQL和Oracle最为常见):
Oracle:大型的数据库,收费的。
MySQL:小型的数据库,免费开源的。被Oracle收购了(6.x版本后开始收费)。
SQLServer:微软的数据库。
DB2:IBM公司产物,大型的数据库,收费的。
MySQL结构图:


用文字形貌:一个数据库的服务器(如MySQL)中包罗多个数据库,一个数据库中有多张表,一个表中包罗多个字段(字段和JavaBean的属性对应),表中存放多行数据,一行数据和一个JavaBean实体对象对应。
用Dos窗口利用MySQL相关下令:

mysql install(安装服务)
mysqld --initialize(初始化利用,生成data目次)
net start mysql(启动服务)
mysql -u root -p(登录)
show databases;(检察所有数据库)
use 数据库名称;(使用数据库)
show create database 数据库名称;(查询数据库的创建的信息)
select database(); (查询当前正在使用的数据库 )
MySQL常用数据范例:

字符串型:VACHAR(长度可变)、CHAR)(长度不可变,剩余字符用空格补齐)
数值型:TINYINT 、SMALLINT、INT、BIGINT、FLOAT、DOUBLE
日期型:DATE(包罗年代日)、TIME(包罗时分秒)、DATATIME(包罗年代日时分秒,插入数据时如果为空,字段值则为空)、TIMESTAMP(包罗年代日时分秒,插入数据时如果为空,获取当前系统日期,存入字段值)
SQL概述及分类:

SQL(Structured Query Language)意为结构化查询语言,是非过程性的语言(一条语句,就对应一个返回效果),用于利用数据库的通用语言。
DDL(Data Definition Language)数据界说语言:creat(创建)、alter(修改)、drop(删除),主要应用在库和表上。
DML(Data Manipulation Language)数据利用语言:insert(插入)、update(修改)、delete(删除),主要应用在数据上。
DQL(Data QueryLanguage)数据查询语言:select(查询),主要应用在数据上。
DCL(Data Control Language)数据控制语言:crant、revoke,主要应用在数据访问权的控制。(用的相当少了)
SQL根本语法:

有关数据库的创建、修改、删除:
  1. 创建:creat database 数据库名称;修改:alter database 数据库名称;删除:drop databse 数据库名称;
复制代码
有关表的创建、修改、删除:
1、表名称后跟的括号,要以分号竣事。
2、字段要以逗号竣事,最后一个字段不能加逗号。
3、约束可以不写。
4、范例如果为字符数据,必须指定长度。
  1. 创建:creat table 表名称(                字段名1 范例(长度) 约束,                字段名2 范例(长度) 约束,                字段名3 范例(长度) 约束);修改:alter table 表名 add 新列名称 范例(长度) 约束;(添加列)alter table 表名 drop 列名称;(删除列)alter table 表名 modify 列名称 范例(长度) 约束;(修改列的范例或约束)alter table 表名 change 旧名称 新列名 范例(长度) 约束;(修改列的名称)rename table 表名 to 新表名称;(修改表的名称)删除:drop table 表名称;
复制代码
有关数据的插入、修改、删除和查询(重点):
  1. 插入:insert into 表名称 values(值1,值2,值3);(为所有字段插入值)insert into 表名称 (字段1,字段2) values(值1, 值2);(为指定字段插入对应值)修改:update 表名称 set 字段1=值1,字段2=值2,... where 条件;(修改条件为...的指定字段,没有where条件则修改字段全部数据)删除:delete from 表名称 where 条件;(删除指定条件的数据,没有where则删除表中所有数据)truncate 表名称;(也可以删除全部数据,但方式是先把表删除,然后创建一种表结构相同的空表,不支持事务利用)查询(重点):select * from 表名称;(最根本select语句,查询所有列全部数据)select 字段1,字段2 from 表名称;(查询指定字段的数据)select distinct 字段 from 表名称;(查询并去重指定字段数据,必须加字段,用*表现不起作用)select * from 表名称 where 条件;此中条件可以是运算符:大于>、小于=、小于便是= 16 and age < 19;select * from 表名称 order by 列名 升序asc/降序desc;(对查询的效果举行排序,默认为升序,总是放在select语句最后)select count(字段) from 表名称;(聚集函数-计数)select sum(字段) from 表名称;(聚集函数-求和)select max(字段) from 表名称;(聚集函数-求最大值)select min(字段) from 表名称;(聚集函数-求最小值)select avg(字段) from 表名称;(聚集函数-求均匀值)select 字段, 聚集函数 from 表名称 group by 字段 having 过滤条件;(根据字段举行分组,分组一般和聚集函数一起使用,求每组某个字段的总和,having和where均可实现过滤,但在having可以使用聚集函数,where不能使用聚集函数,也不能作用在group后)select语句固定顺序:select ... from ... where ... group by ... having ... order by ...例子(为了好明确,在各个字段后加上别名):select product 商品名, sum(price) 代价总和 from orders where price > 800 GROUP BY product having 代价总和 > 200 ORDER BY 代价总和 desc;这句SQL的寄义:从orders表中,查询商品名和代价总和(聚集函数sum盘算出来的),且prive必须大于800,按商品名分组后,过滤出代价总价大于200的数据,并按代价总和降序排序
复制代码
数据库表结构设计三种方式:

一对一表结构

一对多表结构

多对多表结构

创建单表时的约束:

primary key(声明字段为主键,唯一、非空、被引用)
auto_increment(声明字段自增长)
unique (声明字段唯一)
not null(声明字段不为空)
创建一对多表结构时,多表的约束:

多表约束实在就是外键约束,为了数据完整性而存在。
上面所说的部分表和员工表,在一对多表结构中,如果不加外键,我们可以删除两个部分的数据,此时部分数据已经不存在了,但是员工表中照旧存在部分的外键,显然这是不公道的。
加上外键就可以制止这种情况发生。
  1. creat table order(        oid int primary key auto_increment,        oname varchar(50),        oprice doubble,        uid int,        foreign key order(uid) references user(uid)         这行表现声明uid为外键并执行user用户主键        );
复制代码
笛卡尔积

当团结查询两张表时,两张表有关联,并通过外键关联,会出现笛卡尔积,如下:

我们抱负的情况,应该是查出6条数据才对,但却查出了24条(相当于两张表相乘了),想要管理笛卡尔积,可以接纳内毗连或外毗连方式举行管理:
  1. 平常内毗连(参照上图两表):select * from dept inner(可省略) join emp on dept.did = emp.dno;隐式内毗连:select * from dept d,emp e where d.did = e.dno;左外毗连:select * from dept left outer(可省略) join emp on dept.did = emp.dno;右外毗连:select * from dept right join emp on dept.did = emp.dno;注意:哪个表先写在from后,默认先展示哪个表的字段。上面四种毗连,在没有多余数据的情况下(都有对应的主外键关联),查询出的是数据完全相同。当存在多余数据时:内毗连默认不查询,只查询出有两表中有关联的数据;左毗连先把左表所有的数据全部都查询出来,再把两个表中有关联的数据查询出,再将无关联的查询出来;右毗连先把右表所有的数据全部都查询出来,再把两个表中有关联的数据查询出,再将无关联的查询出来;
复制代码
来源:https://blog.csdn.net/qq_42839595/article/details/111941380
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )