广州39期-吴俊豪 发表于 2022-3-5 20:21:08

Mysql



mysql -uroot -p 密码登陆mysql
mysqladmin -uroot password "***"设置登陆密码 (在liunx执行)
service mysqld start启动mysqld服务
service mysqld restart重启mysqld的服务
service mysqld stop   结束mysqld的服务
service mysqld status 查看mysqld的运行状态
退出三种方式:quit、exit、Ctrl+c

SQL语句---只能在mysql等数据库操作系统中执行的
每一条SQL语句都是以英文的‘;’冒号结尾的

create database +库名 创建**数据库
show databases查看所有的数据库
use +库名       进入对应的库中进行操作
show tables   查看对应库中所有的表(先进入库再查看表)
desc +表名      查看对应表的结构
select database(); 查看当前操作哪个库(在哪个数据库)

表的字段====属性
Field:代表字段的名称
Type:表示存储的数据类型
int :数字类型:只能存储数字的数据
int存储值的上线--->2147483647 复数也是到-2147483647
bigint:数字类型:存储的数字范围比int要长,int加长版
varchar;可变长字符串,占0~2^16个字节,性能稍微差,但是节省资源
char:定长字符串,固定占255个字节,性能会更好些,但是不节省资源
folat:数字存储的数据类型,他是能够存储小数(20,2)20是我存储的字节大小2是默认保留的小数
date :时间类型 固定格式 YYYY-MM-DD
null: 是否允许为空
key:代表主键约束--->
primary key :代表主键约束--->代表我的存储的数据是唯一的不能重复的
default: 代表默认值约束--->在我插入数据的时候,我不给添加新的值的时候,他就默认添加默认值
auto_increment:自增长约束,只能在主键字段使用,而且只能是数据类型为整型的去使用,例如不输入id时,直接跟着原来最大的id+1
not null: 非空约束---->必须要填的
primary key:主键约束
auto_increment:自增长约束
default:默认值约束

alter table 修改表结构的操作
change和modify的区别:
两者都是可以改变表结构,但是使用change时字段是要写两次的,modify则只要写一次就行。change可以对字段名进行重命名,modify则不行

删除主键
因为一张表中最多只要一个主键,使用可以直接通过drop primary key的方式进行删除
primary key的方式进行删除
1,先删自增长:alter table test modify sid int(4);
2,再删主键约束:alter table test drop primary key;

insert into 表名 values增加插入数据
0,要求表的字段不多,对表结构要熟悉
1,插入的值的数量必须要跟字段数量一致
2,值的格式必须要一一对应上字段要求的格式
字符串和日期类型的数据插入必须要加英文的成对引号
NULL和 '   ':NULL是完全的不占系统空间,''是占系统一个字节0的空间

drop table + 表名   删除表名
drop database +库名 删除库名

select   查,查询-------- 条件查询先接where
select *from xx表   查询所有字段(*)的值来自于 xx表   
不等于 !=   <>   (null是不参与等于或者不等于,大小匹配的)
多条件查询
1, and条件:要求两边同时满足
2, or条件: 以or为分界,两边只要满足一个
<> ;大于小于的匹配
between。。and。。:介于,是包含着等于的闭区间
in与not in(与or有点类似)

mysql中的模糊匹配符:‘%’‘_’   (跟liunx的不一样)
'%' :匹配0个或者多个字符
‘_’:匹配1个字符
模糊匹配:like '%_%'

limit 查询限定的数据-只能放在最后 (imit 只能放在SQL语句后面,否则报错)
order by排序,如果结合limit使用,那么limit也是放在后面
asc是升序,desc是降序

group by分组
注意:
1,分组查询要查询指定的字段,对什么进行分组就查询什么字段。因为分组之后,只有分组字段可以正常匹配,其他非分组字段(普通字段)是随机出现(一般是表中第一条)
2,使用group by分组之后,进行条件过滤,是不能使用where,where条件要写在group by之前
3,如果希望在group by分组之后进行条件过滤,则使用having(作用类似where,但是只能用在group by之后)
4,group by分组一般是结合 聚合函数使用,where条件是不能接聚合函数,having才可以接聚合函数

聚合函数:
count()统计
select count(*) from xx表   统计表中行数
select count(1) from xx表》 统计表中行数
select count(字段名) from xx表 统计表中对应字段有多少条数据
sum() 求和
avg() 平均值
max() 最大值
min()最小值
distinct() 去重复,保留唯一

update 。。 set 改,把。。改成什么。。
delete   删
mysql中删除数据还有一下方式
1,delete:可以根据条件删除指定数据,如果不接条件删除时,可以清空表中数据,但是重新插入数据时,自增长字段还是会在原来最大值基础上进行累积递增。(只删除表中数据,保留表结构,没有释放空间)
2,truncate:truncate +表名; ==》直接清空表中数据,不能接条件删除指定数据。保留表结构,重新插入数据时,自增长会重新从1开始(清空表中数据并释放空间,保留表结构)
3,drop table +表名; ==》删除整张表,删除数据,表定义也被删除(释放空间


备份:
备份表==直接在数据库中操作的
1,先备份表结构
create table 新表 like 旧表;
2,再备份表数据(把整张表的数据进行备份)
insert into 新表 select *from 旧表;


Navicat 一个连接数据库的图形化工具,连接mysql
Navicat连接mysql数据库服务器的步骤:
1,通过Navicat新建mysql连接(只要建立一次)
(1)填写服务器的IP地址
(2)填写在MySQL中创建有%权限的mysql用户
2,关闭Linux的防火墙(service iptables stop)--每次都要做的
3,要确保服务器中的mysqld服务已开启


表跟表的连接方式;列如现在有aa和cc两个表
1,内连接innerjoin对两个表当中有字段的值相同就可以通过内连接进行连接,并把相同的值显示出来   select * from a inner join CC on aa.id=cc.sid;

2,左连接leftjoin以左边表为主,显示完整的左边表,右边表显示满足拼接条件的值,不满足的显示null    select *from a left join CC on aa.id=cc.sid;

3,右连接right join 以右边表为主,显示完整的右边表,左边表显示匹配的值,不匹配为null.            select *from aa right join CC on aa.id=cc.sid;
4,基本连接通过where条件进行拼接,对多个表当中有字段的值是相同的就可以通过基本连接进行连接(结果和内连接是一样的,只是语法上有区别)                         select *from aa,cc, test where aa. id=cc.sid and aa. id=test.sid

5,硬连接union (机械拼接,上下拼接)拼接表的字段数目必须一-致,显示的表字段名以第一个表为准       select *from a union select *from cc;


DDL 数据库定义语言对表的定义,对表字段进行操作;
create,alter table   ,drop
DML 数据库操作语言,对表中的数据进行操作;
(insert into) (delete) (update 。。set)(select)

索引:index
为了提高查询性能都会去增加索引(一般增加在常用的字段上===热字段)

索引是对表的字段生效,但是不能对整个表所有的字段都加索引,如果整个表所有字段都加索引就丧失了索引的意义了,反而会导致系统的性能受到影响
注意:
1,创建索引的前提:表中有大量的数据(上万行),添加索引会对查询速度有明显的提升
2,不能对一个表的每个字段都添加索引,如果都添加就丧失了索引的意义,反而会消耗大量的内存或者磁盘的资源,通常只要对热字段(经常需要查询的字段)添加索引
3,索引的优先级:主键PRI>唯一UNI>普通MUL

索引的类型:3种
普通索引:index允许索引所在字段的值重复和为空的,允许表中存在多个普通索引
唯一索引:unique index允许索引所在字段的值为空,但是不允许重复,允许表中存在多个唯一索引
主键索引:primary key 索引所在字段的值既不能为空也不能重复 (当我们定义了主键约束时,其实就是定义主键索引,主键约束是主键索引的一个表征),一个表中只能有一个主键索引


视图 view
是一种虚拟表,不负责存储数据,是通过实际的基础表创建的,用来显示基础表的数据,数据是动态的生成的

为什么要使用视图view?
1,为了安全,在实际表中有些字段可能是保密的,那么就可以通过创建视图的方式,让用户操作视图从而避免对实际表的保密字段进行操作
2,为了方便操作,在数据库中有些查询语句比较复杂,就可以对这些复杂的语句加工成视图表,就可以避免复杂的查询重复编写的出错

特点:
1,视图是有实际表(基础表)创建的虚拟表
2,视图是由列(字段)和行(值)组成,它的列可以是多个表中列
3,视图的创建和修改是不影响基础表
4,基础表的修改或者删除就会影响到视图表
5,基础表和视图中的数据是互相影响的,当一个视图是有复杂的查询创建出来时,不允许修改视图的数据

缺点:
1,视图的性能差,因为视图查询时本质上是对基础表进行查询
2,视图存在修改限制,当用户想修改视图里面的数据时,本质上需要先转化成对底层基础表的某些信息进行修改,如果视图的数据来源比较复杂时不允许修改的


总结:
1,主表不存在的数据,在相关的从表无法插入与之相关的数据
2,对主表进行删除或者更新,会导致主表没有了外键值时,那么执行会报错
3,对子表进行更新或者插入数据时,如果主表没有这个外键值,那么执行会报错
4,要删除主表的信息,需要先确认从表是否存在,如果从表存在,要先删除从表对应的数据


存储过程 procedure

页: [1]
查看完整版本: Mysql