首页 > 数据库 >学的时候不小心差点把数据库填满了~

学的时候不小心差点把数据库填满了~

时间:2024-08-19 19:54:06浏览次数:13  
标签:填满 索引 数据库 查询 差点 字段 表名 eg SELECT

一.SQL-DDL(数据定义语言)

1.数据库操作

1.查询

SHOW DATABASES;
SELECT DATABASE();

创建

CREATE DATABASE[IF NOT EXISTS] 数据库名 [DEFAULT CHARSET字符集] [COLLATE排序规则];
eg:
CREATE DATEBASE[IF NOT EXISTS] IT DEFAULT CHARSET UTF8MB4; 

删除

DROP[IF EXISTS] 数据库名;
eg:
DORP [IF EXISTS] IT;

使用

USE 数据库名;
eg:
USE IT;

2.表操作

1创建&查询(操作对象为表自身的信息)

创建
CREATE TABLE 表名 (
      字段1 字段1类型[COMMENT 字段1注释];
      字段2 字段2类型[COMMENT 字段2注释];
      字段3 字段3类型[COMMENT 字段3注释];
      .....
      字段n 字段n类型[COMMENT 字段n注释]
)[COMMENT 表注释];      
eg:
CREATE TABLE user(
      id int comment'编号';
      name varchar(50) comment'姓名';
      age int comment'年龄';
      gender varchar(1) comment'性别'
) comment'用户表';      
查询
SHOW TABLES;
DESC 表名;
eg:
DESC user;
SHOW CREATE TABLE 表名;
eg:
SHOW CREATE TABLE user;

修改&删除

ALTER TABLE 表名 ADD 字段 字段类型(长度) [COMMENT 注释][约束];
eg:
ALTER TABLE emp ADD nickname varchar(50) COMMENT 注释'昵称'[约束];
ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); 
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度)[COMMENT 注释][约束];
eg:
ALTER TABLE emp CHANGE nickname username varchar(30)COMMENT '用户名';
ALTER TABLE 表名 DROP 字段名;
eg:
ALTER TABLE emp DROP nickname;
ALTER TABLE 表名 RENAME TO 新表名;
eg:
ALTER TABLE emp RENAME TO employ;
DROP TABLE [IF EXISTS] 表名;
eg:
DROP TABLE [IF EXISTS] employ;
TRUNCATE TABLE表名;
eg:
TRUNCATE TABLE employ;

二.SQL-DML(数据操作语言)

1.插入(操作对象为表中的数据)

INSERT INTO 表名 (字段1,字段2,....) VALUES (值1,值2,....);
eg:
INSERT INTO 表名 (id,workno,name) VALUES (3,3,"张三");
INSERT INTO 表名 VALUES (值1,值2,....);
INSERT INTO 表名 (字段1,字段2,....) VALUES (值1,值2,....),(值1,值2,....),(值1,值2,....);
eg:
INSERT INTO 表名 (id,workno,....) VALUES (3,3,....),(4,4,....);
INSERT INTO 表名 VALUES (值1,值2,....),(值1,值2,....),(值1,值2,....);

2.更新&删除(操作对象为表中的数据)

1.修改数据

UPDATE 表名 SET 字段名1=值1,字段名2=值2....[WHERE 条件];

无条件则表内相关数据都被修改

2.删除数据

DELETE FROM 表名 [WHERE 条件];

无条件则表内相关数据都被删除

三.SQL-DQL(数据查询语言)

1.基本查询

1.查询多个字段

SELECT 字段1,字段2,.....FROM 表名;
SELECT * FROM 表名;

2.设置别名

SELECT 字段1[AS别名1],字段2[AS别名2],.....FROM 表名;
SELECT 字段1[' '(空格)别名1],字段2[' '(空格)别名2],.....FROM 表名;

3.去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

2.条件查询

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2.条件

>						大于
>= 						大于等于
<						小于
<= 						小于等于
=						等于
<>或=					不等于
BETWEEN...AND...		在某个范围之间
IN(...)					在in之后的列表中的值
LIKE 占位符				模糊匹配
IS NULL 				NULL
AND 或 &&				并
OR 或 ||				或
NOT 或 !				非

3.模糊查询

  • 一个’_'表示有一个字符

  • '%'表示不管有几个字符,该例表示不管前面有几个字符,只要最后一个字符是X即可

3.聚合函数

1.介绍

将一列数据作为一个整体,进行纵向计算

2.常见聚合函数

count			统计数量
max				最大值
min				最小值
avg				平均值
sum				求和

3.语法

SELECT 聚合函数(字段列表) FROM 表名;

4.分组查询

SELECT 字段列表 FROM 表名[WHERE 条件]GROUP BY 分组字段名 [HAVING 分组后过滤条件]

where与having区别:

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。
  • 执行顺序: where >聚合函数>having
  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义

5.排序查询

SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1,字段2 排序方式2;

如果是多字段排序,当第一个字段相同时才会根据第二个字段进行排序

6.分页查询

SELECT 字段列表 FROM 表名 LIMIT 起始索引,查询记录数;

注意:

  • 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数,分页查询
  • 是数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT如果
  • 查询的是第一页数据,起始索引可以省略,直接简写为limit 10。

四.SQL-DCL (数据控制语言)

1.用户管理

1.查询用户

USE mysql;
SELECT * FROM user;

2.创建用户

CREATE USER '用户名'@'主机名' IDENTIFIED BY '新密码';

3.修改用户密码

ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

%通识符,表全部

4.删除用户

DROP USER '用户名'@'主机名';

2.权限控制

1.查询权限

SHOW GRANTS FOR '用户名'@'主机名';

2.授予权限

GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

3.撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

注意:

  • 多个权限之间,使用逗号分隔
  • 授权时,数据库名和表名可以使用*进行通配,代表所有。

五.函数

SELECT 函数(参数);

1.字符串函数

CONCAT(S1,S2)
LOWER(str)
UPPER(str)
LPAD(str,n,pad)
用字符串pad对str左边进行填充,使长度达到n
RPAD(str,n,pad)
用字符串pad对str右边进行填充,使长度达到n
TRIM(str去除字符串str头部和尾部的空格
SUBSTRING(str,start,len)
返回从字符串str从start位置起始的len个长度的字符串

2.数值函数

CEIL(x)
eg:
select ceil(1.1);
2
FLOOR(x)
eg:
select ceil(1.9);
1
MOD(x,y)
eg:
select mod(7,4);
3
RAND()
eg:
select RAND();
0.3747741034019497
ROUND(x,y)
eg:
select ROUND(2.345,2);
2.35

3.日期函数

CURDATE()
eg:
select curdate();
2024-3-22
CURTIME()
eg:
select curtime();
10:17:01
NOW()
eg:
select now();
2024-3-22 10:17:01
YEAR(date)
eg:
select YEAR(now());
2024
MONTH(date)
eg:
select MONTH();
3
DAY(date)
eg:
select DAY();
22
DATE_ADD(date,INTERVAL expr type)
返回一个日期date加上日期间隔expr后的日期
eg:
select date_add(now(),INTERVAL 70 MONTH);
2094-3-22 10:17:01
DATEDIFF(date1,date2)
返回起始date1和终止date2之间的天数
eg:
select datediff(2024-4-1,2024-3-1);
31

4.流程函数

IF(value,t,f)
如果value值为true则返回t,为false则返回f
eg:
select if(true,'ok','error');
ok

select if(false,'ok','error');
error
IFNULL(value1,value2)
如果value1不为空,则返回value1,否则返回value2
eg:
select ifnull(null,'ok','no');
no

select ifnull(123,'ok','no');
ok

select ifnull(' '(空格),'ok','no');
ok
CASE WHEN [val1] THEN [res1]... ELSE [default] END  (when then可写多个)
如果val1值为true,返回res1,...否则返回默认值default
CASE [expr] WHEN [val1] THEN [res1]... ELSE [default] END
如果expr值为val1,返回res1,...否则返回默认值default
eg:
需求:查询emp表的员工姓名和工作地址,北京/上海返回1线城市,其他返回二线城市
select name,( case workadress when '北京' then '1线城市' when '上海' then '1线城市' else '2线城市' end )as'工作地址' from emp;

六.约束

1.约束

NOT NULL
限制该字段的数据不能为null
UNIQUE
保证该字段的所有数据都是唯一的不重复的
PRIMARY KEY
主键是一行数据的唯一标识,要求非空且唯一
DEFAULT
保存数据时,如果未指定该字段的值,则采用默认值
CHECK
保证字段值满足某一条件
FOREING KEY
用来让两张表的数据之间建立联系,保证数据的完整性和一致性

2.外键约束

CREATE TABLE 表名 (
      字段1 字段1类型[COMMENT 字段1注释];
      .....
      字段n 字段n类型[COMMENT 字段n注释]
      [CONSTRAINT] [外键名称] FOREING KEY (外键字段名) REFERENCES 主表(主表列名)
);  
ALTER TABEL 表名 ADD CONSTRAINT 外键名称 FOREING KEY (外键字段名) REFERENCES 主表(主表列名);
eg:
ALTER TABLE emp ADD CONSTRAINT fk_emp_dept_id FOREING KEY (dept_id) REFERENCE dept(id);

3.外键删除更新行为

no action 		当在父表中删除/更新对应记录时,
				首先检查该记录是否有对应外键,如果有则不允许删除/更新
				
restrict 		当在父表中删除/更新对应记录时,
				首先检查该记录是否有对应外键。如果有则不允许删除/更新
				
cascade 		当在父表中删除/更新对应记录时,
				首先检查该记录是否有对应外镜,如果有,则也删除/更新外键		 
				在子表中的记录。
				
set null 		当在父表中国际对应记录时,
				首先检查该记录是否有对应外键,如果有则设置子表中该外健				
				值为null
				
set  default 	父表有变更时,子表将外键列设置成一个默认的值

七.多表查询

1.内连接

在这里插入图片描述

1.隐式内连接

SELECT 字段列表 FROM 表1,表2 WHERE 条件...;

2.显示内连接

SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 	ON 连接条件...;(INNER可省略)

2.外连接

1.左外连接

SELECT 字段列表 FORM 表1 LEFT [OUTER] JOIN 表2 ON 条件...;(OUTER可省)

2.右外连接

SELECT 字段列表 FORM 表1 RIGHT [OUTER] JOIN 表2 ON 条件...;(OUTER可省)

3.自连接

SELECT 列表字段 FROM 表A 别名A JION 表A 别名B ON 条件...;

自连接查询,可以是内连接查询,也可以是外连接查询

4.联合查询

SELECT 字段列表 FROM 表A 条件...
UNION[ALL] 												有all查询结果去除重复项
SELECT 字段列表 FROM 表B 条件...

列数和字段类型必须保持一致

5.子查询

SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个

1.标量子查询(子查询结果为单个值)

2.列子查询(子查询结果为一列)

IN			在脂定的集合范围之内,多选一
NOT IN		不在指定的集合范围之内
ANY			子查询返回列表中,有任意一个满足即可
SOME	 	与ANY等同,使用SOME的地方都可以使用ANY
ALL			子查询返回列表的所有值都必须满足

3.行子查询(子查询结果为一行)

常用操作符
= 、 <> 、 IN 、 NOT IN

4.表子查询(子查询结果为多行多列)

常用操作符
IN

八.事务

事务操作

SELECT @@autocommit;
SET @@autocommit=0/1;
COMMIT;
ROLLBACK;

事务四大特性

  • 原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败

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

  • 隔离性(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

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

并发事务问题

1.赃读

一个事务读到另一个事务未提交的数据

2.不可重复读

一个事务先后读取同一记录,但两次读取数据不同,称之为不可重复读

不可重复读

修改事务隔离级别后可重复读

3.幻读

一个事务按照条件查询数据时,没有对应的数据,但插入数据时,又发现该数据已经存在了

事务隔离级别

1.查看事务隔离级别

SELECT @@TRANSACTION_ISOLATION;

2.设置事务隔离级别

SET [SESSION/GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SERIALIZABLE};

九.索引

1.结构

mysql索引数据结构对经典的b+tree进行了优化。在原b+tree的基础上,增加一个指向相邻叶子书点的转表指针,就形成了带有原序
指针的b+tree,提高区间访问的性能。

1.Hash索引

hash索引特点

  • hash索引只能用于对等比较(=,in),不支持范围查询(between,>,<,…)
  • 无法利用索引完成排序操作
  • 查询效率高,通常只需要一次检索就可以了,效率通常要高于b+tree索引

2.索引结构

主键索引 		针对于表中主键创建的索引 默认自动创建,只能有一个

唯一索引 		避免同一个表中某数据列中的值重复 可以有多个

常规索引 		快速定位特定数据 可以有多个

全文索引 		全文索引查找的是文本中的关键词,而不是比较索引中的值 可
				以有多个
				
聚集索引			将数据存储与索引放到了一块,索引结构的叶子节点保存了
				数据 必须有,而且只有一个
				
二级索引			将数据与索引分开存储,索引结构的叶子节点关联的是对应的
				主键 可以存在多个

聚集索引选取规则:

  • 如果存在主键,主键索引就是聚集索引
  • 如果不存在主键,将使用第一个唯一(unique)索引作为聚集索引

3.语法

CREATE [UNIQUE|FULLTEXT] INDEX index_name ON table_name(index_col_name,...);
SHOW INDEX FROM index_name;
DROP INDEX index_name ON table_name;

标签:填满,索引,数据库,查询,差点,字段,表名,eg,SELECT
From: https://blog.csdn.net/2301_82341091/article/details/141218146

相关文章

  • oracle数据库缓存区高速缓存区
    文章目录Oracle数据库高速缓存一、数据库高速缓存的基本概念二、数据库高速缓存的工作原理三、数据库高速缓存的配置四、数据库高速缓存的块管理五、多种数据块大小的高速缓存配置Oracle数据库高速缓存一、数据库高速缓存的基本概念1、数据库高速缓存(DatabaseB......
  • Centos7使用RPM包安装Oracle21c数据库(EE)
    Centos7使用RPM包安装Oracle21c数据库(EE)官方下载链接21c标准版安装包信息:文件名:LINUX.X64_213000_db_home.zip(64-bit)(3,109,225,519bytes)(sha256sum-c05d5c32a72b9bf84ab6babb49aee99cbb403930406aabe3cf2f94f1d35e0916)21cxe版安装包信息:文件名:oracle-data......
  • C#基础:数据库中使用Linq作分组处理(反射/直接分组)
    目录一、使用反射分组二、不使用反射分组三、调用示例四、代码demo一、使用反射分组privatestaticList<GroupList<T>>GetGroupList<T>(List<T>entities,stringgroupByProperty){//获取分组字段的类型varpropertyInfo=typeof(T).GetProperty(groupBy......
  • Oracle21c数据库安装问题记录
    Oracle21c数据库安装问题记录1.安装问题1.1Oracle监听器配置错误:为该监听程序提供的信息正由此计算机上的其他软件使用转载链接:https://blog.itpub.net/23557469/viewspace-1117140/在Linux上安装好Oracle10g,配置监听器,却得到:为该监听程序提供的信息正由此计算机上的其......
  • Sybase ASE数据库 1615
    SybaseASE数据库16/15.7安装安装参考博客:windows/Linux下安装SybaseASE16/15.7-CSDN博客。1.下载安装包SYBASE官网下载以下安装可成功,有免费安装版本linux:SybaseASE15.7链接:https://pan.baidu.com/s/10aJLz3hP-tCOHWBrktZjug提取码:a47tSybaseASE16链接:https:......
  • Centos7使用RPM包安装Oracle21c数据库(XE)
    Centos7使用RPM包安装Oracle21c数据库(XE)官方下载链接21c标准版安装包信息:文件名:LINUX.X64_213000_db_home.zip(64-bit)(3,109,225,519bytes)(sha256sum-c05d5c32a72b9bf84ab6babb49aee99cbb403930406aabe3cf2f94f1d35e0916)21cxe版安装包信息:文件名:oracle-data......
  • PostgreSQL数据库的安装与部署(Linux)
    CentOS安装PostgreSQL版本信息:   CentOS版本:CentOS-7-x86_64-Minimal-1810   PostgreSQL版本:PostgreSQL10.10,64-bit 第一部分:PostgresSQL的安装1、安装rpm文件yuminstallhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redh......
  • SpringBoot系列:使用原生JDBC实现对数据库的增删改查
    application.ymlspring:datasource:username:rootpassword:123456url:jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8driver-class-name:com.mysql.cj.jdbc.DriverApplicationTest......
  • 数据库建表18个小技巧
    1名字建表的时候,给表、字段和索引起个好名字,真的太重要了。见名知意名字就像表、字段和索引的一张脸,可以给人留下第一印象。好的名字,言简意赅,见名知意,让人心情愉悦,能够提高沟通和维护成本。坏的名字,模拟两可,不知所云。而且显得杂乱无章,看得让人抓狂。反例:用户名称字段定义......
  • 【数据库指定主题文档上传激励活动】进行中,快来上传文档赢取奖励!
    墨天轮社区的文档版块一直致力于为用户提供具有价值的技术资源与实操干货,当前已收录了众多优质的技术资源,尤其是数据库技术干货。经前期调研发现,当前众多用户对数据库巡检、国产化适配、性能优化等主题实操文档的需求甚高。为让不同背景的数据库从业者能够相互学习和交流经验,墨天......