头歌随记,方便复习
调用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;
MySQL
在WHERE
子句中使用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.字段;
- 完全连接:每条与另外一张表进行连接,最终都会保留。能匹配,正确保留;不能匹配,其它表的字段都置空
NULL
; - 左外连接:在内连接的基础上,还包含表1中所有不符合条件的数据行,并在其中的表2列填写
NULL
; - 右外连接:在内连接的基础上,还包含表2中所有不符合条件的数据行,并在其中的表1列填写
NULL
; - 虽然左外连接和右外连接有主表差异,但左外连接和右外连接可以互转。
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
语句查询数据。
用insert
、update
和delete
操作需要在创建视图时满足以下条件(满足以下条件的视图称为可更新视图):
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
new
和old
都是合法的
同一个表不能创建两个相同触发时间和触发事件的触发器。