MySQL
2021-10-10 23:04:21 10 举报
AI智能生成
MySQL 学习笔记
作者其他创作
大纲/内容
表层面
增 create
CREATE TABLE [IF NOT EXISTS] `表名`(
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
...
)ENGINE=INNODB DEFAULT CHARSET=UTF8
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
`字段名` 列类型 [属性][索引][注释],
...
)ENGINE=INNODB DEFAULT CHARSET=UTF8
删 drop
--删除表 如果表存在
DROP TABLE IF EXISTS student2
DROP TABLE IF EXISTS student2
改、删 alter
--修改表名 ALTER TABLE 旧表名 RENAME AS 新表名
ALTER TABLE student RENAME AS student2
--增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student2 ADD ages INT(1)
--修改表的字段(重命名,修改约束)
ALTER TABLE student2 MODIFY ages VARCHAR(11) --修改约束
--ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE student2 CHANGE ages age INT(1) --字段重命名
--删除表的字段 ALTER TABLE 表名 DROP 字段名
ALTER TABLE student2 DROP age
ALTER TABLE student RENAME AS student2
--增加表的字段 ALTER TABLE 表名 ADD 字段名 列属性
ALTER TABLE student2 ADD ages INT(1)
--修改表的字段(重命名,修改约束)
ALTER TABLE student2 MODIFY ages VARCHAR(11) --修改约束
--ALTER TABLE 表名 CHANGE 旧名字 新名字 列属性[]
ALTER TABLE student2 CHANGE ages age INT(1) --字段重命名
--删除表的字段 ALTER TABLE 表名 DROP 字段名
ALTER TABLE student2 DROP age
表数据层面
增 insert
--插入语句(添加)
--insert INTO 表名([字段名1,字段2,字段3,]...)values ('值1a','值1b'),('值2a','值2b'),('值3'),...
INSERT INTO `grade` (`gradename`)VALUES('大四');
--由于主键auto_increment 我们可以省略
INSERT INTO `grade`(`gradeid`)VALUES('id');
--一般写入插入语句,一定要数据和字段一一对应!
INSERT INTO `grade`(`gradename`)VALUES('大一'),('大二'),('大三');
INSERT INTO `student`(`name`,`pwd`)VALUES('张三','aaa'),('李四','bbb');
--省略字段名称,要按顺序全部写
INSERT INTO `student`VALUES(5,'ccc','wangwu','1999-10-28','ccc');
--insert INTO 表名([字段名1,字段2,字段3,]...)values ('值1a','值1b'),('值2a','值2b'),('值3'),...
INSERT INTO `grade` (`gradename`)VALUES('大四');
--由于主键auto_increment 我们可以省略
INSERT INTO `grade`(`gradeid`)VALUES('id');
--一般写入插入语句,一定要数据和字段一一对应!
INSERT INTO `grade`(`gradename`)VALUES('大一'),('大二'),('大三');
INSERT INTO `student`(`name`,`pwd`)VALUES('张三','aaa'),('李四','bbb');
--省略字段名称,要按顺序全部写
INSERT INTO `student`VALUES(5,'ccc','wangwu','1999-10-28','ccc');
删 delete、truncate
delete 和 truncate 的区别
- 相同点:都能删除数据,都不会删除数据结构
- 不同点:
- truncate 重新设置 自增列,计数器会归零
- truncate 不会清空事务
- 相同点:都能删除数据,都不会删除数据结构
- 不同点:
- truncate 重新设置 自增列,计数器会归零
- truncate 不会清空事务
语法:delete from 表名[where 条件]
--删除数据
DELETE FROM `student` WHERE id=1;
--不带where 会删除全部数据(避免这样做)
delete from `student`;
--删除数据
DELETE FROM `student` WHERE id=1;
--不带where 会删除全部数据(避免这样做)
delete from `student`;
查 select
SELECT[ALL|DISTINCT]--是否去重
{*|TALBE.*|[TALBLE.FIELD1 [AS ALISA1],[TALBLE.FIELD2 [AS ALISA2],...}
FROM TABLE_NAME [AS TABLE_ALISAS]
[LEFT|RIGHT|INNER JOIN TABLE_NAME]---联合查询
[ON ...]
[WHERE ...]--指定结果满足的条件
[GROUP BY ...]--指定结果按照那几个字段来分组
[HAVING ...]-- 过滤分组的记录必须满足的次要条件
[ORDER BY ...]--指定查询记录按一个或多个条件排序
[LIMIT {[OFFSET,]ROW_COUNT|ROW_COUNTOFFSET OFFSET}]
--指定查询的记录从哪条至那条
{*|TALBE.*|[TALBLE.FIELD1 [AS ALISA1],[TALBLE.FIELD2 [AS ALISA2],...}
FROM TABLE_NAME [AS TABLE_ALISAS]
[LEFT|RIGHT|INNER JOIN TABLE_NAME]---联合查询
[ON ...]
[WHERE ...]--指定结果满足的条件
[GROUP BY ...]--指定结果按照那几个字段来分组
[HAVING ...]-- 过滤分组的记录必须满足的次要条件
[ORDER BY ...]--指定查询记录按一个或多个条件排序
[LIMIT {[OFFSET,]ROW_COUNT|ROW_COUNTOFFSET OFFSET}]
--指定查询的记录从哪条至那条
--查询参加了考试的同学(学号、姓名、科目编号、分数)
SELECT * FROM `student`;
SELECT * FROM `result`;
/*
1.分析需求,分析查询的字段来自哪些表,不再一张表使用连接查询
2.确定使用哪种联表查询方式
确定交叉点(这两个表中那个数据是相同的)
判断的条件:student.studentno = result.studentno
*/
====INNER JOIN========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno
=====RIGHT JOIN=========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
RIGHT JOIN result AS r
WHERE s.`studentno`= r.`studentno`
SELECT * FROM `student`;
SELECT * FROM `result`;
/*
1.分析需求,分析查询的字段来自哪些表,不再一张表使用连接查询
2.确定使用哪种联表查询方式
确定交叉点(这两个表中那个数据是相同的)
判断的条件:student.studentno = result.studentno
*/
====INNER JOIN========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno
=====RIGHT JOIN=========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
RIGHT JOIN result AS r
WHERE s.`studentno`= r.`studentno`
改 update
--修改学员名字
UPDATE `student` SET `name`='fatman' WHERE id=1;
--不带whert 就会修改所有 SET 字段 的数据
UPDATE `student`SET `name`='fatman';
UPDATE `student`SET `pwd`='112233' WHERE `name`='fatman'AND`pwd`='aaa';
UPDATE `student`SET `name`='goodman'WHERE id BETWEEN 1 AND 3;
--修改多个属性
UPDATE `student` SET `name`='badman',`pwd`='333' WHERE id=2;
--多个条件定位数据,trim
--语法:
UPDATE 表名 SET colume_name=新名字 WHERE 条件 AND 条件(条件无上限)
UPDATE `student` SET `name`='fatman' WHERE id=1;
--不带whert 就会修改所有 SET 字段 的数据
UPDATE `student`SET `name`='fatman';
UPDATE `student`SET `pwd`='112233' WHERE `name`='fatman'AND`pwd`='aaa';
UPDATE `student`SET `name`='goodman'WHERE id BETWEEN 1 AND 3;
--修改多个属性
UPDATE `student` SET `name`='badman',`pwd`='333' WHERE id=2;
--多个条件定位数据,trim
--语法:
UPDATE 表名 SET colume_name=新名字 WHERE 条件 AND 条件(条件无上限)
表数据层面
增 insert
--插入语句(添加)
--insert INTO 表名([字段名1,字段2,字段3,]...)values ('值1a','值1b'),('值2a','值2b'),('值3'),...
INSERT INTO `grade` (`gradename`)VALUES('大四');
--由于主键auto_increment 我们可以省略
INSERT INTO `grade`(`gradeid`)VALUES('id');
--一般写入插入语句,一定要数据和字段一一对应!
INSERT INTO `grade`(`gradename`)VALUES('大一'),('大二'),('大三');
INSERT INTO `student`(`name`,`pwd`)VALUES('张三','aaa'),('李四','bbb');
--省略字段名称,要按顺序全部写
INSERT INTO `student`VALUES(5,'ccc','wangwu','1999-10-28','ccc');
--insert INTO 表名([字段名1,字段2,字段3,]...)values ('值1a','值1b'),('值2a','值2b'),('值3'),...
INSERT INTO `grade` (`gradename`)VALUES('大四');
--由于主键auto_increment 我们可以省略
INSERT INTO `grade`(`gradeid`)VALUES('id');
--一般写入插入语句,一定要数据和字段一一对应!
INSERT INTO `grade`(`gradename`)VALUES('大一'),('大二'),('大三');
INSERT INTO `student`(`name`,`pwd`)VALUES('张三','aaa'),('李四','bbb');
--省略字段名称,要按顺序全部写
INSERT INTO `student`VALUES(5,'ccc','wangwu','1999-10-28','ccc');
删 delete、truncate
delete 和 truncate 的区别
- 相同点:都能删除数据,都不会删除数据结构
- 不同点:
- truncate 重新设置 自增列,计数器会归零
- truncate 不会清空事务
- 相同点:都能删除数据,都不会删除数据结构
- 不同点:
- truncate 重新设置 自增列,计数器会归零
- truncate 不会清空事务
语法:delete from 表名[where 条件]
--删除数据
DELETE FROM `student` WHERE id=1;
--不带where 会删除全部数据(避免这样做)
delete from `student`;
--删除数据
DELETE FROM `student` WHERE id=1;
--不带where 会删除全部数据(避免这样做)
delete from `student`;
查 select
SELECT[ALL|DISTINCT]--是否去重
{*|TALBE.*|[TALBLE.FIELD1 [AS ALISA1],[TALBLE.FIELD2 [AS ALISA2],...}
FROM TABLE_NAME [AS TABLE_ALISAS]
[LEFT|RIGHT|INNER JOIN TABLE_NAME]---联合查询
[ON ...]
[WHERE ...]--指定结果满足的条件
[GROUP BY ...]--指定结果按照那几个字段来分组
[HAVING ...]-- 过滤分组的记录必须满足的次要条件
[ORDER BY ...]--指定查询记录按一个或多个条件排序
[LIMIT {[OFFSET,]ROW_COUNT|ROW_COUNTOFFSET OFFSET}]
--指定查询的记录从哪条至那条
{*|TALBE.*|[TALBLE.FIELD1 [AS ALISA1],[TALBLE.FIELD2 [AS ALISA2],...}
FROM TABLE_NAME [AS TABLE_ALISAS]
[LEFT|RIGHT|INNER JOIN TABLE_NAME]---联合查询
[ON ...]
[WHERE ...]--指定结果满足的条件
[GROUP BY ...]--指定结果按照那几个字段来分组
[HAVING ...]-- 过滤分组的记录必须满足的次要条件
[ORDER BY ...]--指定查询记录按一个或多个条件排序
[LIMIT {[OFFSET,]ROW_COUNT|ROW_COUNTOFFSET OFFSET}]
--指定查询的记录从哪条至那条
--查询参加了考试的同学(学号、姓名、科目编号、分数)
SELECT * FROM `student`;
SELECT * FROM `result`;
/*
1.分析需求,分析查询的字段来自哪些表,不再一张表使用连接查询
2.确定使用哪种联表查询方式
确定交叉点(这两个表中那个数据是相同的)
判断的条件:student.studentno = result.studentno
*/
====INNER JOIN========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno
=====RIGHT JOIN=========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
RIGHT JOIN result AS r
WHERE s.`studentno`= r.`studentno`
SELECT * FROM `student`;
SELECT * FROM `result`;
/*
1.分析需求,分析查询的字段来自哪些表,不再一张表使用连接查询
2.确定使用哪种联表查询方式
确定交叉点(这两个表中那个数据是相同的)
判断的条件:student.studentno = result.studentno
*/
====INNER JOIN========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
INNER JOIN result AS r
WHERE s.studentno = r.studentno
=====RIGHT JOIN=========
SELECT s.`studentno`,`studentname`,`subjectno`,`studentresult`
FROM `student` AS s
RIGHT JOIN result AS r
WHERE s.`studentno`= r.`studentno`
改 update
--修改学员名字
UPDATE `student` SET `name`='fatman' WHERE id=1;
--不带whert 就会修改所有 SET 字段 的数据
UPDATE `student`SET `name`='fatman';
UPDATE `student`SET `pwd`='112233' WHERE `name`='fatman'AND`pwd`='aaa';
UPDATE `student`SET `name`='goodman'WHERE id BETWEEN 1 AND 3;
--修改多个属性
UPDATE `student` SET `name`='badman',`pwd`='333' WHERE id=2;
--多个条件定位数据,trim
--语法:
UPDATE 表名 SET colume_name=新名字 WHERE 条件 AND 条件(条件无上限)
UPDATE `student` SET `name`='fatman' WHERE id=1;
--不带whert 就会修改所有 SET 字段 的数据
UPDATE `student`SET `name`='fatman';
UPDATE `student`SET `pwd`='112233' WHERE `name`='fatman'AND`pwd`='aaa';
UPDATE `student`SET `name`='goodman'WHERE id BETWEEN 1 AND 3;
--修改多个属性
UPDATE `student` SET `name`='badman',`pwd`='333' WHERE id=2;
--多个条件定位数据,trim
--语法:
UPDATE 表名 SET colume_name=新名字 WHERE 条件 AND 条件(条件无上限)
数据库层面
数据库操作
增 create
CREATE DATABASE IF NOT EXISTS 数据库名;
删 drop
DROP DATABASE IF EXISTS 数据库名;
选 use
USE `数据库名`;
查 show
SHOW DATABASES;
数据库系统表
information_schema数据库部分表
•SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
•TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
•COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
•STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。
•USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。
•TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。
•TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。
•KEY_COLUMN_USAGE表:描述了具有约束的键列。
•KEY_COLUMN_USAGE表:描述了具有约束的键列。
information_schema
Information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?
元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。有些时候用于表述该信息的其他术语包括“数据词典”和“系统目录”。
performance_schema
PERFORMANCE_SCHEMA这个功能默认是关闭的。需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。
PERFORMANCE_SCHEMA这个功能默认是关闭的。需要设置参数: performance_schema 才可以启动该功能,这个参数是静态参数,只能写在my.cnf 中 不能动态修改。
mysql
在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表
在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表
sys
sys_config : 这是在这个系统库上存在的唯一一个表
sys_config : 这是在这个系统库上存在的唯一一个表
聚合函数
==================聚合函数===============
SELECT COUNT(`studentname`) FROM student; --count(指定字段),会忽略所有的null值,不统计
SELECT COUNT(*) FROM student; --count(*),不会忽略null 值,统计,本质 计算行数
SELECT COUNT(1) FROM student; --count(1),不会忽略null值,统计,本质 至为1,去计算
SELECT SUM(`studentresult`) AS 总和 FROM result
SELECT MAX(`studentresult`) AS 最高分 FROM result
SELECT MIN(`studentresult`) AS 最低分 FROM result
SELECT COUNT(`studentname`) FROM student; --count(指定字段),会忽略所有的null值,不统计
SELECT COUNT(*) FROM student; --count(*),不会忽略null 值,统计,本质 计算行数
SELECT COUNT(1) FROM student; --count(1),不会忽略null值,统计,本质 至为1,去计算
SELECT SUM(`studentresult`) AS 总和 FROM result
SELECT MAX(`studentresult`) AS 最高分 FROM result
SELECT MIN(`studentresult`) AS 最低分 FROM result
where
where 嵌套 查询
--1.查询 数据库结构-1 的所有历史考试结果(学号,科目编号,成绩),降序排列
--方式1.使用连接查询
SELECT `studentno`,su.`subjectno`,`studentresult`
FROM `result` AS re
INNER JOIN `subject` AS su
ON re.subjectno=su.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY `studentresult` DESC
--方式2.使用子查询() 由里及外 进行查询
SELECT `studentno`,`subjectno`,`studentresult`
FROM `result` AS re
WHERE subjectno = (
SELECT subjectno FROM `subject` WHERE subjectname = '数据库结构-1'
)
ORDER BY `studentresult` DESC
--方式1.使用连接查询
SELECT `studentno`,su.`subjectno`,`studentresult`
FROM `result` AS re
INNER JOIN `subject` AS su
ON re.subjectno=su.subjectno
WHERE subjectname = '数据库结构-1'
ORDER BY `studentresult` DESC
--方式2.使用子查询() 由里及外 进行查询
SELECT `studentno`,`subjectno`,`studentresult`
FROM `result` AS re
WHERE subjectno = (
SELECT subjectno FROM `subject` WHERE subjectname = '数据库结构-1'
)
ORDER BY `studentresult` DESC
事务
事务原则:ACID原则:原子性,一致性,隔离性,持久性 (脏读,幻读,不可重复读)
===============事务==============
--mysql 是默认开启事务自动提交的
SET autocommit =0 --关闭事务自动提交
SET autocommit =1 --开启(默认)
--手动处理事务
--事务开启
START TRANSACTION --标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT xx
INSERT xx
--提交:持久化(成功)
COMMIT
--回滚:回到原来的样子(失败)
ROLLBACK
--事务结束
SET autocommit=1 --开启自动提交
SAVEPOINT 保存点名 --设置一个事务的保存点
ROLLBACK TO SAVEPOINT --回滚到保存点
RELEASE SAVEPOINT --删除保存点
--mysql 是默认开启事务自动提交的
SET autocommit =0 --关闭事务自动提交
SET autocommit =1 --开启(默认)
--手动处理事务
--事务开启
START TRANSACTION --标记一个事务的开始,从这个之后的sql都在同一个事务内
INSERT xx
INSERT xx
--提交:持久化(成功)
COMMIT
--回滚:回到原来的样子(失败)
ROLLBACK
--事务结束
SET autocommit=1 --开启自动提交
SAVEPOINT 保存点名 --设置一个事务的保存点
ROLLBACK TO SAVEPOINT --回滚到保存点
RELEASE SAVEPOINT --删除保存点
0 条评论
下一页
为你推荐
查看更多