MySQL:初学语句,这一篇还不够吗?

头歌随记,方便复习

调用win+R+cmd

Ctrl+shift+C复制

Ctrl+shift+v粘贴


MySQL数据定义与操作实战

表的初创建当中有ENUM类型和DATE类型

ENUM类型

ENUM数据类型

在MySQL中,ENUM是一种用于定义可选值列表的数据类型。它允许你从一个预定义的列表中选择一个值作为列中的值。

ENUM类型列可以存储0至65535个值,最多可以使用65,535个不同的元素。这个数据类型被广泛应用于数据库设计中的选择列表,例如性别、状态或类型的列。

下面是一个创建ENUM类型列的示例语句:

CREATE TABLE users (
    id INT(11) PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    gender ENUM('male', 'female'),
    age INT(3)
  );

在该示例中,我们创建了一个名为users的表,并定义了一个名为gender的ENUM类型列。其可选值仅限于'male''female'两个值。

当插入值时,只能使用枚举中提供的值。如果尝试插入一个不在列表中的值,则会引发错误。例如,执行以下插入语句将会抛出错误,因为 "unknown" 不在有效枚举列表中:

INSERT INTO users (name, gender, age) 
	VALUES 
	('John', 'unknown', 25);

总的来说,ENUM类型非常方便。但需要注意的是,如果ENUM类型列的元素数量过多,可能会影响到表的性能和查询速度。

MySQL中\G的作用

MySQL中\G的作用


一、数据库和表的基本操作

1、查看 表结构 与 修改表名

1.1查看表结构

DESCRIBE 表名;

DESCRIBE 表名;

输出生成如下表格样式

SHOW CREATE TABLE 表名\G;##区别于此种形式

SHOW CREATE TABLE 表名\G;

不仅仅可以返回给我们建表时所写的详细语句,而且还可以查看存储引擎和字符编码

我们加上\G,改善排版。

1.2显示库中所有表

SHOW TABLES;

SHOW TABLES;

1.3修改表名

ALTER TABLE 旧表名 RENAME TO 新表名;

ALTER TABLE 旧表名 RENAME  TO 新表名; 

2、修改 字段名 与 字段数据类型

2.1修改字段名

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型;##数据类型不要忘记

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 数据类型;

2.2修改字段数据类型

ALTER TABLE 表名 MODIFY 字段名 数据类型;

ALTER TABLE 表名 MODIFY 字段名 数据类型; 

3、添加 与 删除 字段

3.1添加字段

ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER] 已存在字段名;

ALTER TABLE 表名 ADD 新字段名 数据类型 [约束条件] [FIRST|AFTER] 已存在字段名;

3.1.1在表的最后一列添加字段

只要不做[FIRST|AFTER]的位置说明,在添加字段时MySQL会默认把新字段加入到表的最后一列。

3.1.2在表的第一列添加字段

在第一列添加新的字段,只需做FIRST的位置说明。

1.2在表的指定列后添加字段

只需做AFTER的位置说明,然后注明你想让它添加在哪个字段的后面即可。

现在我们要把字段prod_country添加到表Mall_products的 prod_name字段的后面。

3.2删除字段

ALTER TABLE 表名 DROP 字段名;

ALTER TABLE 表名 DROP 字段名;

现在我们要把字段prod_price从表Mall_products中删除。

ALTER TABLE Mall_products DROP prod_price;

4、修改字段的排列位置

ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2;

ALTER TABLE 表名 MODIFY 字段1 数据类型 FIRST|AFTER 字段2;

5、删除表的外键约束

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名;

ALTER TABLE 表名 DROP FOREIGN KEY 外键约束名; #自己设定的外键约束名

二、数据库和表的基本操作

1、插入数据

INSERT INTO 表名(字段名) VALUES (内容);#可以详细到字段名,不写默认全部

insert tb_emp values
(1,'Nancy',301,2300.00),
(2,'Tod',303,5600.00),
(3,'Carly',301,3200.00);#多条插入


在MySQL中,可以使用以下的SQL语句将一个表的内容复制到另一个表中:

INSERT INTO table_name_2 
	SELECT * FROM table_name_1;

其中,table_name_1是要复制数据的表名,table_name_2是要将数据复制到的目标表名。

该语句会将table_name_1表中的所有数据插入到table_name_2表中。

如果希望仅复制表结构而不包括数据,可以使用以下SQL语句:

关键词like

CREATE TABLE table_name_2 LIKE table_name_1;

这条语句会新建一个名为table_name_2的空表,它的列和索引结构与table_name_1完全相同。

2、更新数据

UPDATE 表名 SET 字段名1 = 内容1, 字段名2 = 内容2, 字段名3 = 内容3 WHERE 过滤条件;

update tb_emp set 
Name='Tracy',
DeptId=302,
Salary=4300.00 
where Id=3;

3、删除数据

3.1删除表中的指定行

DELETE FROM 表名 WHERE 条件语句;

3.2删除表中的所有行

DELETE FROM 表名;

DROP TABLE 语句用于完全删除整个表及相关的所有数据、索引、约束等,将会永久清空已经创建的表格结构和数据。使用该命令前,请务必做好备份工作,并且要谨慎操作,以免误删除数据。

DELETE 语句用于仅删除表中的特定行或符合一定条件的数据。它不会删除整张表,而只是将符合要求的数据从表中移除。DELETE 语句可以带有 WHERE 子句,来指定需要删除哪些行或数据。它还可以用 TRUNCATE TABLE 命令一次性清空整个表数据。

因此,如果您只是想删除表中的部分数据,则应该使用 DELETE 语句,如果您想彻底删除整个表及其所有内容,则应该使用 DROP TABLE 命令。

三、单表查询

select [all/distinct/distinctrow] */字段名,字段名
	from 表1 [inner/outer join] 表
 	on 表1.字段名=表2.字段名1
	where 条件表达式
	group by 分组字段名
	having 字段表达式
order by 排序字段[asc/desc][,...n]
limit 记录数;

SELECT 语句 其反馈(呈现给我们的是一个虚拟表,不存储在我们的电脑中)

单表查询(一)

1. 查询数据表中指定字段的内容
 SELECT 字段名1, 字段名2, ···, ··· FROM 表名;
2. 查询数据表中的所有内容
SELECT * FROM 表名;#*是通配符,所有字符元素

在MySQL中, SELECT * FROM 表名语句和 DESCRIBE 表名 命令有着不同的目的和功能。

  • SELECT * FROM 表名 用于检索一整张表中所有的行和列信息并返回。使用该语句可以查看表格中所有列的数据,但是如果表非常庞大,查询速度可能非常缓慢。
  • DESCRIBE 表名 返回关于表结构的信息,例如表名、列名、每个列的数据类型、键是否存在等。它是用来检查表的元数据以了解表格架构信息,而不是显示实际表中的数据。因此,它对于诊断和调试表格结构非常有用,尤其是当你想确定表中某列的数据类型或运行join操作时。

综上所述,这两个命令的作用和展示内容都不相同。如果您需要查看整个表中的所有数据,请使用 SELECT * FROM 表名。如果您需要查看特定表的元数据信息,例如表结构、列名、数据类型等,请使用 DESCRIBE 表名

3. 带 IN 关键字的查询
SELECT 字段名 
FROM 表名 
WHERE 字段名 IN (n1,n2,n3,...);

括号内的数字必须为INT格式的数字。被“点到名”的这些括号里数字对应的内容。

SELECT 字段名 
FROM 表名 
WHERE 字段名 NOT IN (n1,n2,n3,...);#不在这里面

4. 带 BETWEEN AND 的范围查询
SELECT 字段名 
FROM 表名 
WHERE 字段名 BETWEEN n1 AND n2;

BETWEEN AND需要两个参数支持,一个是范围的开始值,另一个就是结束值了。

尤其值得注意的是,端点值也包含在其中。

SELECT 字段名 
FROM 表名 
WHERE 字段名 NOT BETWEEN n1 AND n2;

单表查询(二)

1.带 LIKE 的字符匹配查询(模糊匹配)
SELECT 字段名 
FROM 表名 
WHERE 字段名 LIKE '字符%';
#其中 % 的位置可以根据需要在字符间变化。%多个字符(不定)

SELECT 字段名 
FROM 表名 
WHERE 字段名 LIKE '字符_';
#其中`_`的位置可以根据需要在字符间变化。_一个字符

2.查询空值与去除重复结果
2.1查询空值
SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL;

注意了,这个NULL既不代表0,也不代表空字符,而是代表一种未知的状态,比如不适用或者放着等将来有合适数据了再添加进去。

2.2去除重复结果
SELECT DISTINCT 字段名 FROM 表名; #distinct

3.带 AND 与 OR 的多条件查询
3.1带AND关键字的多条件查询
SELECT 字段名 
FROM 表名 
WHERE 表达式1 AND 表达式2;

MySQLWHERE子句中使用AND操作符限制只有满足所有条件的查询才会被返回。可以使用AND连接两个甚至更多个查询条件,多个条件表达式之间用AND分开。

增加条件的同时只需增加一个 AND 关键字。

3.2带OR关键字的多条件查询
SELECT 字段名 
FROM 表名 
WHERE 表达式1 OR 表达式2;

小提示: OR 可以和 AND 一起使用。但是 AND 的优先级要高于 OR 的优先级!

关键字IN,它能实现与OR相同的功能。

虽然两种写法功能一样,但是我们更推荐使用IN关键字。因为它不仅逻辑清晰,执行的速度也会快于 OR关键字。更重要的是,使用 IN 关键字,我们以后可以执行更加复杂的嵌套语句。(就是把所有可能都给想出来,罗列出来,免得电脑再来一遍)

单表查询(三)

1.对查询结果进行排序(指定方向)
select 字段名 from 表名
order by 字段名 [ASC[DESC]];

ascend上升(升序) asc 默认情况,按照升序排序

descend下降 (降序)desc


describe 描述 desc

2.分组查询
select 字段名 from 表名
group by 字段名;

分组查询的关键字是Group By,查询的是每个分组中 首次出现的一条记录

意义不大,一般情况下,GROUP BY都和聚合函数一起使用。

使用LIMIT限制查询结果的数量
select 字段名 from 表名
limit [偏移量,] 记录数;

偏移量,如果不指定,查询结果从第一条记录开始

0 表示从查询结果第一条开始 类比数组,存储下标从0开始

1 表示从查询结果第二条开始

记录数,表示返回查询结果的条数

四、连接查询

1.内连接查询
表1 [inner] join 表2
on 表1.字段=表2.字段

从表1中取出每一条记录,去表2中与所有的记录进行匹配

匹配必须是某个条件在表1中与表2中相同,最终才会保留结果,否则不保留。

inner 关键字可省略不写;on 表示连接条件:条件字段就是代表相同的业务含义

大多数情况下为两张表中的主外键关系。

select emp.name as empName,dept.name as deptName
from department as dept join employee as emp
on dept.id=emp.dept_id;

as 关键字 可以给表或列另起别名

展示结果为虚拟表,另起别名为虚拟表的列名

2.外连接查询
表1 FULL/LEFT/RIGHT [OUTER] join 表2
on 表1.字段=表2.字段;
  1. 完全连接:每条与另外一张表进行连接,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空NULL;
  2. 左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写 NULL
  3. 右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写 NULL;
  4. 虽然左外连接和右外连接有主表差异,但左外连接和右外连接可以互转。

3.复合条件连接查询

复合条件连接查询,就是在连接查询的过程中,

通过添加过滤条件来限制查询结果,使查询结果更加精确。

五、子查询

1.带比较运算符的子查询
SELECT * 
FROM t1 
WHERE col1=(
  SELECT col2 
  FROM t2);

带比较运算符的子查询

运算符

说明

>

大于

>=

大于或等于

=

等于

!= 或 <>

不等于

<

小于

<=

小于或等于

2.关键字子查询

MySQL数据管理技术实战

一、视图

1.创建视图

#2.创建多表视图
create view stu_classes
    as
    select stu.stu_id, stu.name, info.classes
    from student as stu, stu_info as info
    where stu.stu_id = info.stu_id;

2.操作视图

用户可以在视图中无条件地使用select语句查询数据。

insertupdatedelete操作需要在创建视图时满足以下条件(满足以下条件的视图称为可更新视图):

  • from子句中只能引用有1个表(真实表或可更新视图);
  • 不能包含 with、distinct、group by、having、limit等子句;
  • 不能使用复合查询,即不能使用union、intersect、except等集合操作;
  • select子句的字段列表不能包含聚合、窗口函数、集合返回函数。

3.删除视图
DROP VIEW view_name;##删除视图
show tables;##展示视图

4.视图优点

二、触发器

MySQL触发器是一种特殊的存储过程,它可以在指定的事件(INSERT、UPDATE或DELETE)发生时自动执行。当指定的事件被触发时,MySQL将检查是否定义了与该事件相关的触发器,并在相应的表上执行该触发器。

MySQL触发器有BEFORE和AFTER两种类型。BEFORE触发器会在指定事件之前执行;而AFTER触发器则会在指定事件之后执行。

MySQL触发器可以用于实现数据完整性约束、自动化任务等功能。

总之,MySQL触发器提供了一种有效的方式来对数据库内发生的事件进行控制和管理,能够优化数据库的使用,提高其安全性和可靠性。但是,在使用触发器的同时,也要注意其对数据库性能的影响,避免误用和滥用。

总结:自动执行 数据规范

1.创建触发器

delimiter//

	create trigger 触发器名
  before/after insert/update/delete on 表名(你要操作的表名)
  for each row

  begin
        ##你想要触发电脑自动帮你做的操作
  end//

  delimiter;
2.操作触发器
2.1查看触发器
show triggers\G;#查看所有触发器的信息
show triggers like 模式\G;#查看与模式模糊匹配的触发器的定义信息
2.2查看触发器的定义

MySQL中所有触发器的定义都存储在 information_schema数据库中的triggers表中,查询triggers表时,可以查看数据库中所有触发器的详细信息。

select * 
	from information_schema.triggers\G;

使用show create trigger 触发器名;可以查看指定触发器的详细信息。

show create trigger 触发器名\G;
2.3删除触发器
drop trigger 触发器名;#触发器保存的是一段触发程序,没有保存用户数据
3.触发器注意事项

详细且重点

  • insert 只有new合法
  • delete 只有old合法
  • update newold都是合法的

同一个表不能创建两个相同触发时间和触发事件的触发器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值