数据库
首页 > 数据库> > MySQL

MySQL

作者:互联网

SQL

作用:

通过 SQL 语句我们可以方便的操作数据库中的数据、表、数据库。 SQL 是数据库管理系统都需要
遵循的规范。不同的数据库生产厂商都支持 SQL 语句,但都有特有内容。

语句分类:

1) DDL(Data Definition Language)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:create, drop,alter 等

DDL操作数据库:

创建数据库:
创建数据库
create database 数据库名;

判断数据库是否已经存在,不存在再创建数据库
create database if not exists 数据库名;

创建数据库并指定字符集
create database 数据库名 character set 字符集;

 

查看数据库

查看所有数据库
show databases;

查看某个数据库的定义信息
show create database 数据库名;

 

修改数据库

修改数据库字符集格式
alter database 数据库名 default character set 字符集;

 

删除数据库

删除数据库
drop database 数据库名;
判断数据库是否存在并删除存在的数据库
drop database if exists 数据库名;

 

使用数据库

查看正在使用的数据库
select database(); -- database()是 mysql 函数
​
使用/切换数据库
use 数据库名;

 

DDL操作表:

创建表

创建表的格式
CREATE TABLE 表名 (
字段名 1 字段类型 1,
字段名 2 字段类型 2
);
​
关键字说明:
​CREATE -- 表示创建
​TABLE -- 表示创建一张表

快速创建一个表结构相同的表
CREATE TABLE 新表名 LIKE 旧表名;

 

(MySQL数据类型:

)

查看表

查看某个数据库中所有的表
SHOW TABLES;
查看表结构
DESC  表名;
查看创建表的SQL语句(以SQL语句返回表结构)
SHOW CREATE TABLE 表名;

 

删除表

直接删除表
drop table 表名;
判断表是否存在并删除表
drop table if exists 表名;

 

修改表结构

添加表列
alter table 表名 add 列名 类型;
修改列类型
alter table 表名 modify 列名 新类型;
修改列名
alter table 表名 change 旧列名 新列名 类型;
删除列
alter table 表名 drop 列名;
修改字符集
alter table 表名 character set 字符集;
修改表名
rename table 表名 to 新表名;

 


2) DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert, delete, update 等

添加表数据

插入全部字段
  所有的字段名都写出来
INSERT INTO 表名 (字段名 1, 字段名 2, 字段名 3…) VALUES (值 1, 值 2, 值 3);
​
  不写字段名
INSERT INTO 表名 VALUES (值 1, 值 2, 值 3…);
​
  插入部分数据
INSERT INTO 表名 (字段名 1, 字段名 2, ...) VALUES (值 1, 值 2, ...);
没有添加数据的字段会使用 NULL
​
  关键字说明
INSERT INTO 表名 – 表示往哪张表中添加数据
(字段名 1, 字段名 2, …) -- 要给哪些字段设置值
VALUES (值 1, 值 2, …); -- 设置具体的值

-- 注意
1.值与字段必须对应,个数相同,类型相同
2.值的数据大小必须在字段的长度范围内
3.除了数值类型外,其它的字段类型的值必须使用引号引起。(建议单引号)
4.如果要插入空值,可以不写字段,或者插入 null

 

删除表数据

不带条件删除数据(删除表中所有数据)
DELETE FROM 表名;
​
带条件删除数据(删除指定条件的数据)
DELETE FROM 表名 WHERE 字段名=值;
​
删除表中所有记录
TRUNCATE TABLE 表名;
​
-- truncate 和 delete 的区别:
1.delete 是将表中的数据一条一条删除
2.truncate 是将整个表摧毁,重新创建一个新的表,新的表结构和原来表结构一模一样

 


3) DQL(Data Query Language)数据查询语言
用来查询数据库中表的记录(数据)。关键字:select, where 等

DQL基础查询

查询所有列
使用*来表示所有列
select * from 表名;
写出所有字段名来查询
select 字段名1,字段名2,字段名3...from 表名;

查询指定列
列出想要查询的字段名来查询
select 字段名1,字段名2,字段名3...from 表名;

拓展:
别名查询
-- 使用关键字 -- 查询时给列、表指定别名需要使用 AS 关键字
使用别名的好处:是方便观看和处理查询到的数据
select 字段名 1 as别名, 字段名 2 as别名... from表名; 
select 字段名 1 as别名, 字段名 2 as别名... from 表名 as表别名;

清除重复值
查询指定列并且结果不出现重复数据
select distinct 字段名 from 表名;

 

DQL条件查询

语法格式:SELECT 字段名 FROM 表名 WHERE 条件;
比较运算符
--  >大于 <小于 <=小于等于 >=大于等于 =等于 <>、!=不等于
语法:
select * from 表名 where 字段名  比较运算符  比较条件;
逻辑运算符
-- and(&&) 多个条件同时满足 or(||) 多个条件其中一个满足 not(!) 不满足
语法:
select * from 表名 where 满足条件1  逻辑运算符  满足条件2;
in关键字
语法格式:select 字段名 from 表名 where 字段 in (数据 1, 数据 2...);
in 里面的每个数据都会作为一次条件,只要满足条件的就会显示
范围查询

select * from 表名 between 值1 and 值2 
表示从值 1 到值 2 范围,包头又包尾
like关键字
-- LIKE 表示模糊查询 
select * from 表名 where 字段名 like '通配符字符串'; 
​
满足通配符字符串规则的数据就会显示出来 
所谓的通配符字符串就是含有通配符的字符串 MySQL 通配符有两个: 
-- %:表示 0 个或多个字符(任意个字符) 
-- _: 表示一个字符 

DQL排序查询

通过 order by 子句,可以将查询出的结果进行排序(排序只是显示方式,不会影响数据库中数据的顺序)
​
select 字段名 from 表名 where 字段=值 order by 字段名 [ASC|DESC]; 
ASC: 升序, 默认是升序
DESC: 降序
-- ORDER BY 必须放在最后面

单列排序:
使用一个字段排序
select * from 表名 order by 字段名 [asc/desc]

组合排序
先按第一个字段进行排序,如果第一个字段相同,才按第二个字段进行排序

select * from 表名 order by 字段名1 [asc/desc],字段名2 [asc/desc]

 

DQL聚合函数

count:统计指定列记录数,记录为null的不统计
sun:计算指定列的数值和,如果不是数值类型,那么计算结果为0
max:计算指定列的最大值
min:计算指定列的最小值
avg:计算指定列的平均值,如果不是数据类型,那么计算结果为0
使用:
写在 SQL 语句 select后
select  聚合函数  from 表名; 

DQL分组查询

语法:
select 字段列表 from 表名 [where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义

where 和 having 区别:
1.执行时机不一样:where是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
2.可判断的条件不一样:where不能对聚合函数进行判断,having可以。
(执行顺序:where > 聚合函数 > having)

 

DQL分页查询

语法:
select 字段列表 from 表名 limit 起始索引  ,  查询条目数;
起始索引:从0开始
计算公式:起始索引 = (当前页码 - 1)* 每页显示的条数

 

4) DCL(Data Control Language)数据控制语言(了解)
用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANT, REVOKE 等

 

约束

概念:

1.约束是作用于表列上的规则,用于限制加入表的数据

2.约束的存在保证了数据库中数据的正确性,有效性和完整性

分类:

 

 

 非空约束

概念:非空约束用于保证列中所有数据不能有NULL值
语法:
1.添加约束:
-- 创建表时添加非空约束
CREATE TABLE 表名(
     列名  数据类型  NOT NULL,
     ....
);
-- 建完表后添加非空约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL;

2.删除约束:
ALTER TABLE 表名 MODIFY 字段名 数据类型;

 

唯一约束

概念:唯一约束用于保证列中所有数据各不相同
语法:
1.添加约束
-- 创建表时添加唯一约束
CREATE TABLE 表名(
    列名 数据类型 UNIQUE [AUTO_INCREMENT],
    -- AUTO_INCREMENT:当不指定值时自动增长
    ...
);
CREATE TABLE 表名(
    列名 数据类型 ,
    ...
    [CONSTRAINT][约束名称] UNIQUE(列名)
);
-- 建完表后添加唯一约束
ALTER TABLE 表名 MODIFY 字段名 数据类型 UNIQUE;

2.删除约束
ALTER TABLE 表名 DROP INDEX 字段名;

 

主键约束

概念:
1.主键是一行数据的唯一标识,要求非空且唯一
2.一张表只能有一个主键
语法:
1.添加约束
-- 创建表时添加主键约束
CREATE TABLE 表名(
    列名 数据类型 PRIMARY KEY [AUTO_INCREMENT],
    ...
);

CREATE TABLE 表名(
    列名 数据类型,
    [CONSTRAINT] [约束名称] PRIMARY KEY(列名)
);

-- 建完表后添加主键约束
ALTER TABLE 表名 ADD PRIMARY KEY(字段名);
2.删除约束
ALTER TABLE 表名 DROP PRIMARY KEY;

 

检查约束

默认约束

概念:保存数据时,未指定值采用默认值
语法:
1.添加约束
--创建表时添加默认约束
CREATE TABLE 表名(
    列名 数据类型 DEFAULT 默认值,
    ...
);
--建完表后添加默认约束
ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;
2.删除约束
ALTER TABLE 表名 ALTER 列名 DROP DEFAULT;

 

外键约束

概念:外键用来让两个表的数据之间建立连接,保证数据的一致性和完整性
语法:
1.添加约束
-- 创建表时添加外键约束
CREATE TABLE 表名(
    列名 数据类型
    ...
[CONSTRAINT][外键名称] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名) );
--建完表后添加默认约束
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERNCES 主表名称(主表列名称);
2.删除约束
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

数据库设计 

参考CSDN网页:
https://blog.csdn.net/qq_42192693/article/details/109720940?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165768185416782388018189%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=165768185416782388018189&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109720940-null-null.142^v32^pc_rank_34,185^v2^control&utm_term=%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%BE%E8%AE%A1&spm=1018.2226.3001.4187

 多表查询

笛卡尔积:取A,B集合所有组合情况

多表查询:从多张表查询数据

       连接查询

               内连接:相当于查询A B交集数据

-- 隐式内连接
select 字段列表 from 表1,表2...where 条件;

-- 显示内连接
select 字段列表 from 表1 [inner] join 表2 on 条件;

 

               外连接:

                      左外连接:相当于查询A表所有数据和交集部分数据

                      右外连接:相当于查询B表所有数据和交集部分数据

-- 左外链接
select 字段列表 from 表1 left [outer] join 表2 on 条件;
-- 右外连接
select 字段列表 from 表1 right [outer] join 表2 on 条件;

 

        子查询

               概念:查询中嵌套查询,称嵌套查询为子查询

               分类:

1.单行单列:作为条件值,使用= != > < 等进行判断
select 字段列表 from 表 where 字段名 = (子查询); 2.多行单列:作为条件值,使用in等关键字进行条件判断
select 字段列表 from 表 where 字段名 in (子查询); 3.多行多列:作为虚拟表
select 字段列表 from (子查询) where 条件;

事务

简介:
1.数据库的事务(Transaction)是一种机制、一个操作序列、包含了一组数据库操作命令

2.事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么同时成功,要么同时失败

3.事务是一个不可分割的工作逻辑单元.

-- 开启事务
start transaction; 或者 begin;

-- 提交事务
commit;

-- 回滚事务
rollback;

 

事务四大特征

1.原子性(Atomicity):事务是不可分割的最小操作单位,要么同时成功,要么同时失败

2.一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态

3.隔离性(lsolation):多个事务之间,操作的可见性

4.持久性(Durability):事务一旦回滚,它对数据库中的数据的改变就是永久的 

 

标签:--,数据库,MySQL,查询,字段名,表名,select
来源: https://www.cnblogs.com/y2220237317/p/16470503.html