我的小站

1、MySQL的优势

  • 运行速度快
  • 使用成本低
  • 可移植性强
  • 适用用户广

2、MySQL的运行机制

一个SQL语句,如select * from tablename ,从支持接口进来后,进入连接池后做权限、验证等环节,然后判断是否有缓存,有则直接放回结果,否则进入SQL接口,在查询之前查询优化器进行优化,最后进行解析,查询。并通过存储引擎与文件交互。

3、MySQL的配置

**端口号:**3306 **默认字符集:**utf8 将bin目录写入 环境变量 root密码设置

**注:**utf8:一种Unicode编码,解决国际上字符不统一的多字节编码,通用性强 my.ini:记录MySQL配置信息,可修改配置内容,如端口号,字符集等

4、命令行连接MySQL

首先检查是否启动服务 属性窗口 DOS命令:

​ 启动:net start mysql57

​ 停止:net stop mysql57

57代表是5.7的版本,以下的不需接57

注:如果修改了配置文件,必须重启MySQL服务才能生效 命令行连接MySQL语法:mysql –h服务器主机地址 –u 用户名 –p密码

l –h服务器主机地址(如果是本机可以省略这名句) 密码可省略,按回车再输入

5、系统数据库和用户数据库

系统数据库: **information_schema:**主要存储系统中的一些数据库对象信息,如用户表信息、字段信息、权限信息、字符集信息和分区信息等。 **performance_schema:**主要存储数据库服务器性能参数

**mysql:**主要存储系统的用户权限信息 **test:**MySQL数据库管理系统自动创建的测试数据库,任何用户都可以使用 用户数据库: 用户数据库是用户根据实际需求创建的数据库。本章后面的讲解主要针对用户数据库。

6、创建数据库

​ set names utf8; 语法: create database 数据库名 **示例:**create database myschool;

7、查看数据库列表

语法:show databases;

8、选择数据库

语法:use 数据库名; 注:使用数据前必须先选择该数据库!

9、删除数据库

语法:drop database 数据库名;

10、MySQL数据类型

11、创建表

语法:CREATE TABLE [IF NOT EXISTS] 表名 ( 字段1 数据类型 [字段属性|约束][索引][注释], …… 字段n 数据类型 [字段属性|约束][索引][注释]
)[表类型][表字符集][注释];

例:

   CREATE TABLE `student`
(
`studentNo` INT(4) PRIMARY KEY auto_increment not null,
` name` CHAR(10),
……
);

12、字段的约束及属性

名称 关键字 说明
非空约束 NOT NULL 字段不允许为空 默认约束 DEFAULT 赋予某字段默认值 唯一约束 UNIQUE KEY(UK) 设置字段的值是唯一的 允许为空,但只能有一个空值 主键约束 PRIMARY KEY(PK) 设置该字段为表的主键 可唯一标识该表记录 外键约束 FOREIGN KEY(FK) 用于在两表之间建立关系 自动增长 AUTO_INCREMENT 设置该列为自增字段,默认每条自增1,通常用于设置主键

主键:

 CREATE TABLE student(
`studentNo` INT(4) PRIMARY KEY,
……);

注释:

 CREATE TABLE test (
`id` int(11) UNSIGNED COMMENT ‘编号’
)COMMENT='测试表’ ;

设置字符集编码

 CREATE TABLE [IF NOT EXISTS] 表名(
#省略代码
)CHARSET = 字符集名;

创建学生表示例:

CREATE TABLE `student`(
`studentNo` INT(4) NOT NULL COMMENT '学号' PRIMARY KEY,
`loginPwd` VARCHAR(20) NOT NULL COMMENT '密码',
`studentName` VARCHAR(50) NOT NULL COMMENT '学生姓名',
`sex` CHAR(2) DEFAULT '男' NOT NULL COMMENT '性别',
`gradeId` INT(4) UNSIGNED COMMENT '年级编号',
`phone` VARCHAR(50) COMMENT '联系电话',
`address` VARCHAR(255) DEFAULT '地址不详'COMMENT '地址',
`bornDate` DATETIME COMMENT '出生时间',
`email` VARCHAR(50) COMMENT'邮件账号',
`identityCard` VARCHAR(18) UNIQUE KEY COMMENT '身份证号'
) COMMENT='学生表';

13、查看表

查看表是否存在

查看表定义

注:避免DOS窗口乱码,可执行SET NAMES gbk;

14、删除表

**语法:**DROP TABLE [IF EXISTS] 表名; 示例:

注:在删除表之前,先使用IF EXISTS语句验证表是否存在

15、MySQL的存储引擎

1)存储引擎的类型 MyISAM、InnoDB 、Memory、CSV等9种 2)MyISAM与InnoDB类型主要区别

经验: 适用场合 使用MyISAM: 不需事务,空间小,以查询访问为主 使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制 3)查看当前默认存储引擎 SHOW VARIABLES LIKE ‘storage_engine%’; 4)修改存储引擎

修改my.ini配置文件 default-storage-engine= InnoDB

5)设置表的存储引擎 语法:CREATE TABLE 表名( #省略代码 )ENGINE=存储引擎;

16、数据表的存储位置

1)MyISAM类型表文件 *.frm:表结构定义文件 *.MYD:数据文件 *.MYI:索引文件 2)InnoDB类型表文件 *.frm:表结构定义文件 ibdata1文件 注意:存储位置 因操作系统而异,可查my.ini

datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/" innodb_data_home_dir="D:/MySQL Datafiles/"

17、MySQL系统帮助

HELP 查询内容; HELP contents; HELP Data Types; HELP INT;

补充:mysql 数值类型 中带符号的/无带符号的 区别

带符号和无符号,顾名思义,就是是否有正负之分: 比如8为二进制,如果带符号,需要用1位表示符号(1表示负数,0表示正),剩下7位表示数据. 那么表示范围是-127---127(包括-0和+0). 如果不带符号,8位全部表示数据, 那么表示范围是 0--256

补充: mysql 有没有nvarchar nchar

​ 有,但是,mysql采用utf-8编码,而传统的数据库采用unicode,一个汉字要用两个unicode的char,而在mysql中由于使用了utf-8,所以无论汉字还是字母,都是一个长度的char,所以就不用分nvarhcar和varchar了,一律作varchar

SQL高级(一)

1、修改表

1)#修改表名 ALTER TABLE 旧表名 RENAME 新表名; 2)#添加字段 ALTER TABLE 表名 ADD 字段名 数据类型 [属性]; 3)#修改字段 ALTER TABLE 表名 CHANGE 原字段名 新字段名 数据类型 [属性]; 4)#删除字段 ALTER TABLE 表名 DROP 字段名;

2、添加主键

语法: ALTER TABLE 表名 ADD CONSTRAINT 主键名 PRIMARY KEY 表名(主键字段);

**例:**设置grade表中gradeId字段为主键

 alter table `grade` add constraint `pk_grade` primary key `grade`(`gradeId`);

3、添加外键

语法: ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 关联表名(关联字段);

**例:**将student表的gradeId字段和grade表的gradeId字段建立外键关联

alter table `student`  add  constraint fk_student_grade foreign key(`gradeId`)
references `grade` (`gradeId`);

4、DML语句--插入单条数据记录

**语法:**INSERT INTO 表名 [(字段名列表)] VALUES (值列表);

注意: 字段名是可选的,如省略则依次插入所有字段 多个列表和多个值之间使用逗号分隔 值列表和字段名列表一一对应 如插入的是表中部分数据,字段名列表必填 示例:

INSERT INTO `student`(`loginPwd`,`studentName`,`gradeId`,`phone`,`bornDate`)
VALUES('123','黄小平',1,'13956799999','1996-5-8');

5、DML语句--插入多条数据记录

**语法:**INSERT INTO 新表(字段名列表)VALUES(值列表1),(值列表2),……,(值列表n); 示例:

 INSERT INTO `subject`(`subjectName`,`classHour`,`gradeID`)
VALUES('Logic Java',220,1),('HTML',160,1),('Java OOP',230,2);

经验: 为避免表结构发生变化引发的错误,建议插入数据时写明具体字段名!

6、DML语句——将查询结果插入新表

CREATE TABLE `phoneList`(
SELECT `studentName`,`phone`
FROM `student`);

注:如新表已存在,将会报错!

7、DML语句——数据更新、删除

1)更新数据记录 update 表名 set 字段1=值1,字段2=值2,...,字段n=值n [where 条件]; 2)删除数据记录

DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;
TRUNCATE语句删除后将重置自增列,表结构及其字段、约束、索引保持不变,执行速度比DELETE语句快

8、DQL语句

语法:

SELECT <字段名列表> FROM <表名或视图> [WHERE <查询条件>] [GROUP BY <分组的字段名>] [HAVING <条件>] [ORDER BY <排序的字段名> [ASC 或 DESC]] 示例:

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo;

9、LIMIT子句

MySQL查询语句中使用LIMIT子句限制结果集 语法: SELECT <字段名列表> FROM <表名或视图> [WHERE <查询条件>] [GROUP BY <分组的字段名>] [ORDER BY <排序的列名> [ASC 或 DESC]] [LIMIT [位置偏移量, ]行数];

示例:

SELECT `studentNo`,`studentName`,`phone`,`address`,`bornDate`
FROM `student`
WHERE `gradeId` = 1
ORDER BY studentNo
LIMIT 4,4; #(从第5条开始显示4条)

注:使用LIMIT子句时,注意第1条记录的位置是0!

10、常用函数——聚合函数

**AVG()**返回某字段的平均值

COUNT() 返回某字段的行数

**MAX()**返回某字段的最大值

MIN() 返回某字段的最小值

SUM() 返回某字段的和

11、常用函数——字符串函数

CONCAT(str1,str1...strn) 字符串连接 SELECT CONCAT('My','S','QL'); 返回:MySQL INSERT(str,pos,len,newstr) 字符串替换 SELECT INSERT( '这是SQL Server数据库',3,10,'MySQL'); 返回:这是MySQL数据库 LOWER(str) 将字符串转为小写 SELECT LOWER('MySQL'); 返回:mysql UPPER(str) 将字符串转为大写 SELECT UPPER('MySQL'); 返回:MYSQL SUBSTRING(str,num,len) 字符串截取 SELECT SUBSTRING( 'JavaMySQLOracle',5,5); 返回:MySQL

12、常用函数——时间日期函数

CURDATE() 获取当前日期 SELECT CURDATE();返回:2016-08-08 CURTIME() 获取当前时间 SELECT CURTIME(); 返回:19:19:26 NOW() 获取当前日期和时间 SELECT NOW();返回:2016-08-08 19:19:26 WEEK(date) 返回日期date为一年中的第几周 SELECT WEEK(NOW()); YEAR(date) 返回日期date的年份 SELECT YEAR(NOW()); HOUR(time) 返回时间time的小时值 SELECT HOUR(NOW()); DATEDIFF(date1,date2) 返回日期参数date1和date2之间相隔的天数 SELECT DATEDIFF(NOW(),'2008-8-8'); 返回:2881

13、常用函数——数学函数

CEIL(x)返回大于或等于数值x的最小整数 SELECT CEIL(2.3) 返回:3 FLOOR(x) 返回小于或等于数值x的最大整数 SELECT FLOOR(2.3) 返回:2 RAND() 返回0~1间的随机数 SELECT RAND() 返回:0.5525468583708134

14、子查询

1)子查询是一个嵌套在 SELECT、INSERT、UPDATE 或 DELETE 语句或其他子查询中的查询 2)子查询在WHERE语句中的一般用法 **语法:**SELECT … FROM 表1 WHERE 字段1 比较运算符(子查询) **注:**将子查询和比较运算符联合使用,必须保证子查询返回的值不能多于一个 示例:

SELECT `studentNo`,`studentName`,`sex`,`bornDate`,`address`
FROM `student`
WHERE `bornDate` > (SELECT `bornDate` FROM `student` WHERE `studentName`='李斯文');

15、使用子查询替换表连接

1)实现方法一:采用表连接

SELECT `studentName` FROM `student` stu
INNER JOIN `result` r ON stu.studentNO = r.studentNo
INNER JOIN `subject` sub ON r.subjectNo = sub.subjectNo
WHERE `studentResult` = 60 AND `subjectName` = 'Logic Java';

2)实现方法二:采用子查询

SELECT `studentName` FROM `student` WHERE `studentNo` = (
SELECT `studentNo` FROM `result`
INNER JOIN `Subject` ON result.subjectNo= subject.subjectNo
WHERE `studentResult`=60 AND `subjectName`='Logic Java'
);

子查询比较灵活、方便,常作为增删改查的筛选条件,适合于操纵一个表的数据 表连接更适合于查看多表的数据

16、IN子查询

SELECT `studentName` FROM `student`
WHERE `studentNo` IN(
SELECT `studentNo` FROM `result`
WHERE `subjectNo` = (
SELECT `subjectNo` FROM `subject`
WHERE `subjectName`='Logic Java'
)AND `studentResult` = 60
);

常用IN替换等于(=)的子查询 IN后面的子查询可以返回多条记录

注:非原创!

MySQL基础合集的更多相关文章

  1. es6常用基础合集

    es6常用基础合集 在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译. ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得 ...

  2. MYSQL例题合集

    一.数学函数 数学函数主要用于处理数字,包括整型.浮点数等. ABS(x) 返回x的绝对值 SELECT ABS(-1) -- 返回1 CEIL(x),CEILING(x) 返回大于或等于x的最小整数 ...

  3. MySQL:系列合集

    MySQL一:初识数据库 MySQL二:库操作 MySQL三:存储引擎 MySQL四:表操作 MySQL五:数据操作 MySQL六:索引原理与慢查询优化 MySQL七:数据备份 MySQL八:视图.触 ...

  4. 前端基础进阶(十四):es6常用基础合集

    在实际开发中,ES6已经非常普及了.掌握ES6的知识变成了一种必须.尽管我们在使用时仍然需要经过babel编译. ES6彻底改变了前端的编码风格,可以说对于前端的影响非常巨大.值得高兴的是,如果你熟悉 ...

  5. Linux 命令基础合集

    下面总结的是在使用 Linux 最常用的命令: 常用指令 ls        显示文件或目录 -l           列出文件详细信息l(list) -a          列出当前目录下所有文件及 ...

  6. 动态规划面试题基础合集1--数学三角形,LIS , LCS, CSD

    动态规划的一般思路是分为四步,即:寻找最优子结构.递归定义最优子结构.自底向上求解最优子结构和构造最优解. 接下来我列举出几个常见的动态规划面试题进行说明. (1)数学三角形:比较简单,直接贴一个我看 ...

  7. Mysql安装与问题合集

    下载mysql https://dev.mysql.com/downloads/mysql/ 下载历史版本 看这篇文章 https://www.cnblogs.com/reyinever/p/8551 ...

  8. 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!

    前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...

  9. linux基础操作命令合集(一)

    linux基础操作命令合集(一) 目录 linux基础操作命令合集(一) 一.命令行提示符 二.切换用户 三.主机名称命令 3.1.临时设置主机名 3.2.永久设置主机名 四.查看系统版本 五.网卡相 ...

随机推荐

  1. C#XmlHelper帮助类操作Xml文档的通用方法汇总

    前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内 ...

  2. 请解释Spring Bean的生命周期?

    首先说一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy: Spring上下文中的Bean生命周期也类似,如下: (1)实例化Bean: 对于BeanFac ...

  3. websocket使用nginx代理后连接频繁打开和关闭

    前几天开发了一个功能,使用websocket向前台发送消息,与前端联调时一切正常,但是发布到环境出现如下报错: 发现404,无法找到连接,突然想到环境上是走nginx代理的,应该是nginx没有配置代 ...

  4. Mybatis 的一级、二级缓存?

    1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 C ...

  5. Java 中,Maven 和 ANT 有什么区别?

    虽然两者都是构建工具,都用于创建 Java 应用,但是 Maven 做的事情更多, 在基于"约定优于配置"的概念下,提供标准的 Java 项目结构,同时能为应用自 动管理依赖(应用 ...

  6. 区分构造函数注入和 setter 注入?

    构造函数注入 setter 注入 没有部分注入 有部分注入 不会覆盖 setter 属性 会覆盖 setter 属性 任意修改都会创建一个新实例 任意修改不会创建一个新实例 适用于设置很多属性 适用于 ...

  7. mybatis源码之我见

    以前一直想看mybatis的源代码,但是一直没找到入口(傻),最近看教程,有些感悟. 和起以前一样,关键代码我会用红色标记. 首先,先贴下我的dao和mapper,代码很简单,和平时写的hello w ...

  8. 学习zabbix(六)

    实验环境 实验用2到2台机器,实验所用机器系统环境如下,可以看到2台机器的主机名和IP地址 ? 1 2 3 4 5 6 7 8 9 10 [root@linux-node1 ~]# cat /etc/ ...

  9. SQL数据库之设置查询出来数据为默认值

    -- 如果工资为null,按0处理 -- 函数: ifnull(字段, 默认值) : 如果指定字段的内容是null, 就按默认值处理 select name, ifnull(salary, 0) fr ...

  10. 第 4 章 ROS运行管理

    第 4 章 ROS运行管理 ROS是多进程(节点)的分布式框架,一个完整的ROS系统实现: 可能包含多台主机:每台主机上又有多个工作空间(workspace):每个的工作空间中又包含多个功能包(pac ...