mysql笔记-第6天

合集下载

计算机二级数据库MySQL

计算机二级数据库MySQL

计算机二级MySQL 数据库笔记1、在需求分析阶段可以使用的工具有数据流图DFD、数据字典DD、判定树与判定表。

2、对象有如下一些基本特点:标示唯一性、分类性、多态性、封装性、模块独立性好。

3、具有相同码的关系模式可以合并。

一个联系转换为一个关系模式,与该联系相连的的各实体的码以及联系的属性转换为关系的属性。

一个1:n的联系可以转换为一个独立的关系模式,也可以与n端对应的关系模式合并。

三个实体间一个联系可以转换为一个关系模式。

4、联系可以有自己的属性,联系不仅存在于两个实际之间,也可以存在于多个实体之间,如实体分别是售货员、顾客、商品、联系销售、两个实体型之间的联系课分为1:1、1:n、m:n。

通常使用E-R图建立数据库的概念模型。

5、使用Union时,必须满足字段的类型和个数必须相同。

Union中不能使用order by。

6、Alter table命令中使用modify,用于修改某些列的数据类型。

Alter table语句用于在已有的表中添加。

修改。

或删除列,也可以改字段的默认值,改表名。

7、数据流图中带箭头的的线段表示的是数据流,即沿箭头方向传送数据的通道,一般在旁边标注数据流名。

流程图中带箭头的线段表示的控制流。

8、视图不可创建索引。

视图是数据库数据的特定子集,可以和表一起使用。

(1)如果视图中有一个基本关系的简单查询生成,而且他还包含了基本关系中的主关键字或候选关键字,则可以通过这个视同进行更新操作。

(2)不允许对涉及多个基本关系的视图经行更新。

(3)如果视图的生成中涉及到聚集或是分组操作,则不允许通过这个视图进行更新。

视图中包含分组或聚合的语句就不允许进行更新修改。

9、PhpAdmin是在php环境下管理mysql数据库的工具,是一款功能强大的mysql页面管理工具。

Avivat是一套快速、可靠并价格相宜的数据库图形管理工具,专为简化数据库的管理及降低系统的管理成本而设。

Workbench是操作数据库的界面环境。

mysql常用时间列表的查询——七天内、本月、本周、某天

mysql常用时间列表的查询——七天内、本月、本周、某天

mysql常⽤时间列表的查询——七天内、本⽉、本周、某天最近七天的⽇期列表SELECT @s :=@s + 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := -1) tempWHERE @s < 6ORDER BY 'date'⼀天24⼩时查询(0 - 23)1. SELECT @d := @d + 1 `hour`2. FROM mysql.help_topic,(SELECT @d := -1) temp3. WHERE @d < 23ORDER BY `hour本周⽇期列表SELECT @a :=@a + 1 as `index`, DATE(ADDDATE(CURRENT_DATE, INTERVAL @a DAY)) AS `date`FROM mysql.help_topic,(SELECT @a := 0) tempWHERE @a < 6 - WEEKDAY(CURRENT_DATE)UNIONSELECT @s :=@s - 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := WEEKDAY(CURRENT_DATE) + 1) tempWHERE @s > 0ORDER BY `date`本⽉⽇期列表SELECT @a :=@a + 1 as `index`, DATE(ADDDATE(CURRENT_DATE, INTERVAL @a DAY)) AS `date`FROM mysql.help_topic,(SELECT @a := 0) tempWHERE @a < DAY(LAST_DAY(CURRENT_DATE)) - DAY(CURRENT_DATE)UNIONSELECT @s :=@s - 1 as `index`, DATE(DATE_SUB(CURRENT_DATE, INTERVAL @s DAY)) AS `date`FROM mysql.help_topic,(SELECT @s := day(CURRENT_DATE)) tempWHERE @s > 0ORDER BY `date`有了上⾯⼏张临时表,解决时间段缺失的问题就简单了。

Mysql时间操作(当天,昨天,7天,30天,半年,全年,季度)

Mysql时间操作(当天,昨天,7天,30天,半年,全年,季度)

Mysql时间操作(当天,昨天,7天,30天,半年,全年,季度)1、查看当天⽇期select current_date();2、查看当天时间select current_time();3、查看当天时间⽇期select current_timestamp();4、查询当天记录select*from表名where to_days(时间字段名) = to_days(now());5、查询昨天记录SELECT*FROM表名WHERE TO_DAYS( NOW( ) ) – TO_DAYS( 时间字段名) <=16、查询7天的记录SELECT*FROM表名where DATE_SUB(CURDATE(), INTERVAL 7DAY) <= date(时间字段名)7、查询近30天的记录SELECT*FROM表名where DATE_SUB(CURDATE(), INTERVAL 30DAY) <= date(时间字段名)8、查询本⽉的记录SELECT*FROM表名WHERE DATE_FORMAT( 时间字段名, ‘%Y%m’ ) = DATE_FORMAT( CURDATE( ) , ‘%Y%m’ )9、查询上⼀⽉的记录SELECT*FROM表名WHERE PERIOD_DIFF( date_format( now( ) , ‘%Y%m’ ) , date_format( 时间字段名, ‘%Y%m’ ) ) =110、查询本季度数据select*from表名where QUARTER(create_date)=QUARTER(now());11、查询上季度数据select*from表名where QUARTER(create_date)=QUARTER(DATE_SUB(now(),interval 1 QUARTER));12、查询本年数据select*from表名where YEAR(create_date)=YEAR(NOW());13、查询上年数据select*from表名where year(create_date)=year(date_sub(now(),interval 1year));14、查询当前这周的数据SELECT*FROM表名WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now());15、查询上周的数据SELECT*FROM表名WHERE YEARWEEK(date_format(submittime,'%Y-%m-%d')) = YEARWEEK(now())-1;16、查询当前⽉份的数据select*from表名where date_format(submittime,'%Y-%m')=date_format(now(),'%Y-%m')17、查询距离当前现在6个⽉的数据select name,submittime from enterprise where submittime between date_sub(now(),interval 6month) and now();。

宋红康mysql高级篇笔记

宋红康mysql高级篇笔记

宋红康mysql高级篇笔记MySQL 是一款广泛应用于互联网领域的关系型数据库管理系统。

它的高级功能和优势使得它成为互联网开发者的首选。

本文将分享一些关于 MySQL 高级篇的笔记,涵盖了一些互联网技术介绍、互联网商业和技术应用方面的内容。

一、索引优化索引是提高数据库查询效率的重要手段之一。

在 MySQL 中,使用合适的索引可以显著提升查询性能。

首先,我们需要了解不同类型的索引,如主键索引、唯一索引和普通索引等。

其次,根据具体应用场景,我们可以使用覆盖索引、前缀索引、联合索引等技术进行索引优化。

此外,我们还要注意索引的维护和管理,及时进行索引的重建和优化。

二、查询优化在互联网应用中,查询是最常见的数据库操作之一。

如何编写高效的查询语句,能够快速地获取所需的数据,是每个开发者都应该关注的问题。

本节将介绍一些查询优化的技巧,例如避免使用通配符查询、合理使用 LIMIT 关键字、使用 EXPLAIN 分析查询执行计划等。

三、事务管理事务是保证数据库操作一致性和完整性的重要手段。

MySQL 支持事务的 ACID 特性,可以确保多个操作的原子性、一致性、隔离性和持久性。

本节将详细介绍如何使用事务管理,包括事务的开启、提交和回滚,以及事务并发控制的方法。

四、高级数据操作除了基本的增删改查操作,MySQL 还提供了一些高级数据操作功能,方便开发者完成复杂的数据处理任务。

本节将介绍如何使用子查询、联合查询、分组查询和多表操作等技术,实现更灵活和高效的数据操作。

五、存储引擎选择MySQL 支持多种存储引擎,如 InnoDB、MyISAM、Memory 等。

不同的存储引擎具有不同的特点和适用场景。

本节将比较各种存储引擎的优缺点,并给出存储引擎选择的建议。

六、高可用性和容灾备份在互联网应用中,数据库的高可用性和容灾备份是非常重要的。

本节将介绍如何使用主从复制、读写分离、故障转移和数据备份等技术,提高数据库的稳定性和可用性。

《快速念咒:MySQL入门指南与进阶实战》笔记

《快速念咒:MySQL入门指南与进阶实战》笔记

《快速念咒:MySQL入门指南与进阶实战》阅读记录1. 第一章数据库基础在开始学习MySQL之前,了解一些数据库的基础知识是非常重要的。

数据库是一个用于存储和管理数据的计算机软件系统,它允许用户通过关键字或特定的查询语言来检索、更新和管理数据。

在数据库中,数据是以表格的形式进行组织的,每个表格都包含了一组相关的数据项,这些数据项被称为记录。

表(Table):表是数据库中存储数据的基本单位。

每个表都有一个唯一的名称,并由行(Row)和列(Column)组成。

每一行代表一个数据记录,每一列代表一个特定的数据属性。

字段(Field):字段是表中的一列,代表了数据的一种属性。

每个字段都有一个唯一的名称和一个数据类型,用于定义该字段可以存储的数据种类。

主键(Primary Key):主键是表中的一个特殊字段,用于唯一标识表中的每一行记录。

主键的值必须是唯一的,且不能为NULL。

外键(Foreign Key):外键是一个表中的字段,它的值引用了另一个表的主键值。

外键用于建立两个表之间的联系,确保引用完整性。

索引(Index):索引是一种数据库优化技术,用于提高查询性能。

通过创建索引,数据库可以更快地定位到表中的特定记录,而不必扫描整个表。

SQL(Structured Query Language):SQL是用于与数据库进行交互的编程语言。

它包括用于数据查询、插入、更新和删除的操作符和语法结构。

理解这些基本概念是学习MySQL的前提。

通过掌握SQL语言的基本语法和操作,你将能够有效地管理和操作数据库中的数据。

在接下来的章节中,我们将深入探讨MySQL的具体应用,包括如何创建和管理数据库、表、以及如何执行复杂的查询操作。

2. 第二章数据库设计《快速念咒:MySQL入门指南与进阶实战》是一本全面介绍MySQL 数据库的书籍,其中第二章详细阐述了数据库设计的基础知识和实践技巧。

在这一章节中,作者首先介绍了数据库设计的基本概念和目标,包括数据模型、实体关系模型(ER模型)等,并解释了如何通过这些模型来描述现实世界中的数据和业务逻辑。

MySQL数据库学习笔记

MySQL数据库学习笔记

MySQL数据库学习笔记数据库 DDL: 数据定义语⾔, 包含数据库和表相关的操作(MySQL中保存数据需要先建库再建表,最后把数据保存到表中) DML: 数据操作语⾔, 包含增删改查相关的SQL DQL: 数据查询语⾔, 只包含查询相关的SQL TCL: 事务控制语⾔, 包括和事务相关的SQL DCL: 数据控制语⾔, 包括⽤户管理及权限分配相关的SQLDDL数据定义语⾔ 数据库相关SQL 1. 查询所有数据库 show databases; 2. 创建数据库 格式: create database 数据库名; 指定字符集格式: create database 数据库名 character set utf8/gbk; 举例: create database db1; create database db2 character set utf8; create database db3 character set gbk; show databases; 3. 查询数据库详情 格式: show create database 数据库名; 举例: show create database db1; show create database db2; show create database db3; 4. 删除数据库 格式: drop database 数据库名; drop database db3; 5. 使⽤数据库必须使⽤了某个数据库之后才能执⾏表和数据相关的SQL 格式: use 数据库名; use db1; 表相关SQL 操作表相关的SQL 必须使⽤了某个数据库之后再操作use db1; 1. 创建表 格式: create table 表名(字段1名类型,字段2名类型); 指定字符集格式: create table 表名(字段1名类型,字段2名类型) charset=utf8/gbk; 举例: create table person (name varchar(20),age int); create table student(name varchar(20),score int) charset=utf8; create table car(name varchar(20),price int) charset=gbk; 2. 查询所有表 格式: show tables; 3. 查询表详情 格式: show create table 表名 举例: show create table person; 4. 查看表字段 格式: desc 表名; 举例: desc student; 5. 删除表 格式: drop table 表名 举例: drop table car; 表相关SQL(续) use db1; 1. 修改表名格式: rename table 原名 to 新名; rename table student to stu; 2. 添加表字段 最后添加格式: alter table 表名 add 字段名类型; 最前⾯添加个格式: alter table 表名 add 字段名类型 fifirst; xxx字段后⾯添加格式: alter table 表名 add 字段名类型 after xxx; 举例: alter table person add gender varchar(5); //最后⾯ alter table person add id int fifirst; //最前⾯ alter table person add salary int after name;//name后⾯ 3. 删除表字段 格式: alter table 表名 drop 字段名; alter table person drop salary; 4. 修改表字段 格式: alter table 表名 change 原名新名新类型; alter table person change gender salary int;DML数据操作语⾔(数据相关SQL语句) 1. 插⼊数据 全表插⼊格式: insert into 表名 values(值1,值2); 值的数量和表字段⼀致 批量插⼊格式: insert into 表名 values(值1,值2),(值1,值2),(值1,值2); 举例: insert into person values("Tom",18); //全表插⼊ insert into person(name) values("Jerry"); //指定字段插⼊ insert into person values("AAA",10),("BBB",20), ("CCC",30); 中⽂问题: insert into person values("刘德华",30); 如果执⾏上⾯包含中⽂的SQL 报以下错误执⾏ set names gbk; 2. 查询数据 格式: select 字段信息 from 表名 where 条件; 举例: select name from person; //查询表中所有的名字 select name,age from person; //查询表中所有名字和年龄 select * from person; //查询表中所有数据的所有字段信息 select * from person where age>20; //查询年龄⼤于20岁的信息 select * from person where name='Tom'; //查询Tom的信息 3. 修改数据 格式: update 表名 set xxx=xxx,xxx=xxx where 条件; 举例: update person set age=8 where name='Jerry'; update person set name="张学友",age=50 where name="刘德华"; update person set age=15 where age<20; 4. 删除数据 格式: delete from 表名 where 条件; 举例: delete from person where name='Tom'; delete from person where age<20; delete from person; 约束* 概念:对表中的数据进⾏限定,保证数据的正确性、有效性和完整性。

(转)MySQL学习笔记-redolog和binlog两阶段提交

(转)MySQL学习笔记-redolog和binlog两阶段提交

(转)MySQL学习笔记-redolog和binlog两阶段提交原⽂:https:///qq_38937634/article/details/113100472?utm_term=mysql%E6%97%A5%E5%BF%97%E4%B8%A4%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~sobaiduweb~default-2-113100472&spm=3001.4430⽂章⽬录MySQL学习笔记-redo log 和 binlog&两阶段提交1.笔记图2.⼀条更新语句是如何被执⾏的3.redo log4.binlog5.为什么要有两份⽇志?6.更新语句内部执⾏流程7.两阶段提交MySQL学习笔记-redo log 和 binlog&两阶段提交前⾯学习了⼀条查询语句的执⾏过程⼀般是经过连接器、分析器、优化器、执⾏器等功能模块,最后到达存储引擎,⽽⼀条更新语句的执⾏流程也会按照查询查询语句的流程⾛⼀遍,但更新语句会涉及到两个⽇志模块,分别是 redo log 和 binlog,这篇⽂章学习⼀下这两个⽇志的作⽤。

1.笔记图2.⼀条更新语句是如何被执⾏的连接器:负责跟客户端建⽴连接、获取权限、维持和管理连接分析器:词法分析:识别出 SQL 语句⾥⾯的字符串分别代表什么,把 SQL 语句中字符串 T 识别成“表名 T,把字符串 ID 识别成列 ID语法分析:根据词法分析的结果,语法分析器会根据语法规则,判断你输⼊的这个 SQL 语句是否满⾜ MySQL 语法优化器:优化器是在表⾥⾯有多个索引的时候,决定使⽤哪个索引,或者在⼀个语句有多表关联(join)的时候,决定各个表的连接顺序执⾏器:调⽤存储引擎提供的接⼝3.redo logWAL(Write-Ahead Logging):先写⽇志,再写磁盘当有记录需要更新时,InnoDB 引擎就会先把记录写到 redo log,并更新内存,这时更新就算完成InnoDB 的 redo log 是固定⼤⼩的,可以配置为⼀组 4 个⽂件,每个⽂件的⼤⼩是 1GB,从头开始写,写到末尾就⼜回到开头循环写Tips:write pos 表⽰当前记录的位置,写到第 3 号⽂件末尾后就回到 0 号⽂件开头,checkpoint 表⽰当前要擦除的位置,擦除记录前要把记录更新到数据⽂件如果 write pos 追上 checkpoint,表⽰ redo log 满了,这时不能再执⾏新的更新,得停下来先擦掉⼀些记录,把 checkpoint 推进⼀下crash-safe:InnoDB 就可以保证即使数据库发⽣异常重启,之前提交的记录都不会丢失4.binlogMySQL Server 层也有⾃⼰的⽇志,称为归档⽇志(binlog),binlog ⽇志只能⽤于归档redo log 是 InnoDB 引擎特有的,binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使⽤redo log 是物理⽇志,记录的是在某个数据页上做了什么修改,binlog 是逻辑⽇志,记录的是这个语句的原始逻辑,⽐如给 ID=2 这⼀⾏的 c 字段加 1redo log 是循环写的,空间固定会⽤完,binlog 是可以追加写⼊的,binlog ⽂件写到⼀定⼤⼩后会切换到下⼀个,并不会覆盖以前的⽇志5.为什么要有两份⽇志?最开始 MySQL ⾥并没有 InnoDB 引擎,MyISAM 没有 crash-safe 的能⼒,binlog ⽇志只能⽤于归档InnoDB 是另⼀个公司以插件形式引⼊ MySQL 的,使⽤另外⼀套⽇志系统 redo log 来实现 crash-safe 能⼒6.更新语句内部执⾏流程update T set c=c+1 where ID=2执⾏器先找引擎取 ID=2 这⼀⾏,ID 是主键,引擎直接⽤树搜索找到这⼀⾏,如果 ID=2 这⼀⾏所在的数据页本来就在内存中,就直接返回给执⾏器,否则,需要先从磁盘读⼊内存,然后再返回执⾏器拿到引擎给的⾏数据,把这个值加上 1,⽐如原来是 N,现在就是 N+1,得到新的⼀⾏数据,再调⽤引擎接⼝写⼊这⾏新数据引擎将这⾏新数据更新到内存中,同时将这个更新操作记录到 redo log ⾥⾯,此时 redo log 处于 prepare 状态。

Mysql笔记(附Mysql基础书pdf版)

Mysql笔记(附Mysql基础书pdf版)

Mysql笔记(附Mysql基础书pdf版)资料数据库篇SHOW DATABASES; //显⽰数据库系统中已经存在的数据库CREATE DATABASE 数据库名; //创建数据库DROP DATABASE 数据库名; //删除数据库表篇注:在使⽤操作表语句前,⾸先要使⽤USE语句选择数据库。

选择数据库语句的基本格式为“USE 数据库名”。

否则会报错,1046;CREATE TABLE 表名 ( 属性名数据类型 [完整性约束条件],属性名数据类型 [完整性约束条件],属性名数据类型);表名不能为SQL语句的关键字,⼀个表可以有多个属性。

定义时,字母⼤⼩写均可,各属性之间⽤逗号隔开,最后⼀个属性不需要加逗号。

主键主键有唯⼀值单字段主键属性名数据类型 primary key //创建主键,写在属性名数据类型后⾯;多字段主键primary key(属性名 1,属性名2,属性名n)两者的组合可以确定唯⼀的⼀条记录;外键外键不⼀定必须为⽗表的主键,但必须是唯⼀性索引,主键约束和唯⼀性约束都是唯⼀性索引;外键可以为空值;设置外键的基本语法规则如下:CONSTRAINT 外键别名 FOREIGN KEY(属性 1.1,属性1.2,属性1.n)REFERENCES 表名(属性2.1,属性2.2,属性2.n)其中,“外键别名”参数是为外键的代号;“属性1”参数列表是⼦表中设置的外键;“表名”参数是指⽗表的名称;“属性2”参数列表是⽗表的主键。

设置表的⾮空约束设置表的唯⼀性约束设置表的属性值⾃动增加查看表结构DESCRIBE 表名; // 查看表基本结构语句,可缩写为desc 表名SHOW CREATE TABLE 表名; //查看表详细结构语句(包含存储引擎、字符编码)删除表DROP TABLE 表名;//删除没有被关联的普通表删除⽗表需要先将外键删除,然后才能去删除⽗表。

字段篇//通过ALTER TABLE语句ALTER TABLE 旧表名 RENAME [TO] 新表名;//修改表名 TO参数是可选参数,是否在语句中出现不会影响语句的执⾏。

一千行MySQL学习笔记(20200629144852)

一千行MySQL学习笔记(20200629144852)

千行MySQL学习笔记/* 启动MySQL */net start mysql/*连接与断开服务器*/mysql -h地址-P端口-u用户名-p密码/*跳过权限验证登录MySQL */mysqld --skip-grant-tables--修改root密码密码加密函数password。

update mysql. user set password = password( 'root');SHOW PROCESSLIST --显示哪些线程正在运行SHOW VARIABLES --/*数据库操作*/ -------------------------查看当前数据库select database ();--显示当前时间、用户名、数据库版本select now(), user (), version();--创建库create database [ if not exists] 数据库名数据库选项创建数据库最简单的方式CREATE DATABASE my_db;或者是CREATE DATABASE IF NOT EXISTS my_db;创建utf8编码的数据库CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_ge neral_ci; 那么在这个数据库下创建的所有数据表的默认字符集都会是utf8 了,注意后面这句话 "COLLATE utf8_ge neral_ci", 大致意思是在排序时根据 utf8变码格式来排序 查看数据库列表show databases;使用数据库use my_db;查看数据库默认编码show variables like 'character_set_%'修改数据库编码alter database my_db character set lat in1;删除数据库drop database my_db; | Variable_ name + ------------------------- +--| Value | ------------------- +| character_set_clie nt | utf8 || character_set_c onn ecti on | utf8 || character_set_database | lat in1 || character_set_filesystem | binary || character_set_results | utf8 || character_set_server | lat in1 || character_set_system | utf8 || character_sets_dir | /usr/local/mysql-5.5.28-linux2. 6-i686/share/charsets/ + + +可以看到 character_set_database 是 lantin1.或者是drop database IF EXISTS my_db;数据库选项:CHARACTER SET charset_nameCOLLATE collation_name--查看已有库show databases [ like 'pattern']--查看当前库信息show create database 数据库名--修改库的选项信息alter database 库名选项信息--删除库drop database [ if exists] 数据库名同时删除该数据库相关的目录及其目录内容/*表的操作*/ -------------------------创建表create [temporary] table [ if not exists][库名.]表名(表的结构定义)[表选项] 每个字段必须有数据类型最后一个字段后不能有逗号temporary 临时表,会话结束时表自动消失对于字段的定义:字段名数据类型[NOT NULL | NULL] [DEFAULT default_value] [AUTO」NCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] --表选项-- 字符集CHARSET = charset_name如果表没有设定,则使用数据库字符集-- 存储引擎ENGINE = engine_name表在管理数据时采用的不同的数据结构,结构不同会导致处理方式、提供的特性操作等不同常见的引擎:InnoDB MyISAM Memory /Heap BDB Merge Example CSV MaxDB Archive不同的引擎在保存表的结构和数据时采用不同的方式MyISAM 表文件含义:.frm 表定义,.MYD 表数据,.MYI 表索引InnoDB 表文件含义:.frm 表定义,表空间数据和日志文件SHOW ENGINES -- 显示存储引擎的状态信息SHOW ENGINE 引擎名{LOGS|STATUS} -- 显示存储引擎的日志或状态信息-- 数据文件目录DATA DIRECTORY = '目录'-- 索引文件目录INDEX DIRECTORY = '目录'-- 表注释COMMENT = 'string'-- 分区选项PARTITION BY ... (详细见手册)-- 查看所有表SHOW TABLES [ LIKE 'pattern']SHOW TABLES FROM 表名-- 查看表机构SHOW CREATE TABLE 表名 (信息更详细)DESC 表名 / DESCRIBE 表名 / EXPLAIN 表名 / SHOW COLUMNS FROM 表名 [LIKE 'PATTERN'] SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']-- 修改表-- 修改表本身的选项ALTER TABLE 表名 表的选项EG: ALTER TABLE 表名 ENGINE = MYISAM;-- 对表进行重命名RENAME TABLE 原表名 TO 新表名RENAME TABLE 原表名 TO 库名 .表名(可将表移动到另一个数据库)-- RENAME 可以交换两个表名-- 修改表的字段机构 ALTER TABLE 表名 操作名-- 操作名ADD UNIQUE [索引名 ] (字段名 )-- 创建唯一索引INDEX [索引名 ] (字段名 ) -- 创建普通索引ADDADD [ COLUMN] 字段名-- 增加字段 AFTER 字段名 表示增加在该字段名后面FIRST 表示增加在第一个 ADD PRIMARY KEY (字段名) -- 创建主键ADD DROP[ COLUMN] 字段名 -- 删除字段MODIFY [ COLUMN] 字段名 字段属性-- 支持对字段属性进行修改,不能修改字段名(所有原有属性也需写上)DROP PRIMARY KEY -- 删除主键(删除主键前需删除其AUTO_INCREMENT 属性)DROP INDEX 索引名-- 删除索引DROP FOREIGN KEY 外键-- 删除外键-- 删除表DROP TABLE[ IF EXISTS] 表名...-- 清空表数据TRUNCATE [TABLE] 表名-- 复制表结构CREATE TABLE 表名LIKE 要复制的表名-- 复制表结构和数据CREATE TABLE 表名[AS] SELECT* FROM 要复制的表名-- 检查表是否有错误CHECK TABLE tbl_name [, tbl_name] ... [option] ...-- 优化表OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ...-- 修复表REPAIR [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... [QUICK] [EXTENDED] [USE_FRM]-- 分析表ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] .../* 数据操作*/ ---------------------- 增INSERT [INTO] 表名[(字段列表)] VALUES (值列表)[, (值列表), ...] -- 如果要插入的值列表包含所有字段并且顺序一致,则可以省略字段列表-- 可同时插入多条数据记录!REPLACE 与INSERT 完全一样,可互换。

mysql数据库基础知识笔记

mysql数据库基础知识笔记

MySQL是一种关系型数据库管理系统,它使用结构化查询语言(SQL)来进行数据管理和查询。

以下是MySQL数据库的基础知识笔记:
数据库:一组相关数据的集合。

表:存储在数据库中的数据组织形式。

列:表中的一个字段,定义了该列所存储的数据类型。

行:表中的一条记录,由多个列组成。

主键:唯一标识表中每一行的特定列。

外键:一个表中的列,与另一个表中的主键建立连接关系,用于保证数据完整性和减少数据冗余。

索引:为了提高查询效率而创建的数据结构,可以根据索引快速搜索和查找数据。

关系型数据库:以表格形式存储数据,通过关联不同表之间的主键和外键来建立关系。

非关系型数据库:将数据以文档、键值对或图形等方式存储,适用于分布式、非结构化数据场景。

SQL语句:用于对MySQL数据库进行查询、插入、更新和删除操作的编程语言,包括SELECT、INSERT、UPDATE、DELETE等命令。

MySql课堂笔记

MySql课堂笔记

9.92多表连接语法
内连接
SELECT [DISTINCT] *|[列名 别名,…]
FROM 主表名 别名,从表名 别名
WHERE 主表名.列名=从表名.列名 AND WHERE过滤条件;
左连接
SELECT [DISTINCT] *|[列名 别名,…]
FROM 主表名 别名,从表名 别名
使用表别名,可以简化语句。
内连接分类
等值连接:在连接条件中使用等号(=)运算符来比较被连接列的列值
连接条件的列名相同时,可以使用USING (列名)来简化。
非等值连接:在连接条件中使用除等号运算符以外的其它比较运算符来比较被连接的列的列值。
!=、>、>=、<、<=、LIKE、BETWEEN AND、
ANY和ALL必须组合=、!=、>、>=、<、<=来使用。
=ANY:与IN操作符相同
>ANY:比列表中最小值更大
<ANY:比列表中最大值更小
>ALL:比列表中最大值还要大
<ALL:比列表中最小值还要小
多列子查询:子查询的结果中也可以返回多列。
可以把子查询返回的结果当作一张新表的数据来使用。
其中JOIN_TYPE代表连接的类型:有内连接、外连接、交叉连接、自连接
7.内连接
语法:
SELECT [DISTINCT] *|[列名 别名,…]
FROM 主表名 别名
[INNER] JOIN 从表名 别名 ON 连接条件
[WHERE 条件];
列出所有连接表中与连接条件相匹配的数据行。
分类:
左外连接(LEFT [OUTER] JOIN)

MySql经典笔记

MySql经典笔记

好久没有整理东西,感觉自己越来越懒,正好近期有个MYSQL的项目(一个ORACLE 的应用迁移到MYSQL),以前没有接触过MYSQL,但是也知道MYSQL数据库目前广泛的应用在各种个人、商务系统中,各种技术都比较成熟。

把自己学习的一些过程总结一下,该文章设计到的内容都没有做太详细的阐述,只是一个简单的入门手册,如果想看更多内容可以参看MYSQL的联机手册。

--zhouwf07262007-06-5第一章MYSQL安装MYSQL命令规则介绍:MySQL的命名机制使用由3个数字和一个后缀组成的版本号。

例如,像mysql-5.0.27-beta的版本号这样解释:第1个数字(5)是主版本号,描述了文件格式。

所有版本5的发行都有相同的文件格式。

第2个数字(0)是发行级别。

主版本号和发行级别组合便构成了发行序列号。

第3个数字(9)是在此发行系列的版本号,随每个新分发版递增。

通常你需要已经选择的发行(release)的最新版本(版本)。

MYSQL安装:先下载安装包(MySQL AB编译的MySQL二进制版本):n32.zip下载了2个版本:一个5.0.27安装版;一个6.0.0非安装版。

本人测试用的为5.0.27安装版,安装过程不再赘述。

各个操作系统平台的安装可以看MYSQL联机文档。

安装后文件布局:在Windows中,MySQL 5.1的默认安装目录是C:\Program Files\MySQL\MySQL Server 5.1。

(一些Windows用户宁愿安装到原来的默认安装目录 C:\mysql。

然而,子目录布局仍然相同)。

安装目录包括以下子目录:第二章登录与一些基本操作本章的主要目的是让我们对MYSQL的基础框架有个大概的了解。

1连接与断开MYSQL服务器安装完毕登陆MYSQL(有过一些其他数据库基础的人都应该很容易使用这几步):我们可以利用如下参数查看MYSQL命令的帮助:C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql –help联接MYSQL服务器:C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -h localhost -uroot -p888888Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 22 to serverType 'help;' or '\h' for help. Type '\c' to clear the buffer.mysql> SHOW DATABASES;+--------------------+| Database |+--------------------+| information_schema || mysql || root |+--------------------+3 rows in set (0.08 sec)安装完毕,都会有这几个默认的数据库。

mysql复习笔记-by燕十八

mysql复习笔记-by燕十八

mysql复习一:复习前的准备1:确认你已安装wamp2:确认你已安装ecshop,并且ecshop的数据库名为shop二基础知识:1.数据库的连接mysql -u -p -h-u 用户名-p 密码-h host主机2:库级知识2.1 显示数据库: show databases;2.2 选择数据库: use dbname;2.3 创建数据库: create database dbname charset utf8;2.3 删除数据库: drop database dbname;3: 表级操作:3.1 显示库下面的表show tables;3.2 查看表的结构:desc tableName;3.3 查看表的创建过程:show create table tableName;3.4 创建表:create table tbName (列名称1列类型[列参数][not null default ],....列2.......列名称N列类型[列参数][not null default ])engine myisam/innodb charset utf8/gbk3.4的例子:create table user (id int auto_increment,name varchar(20) not null default '',age tinyint unsigned not null default 0,index id (id))engine=innodb charset=utf8;注:innodb是表引擎,也可以是myisam或其他,但最常用的是myisam和innodb,charset 常用的有utf8,gbk;3.5 修改表3.5.1 修改表之增加列:alter table tbNameadd 列名称1列类型[列参数][not null default ]#(add之后的旧列名之后的语法和创建表时的列声明一样)3.5.2 修改表之修改列alter table tbNamechange 旧列名新列名列类型[列参数][not null default ](注:旧列名之后的语法和创建表时的列声明一样)3.5.3 修改表之减少列:alter table tbNamedrop 列名称;3.5.4 修改表之增加主键alter table tbName add primary key(主键所在列名);例:alter table goods add primary key(id)该例是把主键建立在id列上3.5.5 修改表之删除主键alter table tbName drop primary key;3.5.6 修改表之增加索引alter table tbName add [unique|fulltext] index 索引名(列名);3.5.7 修改表之删除索引alter table tbName drop index 索引名;3.5.8 清空表的数据truncate tableName;4:列类型讲解列类型:整型:tinyint (0~255/-128~127) smallint (0~65535/-32768~32767) mediumint int bigint (参考手册11.2)参数解释:unsigned 无符号(不能为负) zerofill 0填充M 填充后的宽度举例:tinyint unsigned;tinyint(6) zerofill;数值型浮点型:float double格式:float(M,D) unsigned\zerofill;字符型char(m) 定长varchar(m)变长text列实存字符i 实占空间利用率char(M) 0<=i<=M M i/m<=100%varchar(M) 0<=i<=M i+1,2 i/i+1/2<100%year YYYY 范围:1901~2155. 可输入值2位和4位(如98,2012)日期时间类型date YYYY-MM-DD 如:2010-03-14time HH:MM:SS 如:19:26:32datetime YYYY-MM-DD HH:MM:SS 如:2010-03-14 19:26:32timestamp YYYY-MM-DD HH:MM:SS 特性:不用赋值,该列会为自己赋当前的具体时间5:增删改查基本操作5.1 插入数据insert into 表名(col1,col2,……) values(val1,val2……); -- 插入指定列insert into 表名values (,,,,); -- 插入所有列insert into 表名values -- 一次插入多行(val1,val2……),(val1,val2……),(val1,val2……);5.3修改数据update tablenamesetcol1=newval1,col2=newval2,......colN=newvalNwhere 条件;5.4,删除数据delete from tablenaeme where 条件;5.5,select 查询(1)条件查询where a. 条件表达式的意义,表达式为真,则该行取出b. 比较运算符= ,!=,< > <= >=c. like , not like ('%'匹配任意多个字符,'_'匹配任意单个字符)in , not in , between andd. is null , is not null(2)分组group by一般要配合5个聚合函数使用:max,min,sum,avg,count(3)筛选having(4)排序order by(5)限制limit6: 连接查询6.1,左连接.. left join .. ontable A left join table B on tableA.col1 = tableB.col2 ;例句:select 列名from table A left join table B on tableA.col1 = tableB.col22. 右链接: right join3. 内连接: inner join左右连接都是以在左边的表的数据为准,沿着左表查右表.内连接是以两张表都有的共同部分数据为准,也就是左右连接的数据之交集.7 子查询where 型子查询:内层sql的返回值在where后作为条件表达式的一部分例句: select * from tableA where colA = (select colB from tableB where ...);from 型子查询:内层sql查询结果,作为一张表,供外层的sql语句再次查询例句:select * from (select * from ...) as tableName where ....8: 字符集客服端sql编码character_set_client服务器转化后的sql编码character_set_connection服务器返回给客户端的结果集编码character_set_results快速把以上3个变量设为相同值: set names 字符集存储引擎engine=1\21 Myisam 速度快不支持事务回滚2 Innodb 速度慢支持事务,回滚①开启事务start transaction②运行sql;③提交,同时生效\回滚commit\rollback触发器trigger监视地点:表监视行为:增删改触发时间:after\before触发事件:增删改创建触发器语法create trigger tgNameafter/before insert/delete/updateon tableNamefor each rowsql; -- 触发语句删除触发器:drop trigger tgName;索引提高查询速度,但是降低了增删改的速度,所以使用索引时,要综合考虑. 索引不是越多越好,一般我们在常出现于条件表达式中的列加索引.值越分散的列,索引的效果越好索引类型primary key主键索引index 普通索引unique index 唯一性索引fulltext index 全文索引综合练习:连接上数据库服务器创建一个gbk编码的数据库建立商品表和栏目表,字段如下:商品表:goodsgoods_id--主键,goods_name -- 商品名称cat_id -- 栏目idbrand_id -- 品牌idgoods_sn -- 货号goods_number -- 库存量shop_price -- 价格goods_desc--商品详细描述栏目表:categorycat_id --主键cat_name -- 栏目名称parent_id -- 栏目的父id建表完成后,作以下操作:删除goods表的goods_desc 字段,及货号字段并增加字段:click_count -- 点击量在goods_name列上加唯一性索引在shop_price列上加普通索引在clcik_count列上加普通索引删除click_count列上的索引对goods表插入以下数据:+----------+------------------------------+--------+----------+-----------+--------------+------------+-------------+| goods_id | goods_name | cat_id | brand_id | goods_sn | goods_number | shop_price | click_count |+----------+------------------------------+--------+----------+-----------+--------------+------------+-------------+| 1 | KD876 | 4 | 8 | ECS000000 | 10 | 1388.00 | 7 || 4 | 诺基亚N85原装充电器| 8 | 1 | ECS000004 | 17 | 58.00 | 0 || 3 | 诺基亚原装5800耳机| 8 | 1 | ECS000002 | 24 | 68.00 | 3 || 5 | 索爱原装M2卡读卡器| 11 | 7 | ECS000005 | 8 | 20.00 | 3 || 6 | 胜创KINGMAX内存卡| 11 | 0 | ECS000006 | 15 | 42.00 | 0 || 7 | 诺基亚N85原装立体声耳机HS-82 | 8 | 1 | ECS000007 | 20 | 100.00 | 0 || 8 | 飞利浦9@9v | 3 | 4 | ECS000008 | 17 | 399.00 | 9 || 9 | 诺基亚E66 | 3 | 1 | ECS000009 | 13 | 2298.00 | 20 || 10 | 索爱C702c | 3 | 7 | ECS000010 | 7 | 1328.00 | 11 || 11 | 索爱C702c | 3 | 7 | ECS000011 | 1 | 1300.00 | 0 || 12 | 摩托罗拉A810 | 3 | 2 | ECS000012 | 8 | 983.00 | 14 || 13 | 诺基亚5320 XpressMusic | 3 | 1 | ECS000013 | 8 | 1311.00 | 13 || 14 | 诺基亚5800XM | 4 | 1 | ECS000014 |4 | 2625.00 | 6 || 15 | 摩托罗拉A810 | 3 | 2 | ECS000015 | 3 | 788.00 | 8 || 16 | 恒基伟业G101 | 2 | 11 | ECS000016 | 0 | 823.33 | 3 || 17 | 夏新N7 | 3 | 5 | ECS000017 | 1 | 2300.00 | 2 || 18 | 夏新T5 | 4 | 5 | ECS000018 | 1 | 2878.00 | 0 || 19 | 三星SGH-F258 | 3 | 6 | ECS000019 | 0 | 858.00 | 7 || 20 | 三星BC01 | 3 | 6 | ECS000020 | 13 | 280.00 | 14 || 21 | 金立A30 | 3 | 10 | ECS000021 | 40 | 2000.00 | 4 || 22 | 多普达Touch HD | 3 | 3 | ECS000022 | 0 | 5999.00 | 15 || 23 | 诺基亚N96 | 5 | 1 | ECS000023 | 8 | 3700.00 | 17 || 24 | P806 | 3 | 9 | ECS000024 | 148 | 2000.00 | 36 || 25 | 小灵通/固话50元充值卡| 13 | 0 | ECS000025 | 2 | 48.00 | 0 || 26 | 小灵通/固话20元充值卡| 13 | 0 | ECS000026 | 2 | 19.00 | 0 || 27 | 联通100元充值卡| 15 | 0 | ECS000027 | 2 | 95.00 | 0 || 28 | 联通50元充值卡| 15 | 0 | ECS000028 | 0 | 45.00 | 0 || 29 | 移动100元充值卡| 14 | 0 | ECS000029 | 0 | 90.00 | 0 || 30 | 移动20元充值卡| 14 | 0 | ECS000030 | 9 | 18.00 | 1 || 31 | 摩托罗拉E8 | 3 | 2 | ECS000031 | 1 | 1337.00 | 5 || 32 | 诺基亚N85 | 3 | 1 | ECS000032 | 1 | 3010.00 | 9 |+----------+------------------------------+--------+----------+-----------+--------------+------------+-------------+三查询知识注:以下查询基于ecshop网站的商品表(ecs_goods)在练习时可以只取部分列,方便查看.1: 基础查询where的练习:查出满足以下条件的商品1.1:主键为32的商品select goods_id,goods_name,shop_pricefrom ecs_goodswhere goods_id=32;1.2:不属第3栏目的所有商品select goods_id,cat_id,goods_name,shop_price from ecs_goodswhere cat_id!=3;1.3:本店价格高于3000元的商品select goods_id,cat_id,goods_name,shop_price from ecs_goodswhere shop_price >3000;1.4:本店价格低于或等于100元的商品select goods_id,cat_id,goods_name,shop_price from ecs_goods where shop_price <=100;1.5:取出第4栏目或第11栏目的商品(不许用or)select goods_id,cat_id,goods_name,shop_price from ecs_goodswhere cat_id in (4,11);1.6:取出100<=价格<=500的商品(不许用and)select goods_id,cat_id,goods_name,shop_price from ecs_goodswhere shop_price between 100 and 500;1.7:取出不属于第3栏目且不属于第11栏目的商品(and,或not in分别实现)select goods_id,cat_id,goods_name,shop_price from ecs_goods where cat_id!=3 and cat_id!=11;select goods_id,cat_id,goods_name,shop_price from ecs_goods where cat_id not in (3,11);1.8:取出价格大于100且小于300,或者大于4000且小于5000的商品()select goods_id,cat_id,goods_name,shop_price from ecs_goods where shop_price>100 and shop_price <300 or shop_price >4000 and shop_price <5000;1.9:取出第3个栏目下面价格<1000或>3000,并且点击量>5的系列商品select goods_id,cat_id,goods_name,shop_price,click_count from ecs_goods wherecat_id=3 and (shop_price <1000 or shop_price>3000) and click_count>5;1.10:取出第1个栏目下面的商品(注意:1栏目下面没商品,但其子栏目下有)select goods_id,cat_id,goods_name,shop_price,click_count from ecs_goodswhere cat_id in (2,3,4,5);1.11:取出名字以"诺基亚"开头的商品select goods_id,cat_id,goods_name,shop_price from ecs_goods where goods_name like '诺基亚%';1.12:取出名字为"诺基亚Nxx"的手机select goods_id,cat_id,goods_name,shop_price from ecs_goodswhere goods_name like '诺基亚N__';1.13:取出名字不以"诺基亚"开头的商品select goods_id,cat_id,goods_name,shop_price from ecs_gooswhere goods_name not like '诺基亚%';1.14:取出第3个栏目下面价格在1000到3000之间,并且点击量>5 "诺基亚"开头的系列商品select goods_id,cat_id,goods_name,shop_price from ecs_goods wherecat_id=3 and shop_price>1000 and shop_price <3000 and click_count>5 and goods_name like '诺基亚%';select goods_id,cat_id,goods_name,shop_price from ecs_goods whereshop_price between 1000 and 3000 and cat_id=3 and click_count>5 and goods_name like '诺基亚%';一道面试题有如下表和数组把num值处于[20,29]之间,改为20num值处于[30,39]之间的,改为30mian表+------+| num |+------+| 3 || 12 || 15 || 25 || 23 || 29 || 34 || 37 || 32 || 45 || 48 || 52 |+------+练习题:把good表中商品名为'诺基亚xxxx'的商品,改为'HTCxxxx', 提示:大胆的把列看成变量,参与运算,甚至调用函数来处理. substring(),concat()2 分组查询group:2.1:查出最贵的商品的价格select max(shop_price) from ecs_goods;2.2:查出最大(最新)的商品编号select max(goods_id) from ecs_goods;2.3:查出最便宜的商品的价格select min(shop_price) from ecs_goods;2.4:查出最旧(最小)的商品编号select min(goods_id) from ecs_goods;2.5:查询该店所有商品的库存总量select sum(goods_number) from ecs_goods;2.6:查询所有商品的平均价select avg(shop_price) from ecs_goods;2.7:查询该店一共有多少种商品select count(*) from ecs_goods;2.8:查询每个栏目下面最贵商品价格最低商品价格商品平均价格商品库存量商品种类提示:(5个聚合函数,sum,avg,max,min,count与group综合运用)select cat_id,max(shop_price) from ecs_goods group by cat_id;3 having与group综合运用查询:3.1:查询该店的商品比市场价所节省的价格select goods_id,goods_name,market_price-shop_price as jfrom ecs_goods ;3.2:查询每个商品所积压的货款(提示:库存*单价)select goods_id,goods_name,goods_number*shop_price from ecs_goods3.3:查询该店积压的总货款select sum(goods_number*shop_price) from ecs_goods;3.4:查询该店每个栏目下面积压的货款.select cat_id,sum(goods_number*shop_price) as k from ecs_goods group by cat_id;3.5:查询比市场价省钱200元以上的商品及该商品所省的钱(where和having分别实现) select goods_id,goods_name,market_price-shop_price as k from ecs_goodswhere market_price-shop_price >200;select goods_id,goods_name,market_price-shop_price as k from ecs_goodshaving k >200;3.6:查询积压货款超过2W元的栏目,以及该栏目积压的货款select cat_id,sum(goods_number*shop_price) as k from ecs_goods group by cat_id having k>200003.7:where-having-group综合练习题有如下表及数据+------+---------+-------+| name | subject | score |+------+---------+-------+| 张三| 数学| 90 || 张三| 语文| 50 || 张三| 地理| 40 || 李四| 语文| 55 || 李四| 政治| 45 || 王五| 政治| 30 |+------+---------+-------+要求:查询出2门及2门以上不及格者的平均成绩## 一种错误做法mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2; +------+---+------------+| name | k | avg(score) |+------+---+------------+| 张三| 3 | 60.0000 || 李四| 2 | 50.0000 |+------+---+------------+2 rows in set (0.00 sec)mysql> select name,count(score<60) as k,avg(score) from stu group by name;+------+---+------------+| name | k | avg(score) |+------+---+------------+| 张三| 3 | 60.0000 || 李四| 2 | 50.0000 || 王五| 1 | 30.0000 |+------+---+------------+3 rows in set (0.00 sec)mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2; +------+---+------------+| name | k | avg(score) |+------+---+------------+| 张三| 3 | 60.0000 || 李四| 2 | 50.0000 |+------+---+------------+2 rows in set (0.00 sec)#加上赵六后错误暴露mysql> insert into stu-> values-> ('赵六','A',100),-> ('赵六','B',99),-> ('赵六','C',98);Query OK, 3 rows affected (0.05 sec)Records: 3 Duplicates: 0 Warnings: 0#错误显现mysql> select name,count(score<60) as k,avg(score) from stu group by name having k>=2; +------+---+------------+| name | k | avg(score) |+------+---+------------+| 张三| 3 | 60.0000 || 李四| 2 | 50.0000 || 赵六| 3 | 99.0000 |+------+---+------------+3 rows in set (0.00 sec)#正确思路,先查看每个人的平均成绩mysql> select name,avg(score) from stu group by name;+------+------------+| name | avg(score) |+------+------------+| 张三| 60.0000 || 李四| 50.0000 || 王五| 30.0000 || 赵六| 99.0000 |+------+------------+4 rows in set (0.00 sec)mysql> # 看每个人挂科情况mysql> select name,score < 60 from stu;+------+------------+| name | score < 60 |+------+------------+| 张三| 0 || 张三| 1 || 张三| 1 || 李四| 1 || 李四| 1 || 王五| 1 || 赵六| 0 || 赵六| 0 || 赵六| 0 |+------+------------+9 rows in set (0.00 sec)mysql> #计算每个人的挂科科目mysql> select name,sum(score < 60) from stu group by name;+------+-----------------+| name | sum(score < 60) |+------+-----------------+| 张三| 2 || 李四| 2 || 王五| 1 || 赵六| 0 |+------+-----------------+4 rows in set (0.00 sec)#同时计算每人的平均分mysql> select name,sum(score < 60),avg(score) as pj from stu group by name;+------+-----------------+---------+| name | sum(score < 60) | pj |+------+-----------------+---------+| 张三| 2 | 60.0000 || 李四| 2 | 50.0000 || 王五| 1 | 30.0000 || 赵六| 0 | 99.0000 |+------+-----------------+---------+4 rows in set (0.00 sec)#利用having筛选挂科2门以上的.mysql> select name,sum(score < 60) as gk ,avg(score) as pj from stu group by name having gk >=2;+------+------+---------+| name | gk | pj |+------+------+---------+| 张三| 2 | 60.0000 || 李四| 2 | 50.0000 |+------+------+---------+2 rows in set (0.00 sec)4: order by 与limit查询4.1:按价格由高到低排序select goods_id,goods_name,shop_price from ecs_goods order by shop_price desc;4.2:按发布时间由早到晚排序select goods_id,goods_name,add_time from ecs_goods order by add_time;4.3:接栏目由低到高排序,栏目内部按价格由高到低排序select goods_id,cat_id,goods_name,shop_price from ecs_goodsorder by cat_id ,shop_price desc;4.4:取出价格最高的前三名商品select goods_id,goods_name,shop_price from ecs_goods order by shop_price desc limit 3;4.5:取出点击量前三名到前5名的商品select goods_id,goods_name,click_count from ecs_goods order by click_count desc limit 2,3;5 连接查询5.1:取出所有商品的商品名,栏目名,价格select goods_name,cat_name,shop_price fromecs_goods left join ecs_categoryon ecs_goods.cat_id=ecs_category.cat_id;5.2:取出第4个栏目下的商品的商品名,栏目名,价格select goods_name,cat_name,shop_price fromecs_goods left join ecs_categoryon ecs_goods.cat_id=ecs_category.cat_idwhere ecs_goods.cat_id = 4;5.3:取出第4个栏目下的商品的商品名,栏目名,与品牌名select goods_name,cat_name,brand_name fromecs_goods left join ecs_categoryon ecs_goods.cat_id=ecs_category.cat_idleft join ecs_brandon ecs_goods.brand_id=ecs_brand.brand_idwhere ecs_goods.cat_id = 4;5.4: 用友面试题根据给出的表结构按要求写出SQL语句。

MySql学习笔记

MySql学习笔记

MySql学习笔记MySql学习笔记MySql概述:MySql是一个种关联数据库管理系统,所谓关联数据库就是将数据保存在不同的表中,而不是将所有数据放在一个大的仓库中。

这样就增加了速度与提高了灵活性。

并且MySql软件是一个开放源码软件。

注意,MySql所支持的TimeStamp的最大范围的问题,在32位机器上,支持的取值范围是年份最好不要超过2030年,然后如果在64位的机器上,年份可以达到2106年,而对于date、与datetime这两种类型,则没有关系,都可以表示到9999-12-31,所以这一点得注意下;还有,在安装MySql的时候,我们一般都选择Typical(典型安装)就可以了,当然,如果还有其它用途的话,那最好选择Complete(完全安装);在安装过程中,一般的还会让你进行服务器类型的选择,分别有三种服务器类型的选择,(Developer(开发机)、Server Machine(服务器)、Dedicated MySql Server Machine(专用MYSQL服务器)),选择哪种类型的服务器,只会对配置向导对内存等有影响,不然其它方面是没有什么影响的;所以,我们如果是开发者,选择开发机就可以啦;然后接下来,还会有数据库使用情况对话框的选择,我们只要按照默认就可以啦;连接与断开服务器:连接:在windows命令提示符下输入类似如下命令集:mysql –h host –u user –p 例如,我在用的时候输入的是:mysql –h localhost –u root –p 然后会提示要你输入用户密码,这个时候,如果你有密码的话,就输入密码敲回车,如果没有密码,直接敲回车,就可以进入到数据库客户端;连接远程主机上的mysql,可以用下面的命令:mysql –h 159.0.45.1 –u root –p 123 断开服务器:在进入客户端后,你可以直接输入quit然后回车就可以了;下面就数据库相关命令进行相关说明Alter table test add(address varchar(50) not null default …xm?,email varchar(20) not null);将表中某个字段的名字修改或者修改其对应的相关属性的时候,要用change对其进行操作; Alter table test change email email varchar(20) not null default …zz?;//不修改字段名Alter table test change email Email varchar(30) not null;//修改字段名称删除表中字段:Alter table test drop email;//删除单个字段Alter table test drop address,drop email;//删除多列可以用Drop来取消主键与外键等,例如:Alter table test drop foreign key fk_symbol; 删除索引:Drop index index_name on table_name; 例如:drop index t on test;向表中插入记录:注意,当插入表中的记录并不是所有的字段的时候,应该要在前面列出字段名称才行,不然会报错;Insert into test(name) values(…ltx?);Insert into test values(1,?ltx?);也可以向表中同时插入多列值,如:Insert into test(name) va lues(…ltx?),(…hhy?),(…xf?);删除表中记录:Delete from test;//删除表中所有记录;Delete from test where id=1;//删除表中特定条件下的记录;当要从一个表或者多个表当中查询出一些字段然后把这些字段又要插入到另一个表当中的时候,可以用insert …..select语法;Insert into testt(name) (select name from test where id=4);从文件中读取行插入数据表中,可以用Load data infile语句;Load data infile …test.txt? into table test;可以用Describe语法进行获取有关列的信息;Describe test;//可以查看test表的所有信息,包括对应列字段的数据类型等;MySql事务处理相关语法;开始一项新的事务:start transaction或者begin transaction 提交事务:commit事务回滚:rollbackset autocommit true|false 语句可以禁用或启用默认的autocommit模式,只可用于当前连接; 例子:Start transaction;Update person set name=?LJB? where id=1;Commit | rollback;数据库管理语句修改用户密码:以root用户为例,则可以写成下面的;mysql –u root –p 旧密码–password 新密码Mysql –u root –password 123;//将root用户的密码修改成123,由于root 用户开始的时候,是没有密码的,所以-p旧密码就省略了;例如修改一个有密码的用户密码:mysql –u ltx –p 123 –password 456;增加一个用户test1,密码为abc,让他可以在任何时候主机上登陆,并对所有数据库有查询、插入、修改、删除的权限。

马士兵mysql视频的个人笔记

马士兵mysql视频的个人笔记

如果你的root现在有密码了,那么修改密码为abc的命令是:mysqladmin -u root -p password youyou 注意,命令回车后会问你旧密码,输入旧密码之后命令完成,密码修改成功。

---------02_mysql_startedcreate database mydata; //创建一个数据库use mydata; //使用当前已经创建的数据库create table dept //创建dept表(deptno int primary key,dname varchar(14),loc varchar(13)--部门位置);create table emp(empno int primary key,ename varchar(10),job varchar(10),mgr int,--所属经理编号hiredate datetime,--入职日期sal double,comm double,--奖金deptno int,foreign key (deptno) references dept(deptno) #外键deptno参考dept表的deptno);?:显示帮助信息\. 执行一个SQL的脚本文件,用一个文件名作为参数例如\. c:\\mysql_script\\mydata.sqlcreate table salgrade #创建薪水等级表salgrade(grade int primary key,losal int,hisal int);insert into dept values(10,'a','a');insert into dept values(20,'b','b');insert into dept values(30,'c','c');insert into dept values(40,'d','d');insert into dept(deptno,dname) values(50,'e');insert into dept values(60,'f','f');---------03_page_seperationshow databases; #查看当前MYSQL环境下有多少个数据库show tables; #查看当前使用中数据库下面有多少张表。

mysql数据库学习笔记

mysql数据库学习笔记

2、查看 describe table_name desc table_name 查看表的定义
show create table table_name \G 注意:\G显示的更加人性化,美观(语句结束符 ;,\g,\G) 3、修改(add modify change rename drop)
格式:alter table tablename [rename/modify/add/change/drop]
desc t_test 添加到第三列
alter table tablename add three bigint after id
desc t_test 5、调整某些列的位置
alter table table_name modify column1 datatype first|alfter
column2
alter table t_test add first1 bigint first; 注意:没有long型,只有bigint
tinyint smallint mediumint int/Integer bigint
4、指定新列的位置
alter table tablename add columnname datatype after column
NOT NULL(NK)
DEFAULT
mysql数据库.txt[+]
Page 3
UNIQUE KEY(UK)
约束字段的值是唯一的
PRIMATYKEY(PK)
AUTO_INCREMENT
FOREIGN KEY(FK) 不支持check约束,即可以使用check约束,但是没有效果 约束:
单列约束
多列约束
属性名1和属性名2都必须存在

黑马程序员mysql运维篇笔记

黑马程序员mysql运维篇笔记

黑马程序员MySQL运维篇笔记一、MySQL概述MySQL是一个流行的关系型数据库管理系统,广泛应用于各种场景,如Web开发、数据存储和数据分析等。

了解MySQL的基本概念、安装和配置是进行MySQL运维的基础。

二、MySQL安装与配置1.安装方式:可以选择源码安装、二进制安装或使用包管理器进行安装。

2.配置文件:MySQL的配置文件为f,其中包含了各种服务器参数,可以根据实际需求进行修改。

3.启动与停止:可以通过命令行工具或系统服务管理器来启动和停止MySQL服务。

三、MySQL基本操作1.创建数据库:使用CREATE DATABASE语句创建一个新的数据库。

2.删除数据库:使用DROP DATABASE语句删除一个数据库。

3.创建表:使用CREATE TABLE语句创建一个新的表。

4.删除表:使用DROP TABLE语句删除一个表。

5.插入数据:使用INSERT INTO语句向表中插入数据。

6.查询数据:使用SELECT语句查询表中的数据。

7.更新数据:使用UPDATE语句更新表中的数据。

8.删除数据:使用DELETE语句删除表中的数据。

四、MySQL性能优化1.索引优化:合理使用索引可以大大提高查询速度,但要注意避免过度索引。

2.SQL优化:优化SQL语句可以提高查询效率,如避免SELECT *,尽量使用连接(JOIN)代替子查询等。

3.服务器硬件优化:根据实际需求合理配置服务器硬件,如增加内存、使用SSD硬盘等。

4.定期备份与恢复:定期备份数据库可以防止数据丢失,而恢复备份可以帮助快速恢复数据。

5.监控与日志分析:使用工具监控MySQL服务器的性能指标,分析日志文件可以帮助排查问题。

6.安全性:加强MySQL服务器的安全性,如设置强密码、禁用不必要的功能等。

7.高可用性:通过主从复制、负载均衡等方式提高MySQL服务器的可用性。

8.数据迁移:在需要时可以将数据迁移到其他存储介质或服务器上,以满足性能或扩展需求。

mysql基础知识笔记总结

mysql基础知识笔记总结

mysql基础知识笔记总结创建数据库在与数据进⾏任何其他操作之前,需要创建⼀个数据库。

数据库是数据的容器。

它可以⽤于存储联系⼈,供应商,客户或任何想存储的数据。

在MySQL中,数据库是⽤于存储和操作诸如表,数据库视图,触发器,存储过程等数据的对象的集合。

要在MySQL中创建数据库,请使⽤CREATE DATABASE语句,如下:CREATE DATABASE [IF NOT EXISTS] database_name;SQL我们来更详细地看看CREATE DATABASE语句:CREATE DATABASE语句的后⾯是要创建的数据库名称。

建议数据库名称尽可能是有意义和具有⼀定的描述性。

IF NOT EXISTS是语句的可选⼦句。

IF NOT EXISTS⼦句可防⽌创建数据库服务器中已存在的新数据库的错误。

不能在MySQL数据库服务器中具有相同名称的数据库。

例如,要创建⼀个名称为mytestdb数据库,可以执⾏CREATE DATABASE语句后接数据库名称:mytestdb,如果当前MySQL服务器中没有数据库:mytestdb,则创建成功,如下所⽰:CREATE DATABASE IF NOT EXISTS mytestdb;SQL执⾏此语句后,MySQL返回⼀条消息,通知新数据库是否已成功创建。

显⽰数据库SHOW DATABASES语句显⽰MySQL数据库服务器中的所有数据库。

您可以使⽤SHOW DATABASES语句来查看您要创建的数据库,或者在创建新数据库之前查看数据库服务器上的所有数据库,例如:+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || testdb || yiibaidb |+--------------------+5 rows in set在此MySQL数据库服务器中有6个数据库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第六天一,回顾1.外键: 关联关系(表与表之间: 表中字段指向另外一张表的主键)外键条件: 字段类型必须一致, 存储引擎必须为innodb外键约束:子表约束: 不能插入父表不存在的记录父表约束: 三种约束模式(district, cascade,set null), on delete set null on update cascade2.联合查询: union, 多表合并和单表不同查询条件联合查询使用order by: select语句必须使用括号; 还必须配合limit3.子查询: 查询语句中有查询语句分类: 按位置(from,where和exists), 按返回结果(用途):标量, 列,行和表4.视图: view节省SQL语句; 安全性控制视图本质: 虚拟表, 有结构无数据视图数据操作: 多表只能改, 单表可以增删改(增删有条件限制)视图算法: undefined未定义, temptable临时表和merge合并5.文件备份与还原文件备份: 存储引擎(myisam适用)单表数据备份: 只能备份数据SQL备份: 备份的是SQL指令(mysqldump.exe客户端备份)增量备份: 备份系统日志文件需求: 有一张银行账户表, 有A用户给B用户转账: A账户先减少, B账户增加. 但是A操作完之后断电了.解决方案: A减少钱, 但是不要立即修改数据表, B收到钱之后, 同时修改数据表.二,事务安全事务: transaction, 一系列要发生的连续的操作事务安全: 一种保护连续操作同时满足(实现)的一种机制事务安全的意义: 保证数据操作的完整性(存储引擎必须为innodb ,另一个可以用事务的是BDB但它收费)(事务操作只针对数据进行操作,若在事务内进行删表创表创数据库等操作,会先commit然后执行)1.事务操作事务操作分为两种: 自动事务(默认的), 手动事务①手动事务: 操作流程(data目录下的ib_logfile文件是日志文件)a.开启事务: 告诉系统以下所有的操作(写)不要直接写入到数据表, 先存放到事务日志Start transaction;(试:已经开启事务了,中途再Start transaction; ,相当于先commit再开启)(试:开启事务后,执行的查询语句,返回的是start transaction那一刻的数据经过日志内存的写操作语句加工后的结果,这时候提交事务后再查询的真实结果不一定就是这个)(试:某人开启事务的时候,对其他人的操作没有影响,其他人也可以操作数据库; 这个人开启事务的作用只是把开启事务后的写操作写入日志文件,相当于把日志内的所有操作数据的语句绑到一起再用commit提交或用rollback清空而已,把有可能不连续的操作连续起来而已)b.进行事务操作: 一系列操作李四账户减少张三账户增加c.关闭事务: 选择性的将日志文件中操作的结果保存到数据表(同步)或者直接清空事务日志(原来操作全部清空) ( 试:这两个命令都会退出事务,但commit会提交日志rollback会取消日志)1>提交事务: 同步数据表(操作成功): commit;2>回滚事务: 直接清空日志表(操作失败): rollback;2.事务原理事务操作原理: 事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会清空(rollback, 断电, 断开连接)3.回滚点回滚点: 在某个成功的操作完成之后, 后续的操作有可能成功有可能失败, 但是不管成功还是失败,前面操作都已经成功: 可以在当前成功的位置, 设置一个点: 可以供后续失败操作返回到该位置, 而不是返回所有操作, 这个点称之为回滚点.设置回滚点语法: savepoint 回滚点名字;回到回滚点语法: rollback to 回滚点名字; (rollback to不会退出事务,但rollback会退出事务)2.自动事务处理(事务操作只针对数据进行操作,若关闭自动事务处理,再内进行删表创表创数据库等操作,会先commit再执行,帮你提交之前的操作;但之后的数据操作还是要commit 才能生效)在mysql中: 默认的都是自动事务处理, 用户操作完会立即同步到数据表中.自动事务: 系统通过autocommit变量控制Show variables like ‘autocommit’;关闭自动提交: set autocommit = off/0;再次直接写操作自动关闭之后,需要手动来选择处理: commit提交, rollback回滚注意: 通常都会使用自动事务4.事务特性事务有四大特性: ACIDA: Atomic原子性, 事务的整个操作是一个整体, 不可分割,要么全部成功,要么全部失败;C: Consistency, 一致性, 事务操作的前后, 数据表中的数据没有变化I: Isolation, 隔离性, 多方事务操作是相互隔离不受影响的.D: Durability, 持久性, 数据一旦提交, 不可改变,永久的改变数据表数据5.锁机制: innodb默认是行锁, 但是如果在事务操作的过程中, 没有使用到索引,那么系统会自动全表检索数据, 自动升级为表锁(事务内用索引定位的作写操作的时候,它会通过索引自动定位到那一条;但不用索引的话,他会全表搜索,查找所有记录;若行被锁住,别人用非索引定位没被锁住的行的话,会全表搜索会卡主,但别人用索引定位没被锁住的行时,不会被锁住)行锁: 只有当前行被锁住, 别的用户不能操作表锁: 整张表被锁住, 别的用户都不能操作三,变量变量分为两种: 系统变量和自定义变量1.系统变量系统定义好的变量: 大部分的时候用户根本不需要使用系统变量: 系统变量是用来控制服务器的表现的: 如autocommit, auto_increment_increment等①查看系统变量Show variables; -- 查看所有系统变量②查看具体变量值: 任何一个有数据返回的内容都是由select查看(试: 用select和show都可以查看变量值,只不过show查看列出的是所有变量,需要用like筛选;select查看是直接跟变量名,查看系统变量需要加两个@)Select @@变量名;③修改系统变量修改系统变量分为两种方式: 会话级别和全局级别a.会话级别: 临时修改, 当前客户端当次连接有效Set 变量名= 值;/Set @@变量名= 值;b.全局级别: 一次修改,永久生效(对所有客户端都生效,但必须重启会话才能生效)如果对方(其他)客户端当前已经连上服务器,那么当次修改无效,要退出重新登录才会生效Set global 变量名= 值; (这里不能加@@,加了报错)2.自定义变量①定义变量:系统为了区分系统变量, 规定用户自定义变量必须使用一个@符号Set @变量名= 值;②查看自定义变量:也是类似系统变量查看Select @变量名; (试:以上所有用set修改变量的方法和用select查看变量的方法,都可跟多个变量,用逗号隔开)3.在mysql中, “=”会默认的当做比较符号处理(很多地方), mysql为了区分比较和赋值的概念: 重新定义了一个新的的赋值符号: :=4.Mysql允许从数据表中获取数据,然后赋值给变量: 两种方式①方案1: 边赋值,变查看结果Select @变量名:= 字段名from 数据源; -- 从字段中取值赋值给变量名, 如果使用=会变成比较(若不用:=而用=,会把=号当比较符号, 把@变量名=字段名当成一个字段,下面的数据是他们比较的值,0或1 ; 若用:=,会每到一列就赋值一次然后显示.显示完了之后该变量的值为最后一行的那个字段的值)②方案2: 只有赋值不看结果: 要求很严格: 数据记录最多只允许获取一条: mysql不支持数组Select 字段列表from 表名into 变量列表; (字段列表和变量列表数量必须一致,记录只允许一条)所有自定义的变量都是会话级别: 当前客户端当次连接有效所有自定义变量不区分数据库(用户级别)四,触发器触发器: trigger, 事先为某张表绑定好一段代码,当表中的某些内容发生改变的时候(增删改)系统会自动触发代码,执行.触发器: 事件类型, 触发时间, 触发对象事件类型: 增删改, 三种类型insert,delete和update(试:在一个表上做3个触发器,分别为after的增删改,若你用一条insert或delete或update语句插入或删除或改动了多条数据,动了几条,他们就会触发对应的触发器几次,没成功不触发; 若没有唯一键或主键冲突的时候,replace和insert的作用一样,触发器行为也一样)(试:有主键冲突情况下Replace的触发行为,完全等价于先delete再insert,哪怕replace的新数据与原表中需要替换的旧数据一模一样,也相当于先删旧的再添新的;一条sql语句replace多条记录,等价于把该条sql语句拆分成多条sql语句运行的效果!!!)(replace操作在唯一键或主键冲突时永远相当于先删再添,如果表中有多个字段都有唯一键,你要插入的一条数据跟表中的多条记录都冲突了,那么会先把那多条记录删掉,再把新数据添进表中,完成后delete触发器触发多次,inset触发器触发一次!)(用insert into…on duplecate key update…: 在主键和唯一键冲突时,运行了更新操作的话,就会update触发器触发一次;没冲突运行了插入操作就会insert触发器触发一次)(若某条增删改语句加了触发器,当你运行增删改的时候,本身的增删改是没问题的,但他即将触发的事件因为某种原因(如超范围或唯一键约束等)运行不了,那么那个增删改也不能运行,触发事件也不会发生,可以这么理解,触发导火线和将触发的事件,要不就都发生要不就都不发生)触发时间: 前后: before和after (和上面3种的组合方式一共有6种)触发对象: 表中的每一条记录(针对行)一张表中只能拥有一种触发时间的一种类型的触发器: 最多一张表能有6个触发器1.创建触发器在mysql高级结构中: 没有大括号, 都是用对应的字符符号代替触发器基本语法:①-- 临时修改语句结束符(试:这是会话级别)Delimiter 自定义符号-- 后续代码中只有碰到自定义符号才算结束(这条语句没有结束符)②--创建触发器(试: 把触发器装在某个表上,触发后的执行语句不能对这个表进行操作,因为此表触发了触发器,触发器内容没执行完的时候就被锁住了)(试:触发器触发后的执行语句不能是查询操作,因为触发触发后不允许有返回值,触发器触发后的执行语句也不能是删表操作)Create trigger 触发器名字触发时间事件类型on 表名for each rowBegin -- 代表左大括号: 开始……-- 里面就是触发器的内容: 每行内容都必须使用语句结束符: 分号End -- 代表右带括号: 结束自定义符号-- 语句结束符③-- 将临时修改修正过来Delimiter ;2.查看触发器查看所有触发器或者模糊匹配Show triggers [like ‘pattern’];可以查看触发器创建语句Show create trigger 触发器名字; (试:这只能查看当前数据库的索引触发器)所有的触发器都会保存一张表中: Information_schema.triggers3.使用触发器触发器: 不需要手动调用, 而是当某种情况发生时会自动触发.(订单里面插入记录之后)4.修改触发器&删除触发器触发器不能修改,只能先删除,后新增.Drop trigger 触发器名字;5.触发器记录触发器记录: 不管触发器是否触发了,只要当某种操作准备执行, 系统就会将当前要操作的记录的当前状态和即将执行之后新的状态给分别保留下来, 供触发器使用: 其中, 要操作的当前状态保存到old中, 操作之后的可能形态保存给new.Old代表的是旧记录,new代表的是新记录删除的时候是没有new的; 插入的时候是没有oldOld和new都是代表记录本身: 任何一条记录除了有数据, 还有字段名字.使用方式: old.字段名/ new.字段名(new代表的是假设发生之后的结果)查看触发器的效果如果触发器内部只有一条要执行的SQL指令, 可以省略大括号(begin和end)Create trigger 触发器名字触发时间事件类型on 表名for each rowSQL指令;触发器: 可以很好的协调表内部的数据处理顺序和关系. 但是从PHP角度出发, 触发器会增加数据库维护的难度, 所以较少使用触发器.五,代码执行结构(if-then-else和while好像都只能在procedure或是function里用??)代码执行结构有三种: 顺序结构, 分支结构和循环结构1.分支结构分支结构: 事先准备多个代码块, 按照条件选择性执行某段代码.在mysql中只有if分支基本语法If 条件判断then……;-- 满足条件要执行的代码;[Else……; ] -- 不满足条件要执行的代码;End if;触发器结合if分支: 判断商品库存是否足够,不够不能生成订单. mysql内没有专门的语句的阻止某条sql语句的发生,所以可以在不希望某条语句发生的触发器内if后面跟一条语法错误的语句,暴力终止,触发器内的语句执行不了了,那么原来触发触发器的语句也就执行不了了.(试:下例其实也可以直接把库存的类型改成int signed,就不需要加这种验证了)效果2.循环结构循环结构: 某段代码在指定条件执行重复执行. While循环(没有for循环) (还有个循环叫loop,跟while是一样的,所以只讲一个)①语法结构:While 条件判断do……;-- 满足条件要执行的代码……;-- 变更循环条件End while;②循环控制: 在循环内部进行循环判断和控制Mysql中没有对应continue和break. 但是有替代品.Iterate: 迭代, 类似continue, 后面的代码不执行, 循环重新来过Leave: 离开, 类似break,整个循环接收使用方式: Itrate/leave 循环名字;③定义循环名字:循环名字:while 条件do……; -- 循环体……;-- 循环控制Leave/iterate 循环名字;End while;六,函数函数: 将一段代码块封装到一个结构中, 在需要执行代码块的时候, 调用结构执行即可.(代码复用) 函数分为两类: 系统函数和自定义函数1.系统函数系统定义好的函数, 直接调用即可.任何函数都有返回值, 因此函数的调用是通过select调用.Mysql中,字符串的基本操作单位(最常见的是字符)怎么查看操作手册:打开操作手册在左边的目录里选中要查询的大类,再点击一下右边的正文处ctrl+f输入查询内容查询常用系统函数:Substring: 字符串截取(字符为单位)char_length: 字符长度Length: 字节长度Instr: 判断字符串是否在某个具体的字符串中存在, 存在返回位置,不存在返回0;(位置都是从1开始)Lpad: 左填充, 将字符串按照某个指定的填充方式,填充到指定长度(字符)(填就从左边开始填; 不够原始长度也是从左边开始读,读到指定长度为止)(Rpad:右填充) (填也是从左边开始填,不够原始长度也是读从左边开始读到指定长度)Insert: 替换,找到目标位置,指定长度的字符串,替换成目标字符串Strcmp: compare,字符串比较(区不区分大小写跟校对集有关,默认的校对集不区分大小写) (类似java中String的compareTo方法,但小返回-1,大返回1,等于返回0)2.自定义函数(试: 只对当前数据库有效,只要不删永久有效,非会话级别) (试:函数体内写select查询语句输出会报错,但用于赋值不会报错)(试:函数内不能增删表,不然报错;函数可以对某表内的数据进行写操作;但函数内不能有查询后的输出语句,可以有查询后的赋值语句!!)(试:函数不能什么都不加,直接调用,如: Function(); )(调用函数的时候中途报错退出函数的话,报错之前的代码有效!!!)函数要素: 函数名, 参数列表(形参和实参), 返回值, 函数体(作用域)①创建函数:创建语法: (这里也是,如果函数里只有一条语句,则begin和end可以省略不写) (自定义函数必须有返回值)Delimiter 结束符Create function 函数名([形参列表]) returns 数据类型-- 规定要返回的数据类型Begin……;-- 函数体……;-- 返回值: return 类型(指定数据类型);End结束符Delimiter ;定义函数自定义函数与系统函数的调用方式是一样: select 函数名([实参列表]);②查看函数查看所有函数: show function status [like ‘pattern’];查看函数的创建语句: show create function 函数名;③修改函数&删除函数函数只能先删除后新增,不能修改.Drop function 函数名;④函数参数参数分为两种: 定义时的参数叫形参, 调用时的参数叫实参(实参可以是数值也可以是变量)形参: 要求必须指定数据类型Function 函数名(形参名字字段类型) returns 数据类型在函数内部使用@定义的变量在函数外部也可以访问,在函数外部@定义的全局变量函数内也能使用,但类型不兼容的全局变量赋值给局部变量,在函数调用的时候会报错④作用域Mysql中的作用域与js中的作用域完全一样(任何变量只要你要修改,就要用set关键字)全局变量可以在任何地方使用; 局部变量只能在函数内部使用.全局变量: 使用set关键字定义, 使用@符号标志(跨数据库也能使用)局部变量: 使用declare关键字声明, 没有@符号: 所有的局部变量的声明,必须在函数体开始之前七,存储过程存储过程简称过程,procedure, 是一种用来处理数据的方式.存储过程是一种没有返回值的函数.(存储过程与函数不同,他里面可以放查询语句,里面也可以增删表,也可以增删数据库) (存储过程只对当前数据库有效,非会话级别)(调用存储过程,执行的中途报错退出了的话.错误之前的代码有效!!!)1.创建过程Delimiter 结束符Create procedure 过程名字([参数列表])Begin……; -- 过程体End结束符Delimiter ;2.查看过程函数的查看方式完全适用于过程: 关键字换成procedure 查看所有过程: show procedure status [like ‘pattern’];查看过程创建语句: show create procedure 过程名;3.调用过程过程没有返回值: select是不能访问的.过程有一个专门的调用关键字: call4.修改过程&删除过程过程只能先删除,后新增Drop procedure 过程名;5.过程参数函数的参数需要数据类型指定, 过程比函数更严格.过程还有自己的类型限定: 三种类型In: 数据只是从外部传入给内部使用(值传递): 可以是数值也可以是变量Out: 只允许过程内部使用(不用外部数据), 给外部使用的.(引用传递: 外部的数据会被先清空才会进入到内部): 只能是变量Inout: 外部可以在内部使用,内部修改也可以给外部使用: 典型的引用传递: 只能传变量①基本使用Create procedure 过程名(in 形参名字数据类型, out 形参名字数据类型, inout 形参名字数据类型)调用: out和inout类型的参数必须传入变量,而不能是数值正确调用: 传入变量存储过程对于变量的操作(返回)是滞后的: 是在存储过程调用结束的时候,才会重新将内部修改的值赋值给外部传入的全局变量.测试: 传入数据1,2,3: 说明局部变量与全局变量无关最后: 在存储过程调用结束之后, 系统会将局部变量重复返回给全局变量(out和inout)。

相关文档
最新文档