mysql 的基础学习

目录

1、数据库增加

2、数据库的删除

3、数据库的更改

4、数据库查询

5、多表联查

6、Case ...  when ...then ... else....end

7、模糊查询

8、排序(order by)

9、子查询:

10、分组查询

11、聚合函数:

12、分页查询(limit)

13、JOIN

14、索引

15、截取字符串

16、时间的使用时间差

 17、清空表的语句


学习目标:

     DDL:建库,建表,修改表(能看懂,能修改)

     SQL:增、删、查、改(熟练运用)

     index:索引 (深度理解)

     存储过程、触发器、视图(了解)

1、数据库增加

1、数据库增
1、命名规则:不能用中文;用数组库子系统的简写+表的含义;
2、在数据库中英语字母可以不区分大小写,但是要避开关键字;
3、字段的命名规则是表名+字段含义;
4、创建数据库:
create database +[数据库名];
2、表的增加
        创建表: create table +[表名] (
[字段名] + [字段类型]([长度]) +null/not null,
....
primary key ([主键字段名]);
3、表字段的增加:
alter  table +[表名] add column  [字段名] [数据类型](长度) null/not null;
4、表数据的增加
insert  into [表名] +([字段1],[字段2],...) values ([内容1],[内容2],...);
insert  into [表名] + ([内容1],[内容2],...);需要以字段一一对应
5、外键、主键约束、唯一约束的增加
        外键:是用来关联两个表,并约束其约束的表;命名为fk_字段名
        主键:一个表中只能有一个主键,其值是唯一的,不允许重复
1、外键:
alter table [表名] add  constralnt [约束名] foreign  key ([约束字段]) 
             references[表名] ([外表字段]);               
2、主键约束:
alter table [表名] add  primary key ([字段])
3、唯一约束:
alter table [表名] add  unique[字段名]
6、索引:
1、增加索引一:
alter  table [表名] add  index [索引名称]([字段名称]);
2、增加索引二:
creat  index [索引名] on [表名]([字段名]);
3、组合索引:
creat index [索引名称] on [表名]([字段1,字段2,。。])

2、数据库的删除

1、删除表:
drop table +[表名];
2、删除字段
        delete  from [表名] where [主键id];//一定哟写条件,删除是不可逆的	
3、删除外键
        alter table [表名]  drop  foreign  key [外键名];
4、删除唯一约束
 alter table [表名]  drop  unique[字段名] ;
5、删除索引 : 
1、删除1:
drop index [索引名] no [表名];
2、删除2:
alter table [表名] drop index [索引名]

3、数据库的更改

1、更改表内数据:
       update [表名] set [修改字段1]=’[内容]’,[修改字段内容2]... where [主键名]=[主键]
2、修改表中字段名:
       Alter  table [修改的名称] change column [原来字段] [修改后字段][字段类型]([字段的长度]) null/not null
3、修改唯一性约束
       Alter table [表名] modify [字段名] [字段类型] ([字符长度]) unique;
4、修改修改编码格式
       Alter table [表名] modify / change[colum] [数据类型] primary key;

4、数据库查询

  Select distinct [显示字段1...] from [表名] [别名] where [条件] group by [分组字段] having [过滤条件] order by [排序字段]



 from       -- 查询
where      -- 限制条件
group by   -- 分组
没有包含在聚合函数中的,一定要包含在group by中
having     -- 过滤条件
order by   -- 排序
limit      -- 展示条数
distinct   -- 去重
select     -- 查询的结果[asc/desc] limit [展示条件]

正则:select * from emp where name regexp '^j.*(n|y)$';
集合查询:max 、min 、avg 、sum 、count 、group_concat 。
Inner  join:   内连接   如果表中至少有一个匹配,则返回行;
Left  join:   左连接   即使右表中没有匹配,也从左表中返回所有行
Right  join: 右连接   即使左表中没有匹配,也从右表中返回所有行
Full  join:   全连接  只要有一个表中存在匹配,则返回行
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Union All:对两个结果集进行并集操作,包括重复行,不进行排序;

并集

并集:
Union可以对两个或多个结果集进行连接,形成“并集”。
限制条件:
2.1)子结果集要具有相同的结构。
2.2)字结果集的列数必须相同。
2.3)子结果集对应的数据类型必须可以兼容。
2.4)每个子结果集不能包含order by和compute子句



1、并集 union  --
1)去掉重复项的并集--select Name from Person1 union select Name from Person2
2)不去掉重复项的并集--select Name from Person1 union all select Name from Person2

差集:

Except可以对两个或多个结果集进行连接,形成“差集”。返回左边结果集中已有的记录,而右边结果集中没有的记录。
限制条件:
2.1)子结果集要具有相同的结构。
2.2)子结果集的列数必须相同
2.3)子结果集对应的数据类型必须可以兼容。
2.4)每个子结果集不能包含order by 和 compute子句。


--Except 差集---select Name from Person1 except select Name from Person2

交集:

interSect可以对两个或多个结果集进行连接,形成“交集”。返回左边结果集右边结果集中没有记录。
限制条件:
2.1)子结果集要具有相同的结构。
2.2)子结果集的列数必须相同
2.3)子结果集对应的数据类型必须可以兼容。
2.4)每个子结果集不能包含order by 和 compute子句

--InterSect 交集--select * from Person1 InterSect select * from Person2

5、多表联查

语法

Select [显示字段] from [表名1] [别名1] inner join [表名2] [别名2]  on [别名1].[字段1]= [别名2].[字段2]

注意:

  1. 在多表联查中可以有多个表:用inner join 链接,最后条件用 on 链接如果有多个条件就用关系条件链接;
  2. 别名:别名前可以加 as,也可以不加;
  3. 显示字段:要注意显示字段所在的表中,用 [别名].[字段名];

6、Case ...  when ...then ... else....end

语法

1、语法1为:只能判断几个固定值
select [显示字段1],([case [查询字段] when [判断条件] then [条件成立显示在表内示]else [ 不成立显示] end]) from [表名];
2、语法2:可以判断区间
select [显示字段1],([case when [字段]<[条件]then [条件成立显示] when [字段]>[判断条件] else [不成立显示条件] end]) from [表名]

7、模糊查询

1、语法:
select * from [表名] where [查询字段] like “[查询内容]%”
2、常见类型:
%在前:表示查询的内容在最后的内容;
%在后:查询内容在前的模糊查询;
%在两边%:查询该字段中的所有内容并匹配;
在条件判断查询中模糊查询一般放在最后,因为模糊查询效率极低;

8、排序(order by)

1、语法1:
select * from [表名] where order by [排序字段] 
2、语法2:多个条件排序
Select * from [表名] where order dy [排序字段1] asc,[排序字段2]desc
3、asc为升序(默认的 可不写);desc 为降序

9、子查询:

1、语法1:
           Select * from [表名] where [查询字段1] =([select [查询字段] from [表名] where [条件] ]) 
2、语法2:
           Select * from [表名] where [查询字段1] in ([select [查询字段] from [表名] where [条件] ]) 
3、注意;
1)在判断条件时用等号链接的要求子表中只能有一条记录;
2)在判断条件时用 in  链接是子表查询结果为0-n条,但是只能查询一个字段;
3)子表可以放在:from 后做子查询;
4、子查询
1)语法:select * from ([子查询]) [别名] where [条件] 
2)注意:子查询要注意一定要有别名;
3)查询的条件必须在子表中展示出来;
4)子查询可以放在查询结果处,也可以放在from 后或者条件语句处

10、分组查询

1、语法:
Select distinct [显示字段1...] from [表名] [别名] where [条件] group by [分组字段] having [过滤条件] order by [排序字段] [asc/desc] limit [展示条件];
2、在使用聚合函数时必须要有group by ;

11、聚合函数

 SUM();求和
 AVG();求平均数
 COUNT(*);求数量
 MAX();最大值
 MIN();最小值
 Having;筛选分组后的各组数据。

12、分页查询(limit)

1、用法1:
select * from [表名] where [字段名] limit(取出从第几行开始从0开始,到第几行)
2、用法2:
           Select * from [表名] limit P1,P2;
   P1:从多少行查询开始,一般从0开始
   P2:查询多少行
   分页查询不是SQL标准

13、JOIN

Inner  join:   内连接   如果表中至少有一个匹配,则返回行;
Left  join:   左连接   即使右表中没有匹配,也从左表中返回所有行
Right  join: 右连接   即使左表中没有匹配,也从右表中返回所有行
Full  join:   全连接  只要有一个表中存在匹配,则返回行

14、索引

语法:alter table 表名 add  index 索引名(字段)
单列索引;一个缩影包含单个列,一个表中可以有多个单列索引
普通索引;没有什么限制,允许定义索引的列中插入重复值和空值;
唯一索引;索引列中的值是惟一的,允许为空值;
主键索引;是一种特使的唯一索引;不允许为空值;
组合索引:
全文索引;可以用于全文搜索
聚集索引和非聚集索引:
聚集索引:InnoDB引擎按照主键进行聚集,如果没有定义主键,innoDB会试着使用唯一的非空索引来代替;
非聚集索引;

15、截取字符串

-- 截取字符串
select substring_index(需要截取的字段, '/', -1)from 表名; 
select substring('sqlstudy.com', -4); 

16、时间的使用时间差

SELECT  DATEDIFF(结束日期,开始日期) from house_base_info  返回天数

 17、清空表的语句

-- 只能清空无外键内容
TRUNCATE   TABLE 【表名】;
-- =============================清空数据表并关闭外键------------------
-- 禁用外键约束
SET FOREIGN_KEY_CHECKS=0;
-- 清空表格
truncate table fiel_batch;
truncate table fiel_upload;

-- 启动外键约束
SET FOREIGN_KEY_CHECKS=1;

18、查询数据库名

show databases;

19、查询数据库表名

-- 展示 数据库内容的 表名
show tables;

-- 展示 user表
select table_name from information_schema.tables where table_name LIKE "%user%";

20、导出sql文件

mysqldump -u<用户名> -p<密码> <数据库名> > <备份文件路径>

mysqldump -u username -p database_name > backup.sql

其中-u 表示的是用户名,-p 表示要备份的数据库 -P 表示在指定端口33306下导出(默认3306)

mysqldump -h 127.0.0.1 -u admin -p33306 database_name -P 33306> d:\datacenter456.sql

# 根据表进行导出单张数据包 从database_name 库导出表 my_tables_name1  my_tables_name2 
mysqldump -h127.0.0.1 -uroot -p123456 --databases database_name --tables my_tables_name1 my_tables_name2 > data/20240110.sql

 导入sql文件

source D:/backup.sql;

21、获取数据库表中的字段名、是否允许为空、注释

SELECT column_name, data_type, is_nullable, column_comment FROM information_schema.columns WHERE table_name='table_name';


SELECT column_name, data_type, is_nullable, column_default, extra FROM information_schema.columns WHERE table_name='table_name';

22、修改Mysql引擎

default-storage-engine=<存储引擎名>


MyISAM:追求速度,可以选择这个存储引擎。

InnoDB:最大的特点在于支持事务。但是这是以损失效率来换取的。

Memory:数据是存放在内存中,一旦服务器出现故障,数据都会丢失;




MyISAM:这种引擎是mysql最早提供的。这种引擎又可以分为静态MyISAM、动态MyISAM 和压缩MyISAM三种,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能。

MyISAM Merge引擎:这种类型是MyISAM类型的一种变种。合并表是将几个相同的MyISAM表合并为一个虚表。常应用于日志和数据仓库。

InnoDB:InnoDB表类型可以看作是对MyISAM的进一步更新产品,它提供了事务、行级锁机制和外键约束的功能,也是目前MySQL默认的存储引擎。

Memory(heap):这种类型的数据表只存在于内存中。它使用散列索引,所以数据的存取速度非常快。因为是存在于内存中,所以这种类型常应用于临时表中。

archive:这种类型只支持select 和 insert语句,而且不支持索引。常应用于日志记录和聚合分析方面。

数据库基操

链接数据:
    mysql -u用户名 -p密码

显示所有数据库:
    SHOW DATABASES;
显示指定数据库:
    SHOW DATABASES LIKE '数据库名';

显示所有数据库中的表:
    SHOW TABLES FROM 数据库名;

显示指定数据库中的表:
    SHOW TABLES IN 数据库名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值