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