Mysql基础知识

MySQL相关命令

登录mysql客户端命令:  mysql –u root –p 123 –h localhost

     -u:  root是用户名

     -p: 密码

     -h  服务器主机名,可以省略

退出客户端:  quit或者 exit

 

mysql常见概念:

数据库服务器: 安装MySQL软件的机器

数据库: 数据库表的集合,数据库服务器可以创建多个数据库

表: 类似于excel表格,用于存储数据

表记录: 表中的一行数据

 

SQL语句

sql(Structured Query Language): 指结构化查询语言

     SQL是操作关系型数据库的通用语言

     SQL是非过程性语言

     SQL是一个标准,各大数据库厂商根据该标准提供了实现

SQL基本类型

类型

含义

char(n)

存放固定长度的字符串,用户指定长度为n

varchar

可变长度字符串,用户指定最大长度n,char的改进版

int

整数类型

smallint

小整数类型

numeric(p,d)

定点数,精度由用户指定(p是小数点左侧,d是小数点右侧)

read,double,precision

浮点数和双精度浮点数

float(n)

精度至少n位浮点数

SQL日期类型

类型

格式

用途

DATE

YYYY-MM-DD

日期值

TIME

HH:MM:SS

时间值或者持续时间

YEAR

YYYY

年份值

DATETIME

YYYY-MM-DD HH:MM:SS

混合日期

TIMESTAMP

YYYYMMDDHHMMSS

混合日期/时间戳

特殊关键字

类型

含义

实例

primary

主键,后面括号中是作为主键的属性

primary key(student_id)

foreign key reference

外键 reference后为外键的表

foreign key(course_id) references Course

not null

不为空,前面属性的定义

name varchar(10) not null

SQL插入删除修改语句(增,删,改)

类型

含义

create table

创建一张表

insert into ….  values

向表中插入一条信息

delete from

从表中删除一条信息

update…set…where

将满足where条件的数据更新内容为set的值

drop table

删除表

alter table….add

向表中添加某个属性

alter table…..drop

将表中的某个属性删除

语句示例

create table

创建表student,表中有四个属性,ID,name,age,class主键为ID

insert into…values

向表中添加一行信息,age允许为空,所以可以不添加

delete from

删除name=tom的一行数据

update…set….where

将所有name=tom的信息中age设置为18

drop table

删除student表

alter table….add

向表中添加列sex,

alter table…drop

从表中将class类删除

 

SQL查询语句

单关系查询关键字

类型

含义

select

表示要查处的表含有的属性

from

表示要操作的表

where

判断条件,根据该判断条件选择信息

distinct

在select加入关键字distinct表示结果去重

all

在select加入关键字all表示不去重(默认)

and

在where中使用and表示将判断条件连接起来

or

在where中使用or表示判断条件多选一

not

在where使用not 表示条件取反

示例

表示将age=18并且class=”A”的学生的名字,并且将结果去重

 

多关系查询(多表查询)

类型

含义

A,B

在from后面通过逗号连接多张表,并将这些表进行笛卡尔积运算

natural join

将natural join关键字前后的两张表进行自然连接运算

A join B using(c)

将A和B通过C属性自然连接

示例

将student表和math表自然连接,所得到的的结果查询出不是B班的男生的成绩

附加运算查询

类型

含义

as

将as前的关系起一个别名,可以用别名来代指这个表

*

select 中通过表明.*表示查找这个表中的所有属性

order by

让查询结果中的信息按照给定的属性排序

desc

在order by之后的属性后使用,采用降序排序

asc

在order by之后的属性后使用,采用降序排序

between

在where中使用between表示一个数在连个数之间的取值

not between

between的反义词,在两个数之外取值

union/union all

将两个sql语句做并运算,并自动去重,添加all表示不去重

intersect/intersect all

将两个SQL语句做交运算,并自动去重,添加all表示不去重

except/except all

将两个sql做差运算,并自动去重,添加all表示不去重

is null

在where中使用is null表示这个值是空值

is not null

在where中使用is not null 表示这个值不是空值

limit(page,rows)

分页查询,page=第几页,rows=每页数据量

like

模糊查询, % : 匹配0个或者多个字符

_ : 匹配一个字符

示例:

将student和math表中id相同的字段做笛卡尔积,并且取出结果中属于student部分作为结果

将student和math表做自然连接.找出class=”A”并且sex=”women”的人的名字并且把结果按照score字段降序排列

在math表中找出score字段值在60-90之间的name,并且让按照score升序排列

将上面两个查询结果做并集,而且去重

在sql表中记录的年龄未填写的所有人的姓名查出来

 

 

聚合函数

类型

含义

avg

平均值

min

最小值

max

最大值

sum

总和

count

计数

distinct

将distinct后的属性去重

group by

将group by上取值相同的信息分在同一组

having

对group by 产生的分组进行筛选,可以使用聚集函数

在Student与Math表自然连接的结果中按照班级分组,并且去除那些班级的平均成绩没到60的班级,剩下的班级和该班成绩的平均数(该班成绩的平均数这个属性被重命名为avg_score)作为一张新表被输出出来。

where和having的区别:

where和having都可以进行数据过滤,但是where语句是在对数据分组之前进行过滤,不能使用聚合函数和列别名.having子句是对分组之后的数据进行过滤,可以使用聚合函数和别名.where子句一般可以用having替换,但是使用having的地方不能使用where替换

字段的约束

主键约束

primary

保证所约束的列的值唯一且不能为空

唯一约束

unique

保证所约束的列的值唯一且不能重复

非空约束

not null

保证所约束的列的值不能为空

外键约束

foreign key

用来通知数据库两张表字段之间的对应关系,确保数据库完整性和一致性和

添加主键约束

alter table tabName add primary key(colName)

设置主键自动增长:

colName datatype primary key auto_increment

添加外键约束(建表时)

foreign key(colName) references tab(colName)

 

数据库的备份与恢复

备份数据库,在cmd窗口中

备份命令: mysqldump –u用户名 –p 数据库名 > 数据文件位置

例如: mysqldump –uroot –p mydb1 > e:/1.sql

恢复数据到数据库:

方式一: 在cmd中

     命令: mysql –u用户名 –p 数据库名 < 数据文件位置

     例如: mysql –uroot –p mydb2 < e:/1.sql

方式二: 在mysql客户端中

     命令: SOURCE 数据文件位置

     例如: source e:/1.sql

 

多表设计:

  1. 一对一

在任意一方添加列保存另一方的主键作为外键,来保存两张表之间的关系

  1. 一对多

在多个一方添加列保存一的一方的主键作为外键,保存两张表之间的关系

  1. 多对多

在第一张第三方表中分别保存两张表的主键作为外键来保存两张表之间的关系,可以把多对多的关系拆分成两个一对多的关系来理解

 

笛卡尔积查询

     两张表相乘得出的结果,如果左边表有m条记录,右边有n条记录,则查询的结果就是m*n条数据,这些查询结果中包含了大量错误的结果,通常不会使用这种查询

 

内连接查询:

     查询出左边表(dept)有且右边表中也有 的记录

     select * from inner join dept on dept.id=dept_id

左外连接查询:

     在内连接的基础上,加上右边表有而左边表没有的数据

     select * from dept right join emp on dept.id=dept_id

右外连接查询: 在内连接查询基础上,加上左边表有而右边表没有的数据

     select * from dept left join emp on dept.id=dept_id

全外连接查询: 在内连接的基础上,加上左边表有而右边表没有的记录和右边表没有而左边表有的记录

     select * from dept full join emp on dept.id=dept_id

使用union模拟全外连接查询

     select * from dept right join emp on dept.id=dept_id

     union

     select * from dept left join emp on dept.id=dept_id

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值