MySQL由瑞典MySQL AB公司开发,目前属于Oracle公司。
MySQL是一个开源的关系型数据库管理系统。
MySQL分为社区版和企业版。
MySQL简单命令启动mysql :net start mysql(也可以启动其他的服务)
停止mysql :net stop mysql
登录 : mysql –u root –p 然后输入你的密码
修改mysql的提示符: mysql –uroot–p --prompt 提示符
提示符:
\D 完整的日期
\d 当前数据库
\h 服务器名称
\u 当前用户
创建数据库
-
关键字与函数名称全部大写。
-
数据库名称、表名称、字段名称全部小写。
-
SQL语句以分号结尾。
创建数据库命令简介:{}内代表必须 | 代表选其中一个 []代表可选。
创建数据库语句:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS]db_name
[DEFAULT] CHARACTER SET [=] charset_name
三个阶段
-
人工管理阶段
-
文件系统阶段
-
高级数据库阶段
数据库的常见模型;
层次模型,为树状结构,是Java 中的继承模式。网状模型,有多个父节点,多继承模式。关系模型,关系模型,是存放一个实体,和属性
特点
-
实现数据共享
-
减少数据冗余
-
采用特定数据类型
-
有较高的数据独立性
-
具有统一的数据控制功能
MYSQL中的数据类型:
整型数据类型:
类型名 字节数tinyint 1smallint 2mediumint 3int 4bigint 8浮点数据类型:
类型名 字节数float 4double 8decimal(m,d) 17m表示数据的总长度,d表示小数位数
字符串类型:
类型名 含义char 定长varchart() 变长tinyText 短文本字符text 长文本数据mediumtext 中等长度文本数据longtext 极大文本数据
数据库系统
主要组成
-
数据库:存储数据的地方
-
数据库管理系统:用于管理数据库的软件
-
数据库应用程序:作为管理数据库的条件补充
SQL语言
-
对数据库进行查询和修改的语言叫做SQL语言
组成
-
数据定义语言(DDL):DROP,CREATE,ALTER等
-
数据操作语言(DML):INSERT,UPDATE,DELETE等
-
数据库语言(DQL):SELECT语句
-
数据控制语言(DCL):GRANT, REVOKE, ROLLBACK等
数据库访问接口
OBDC
-
为访问不同的数据库提供一个共同的接口
-
一个基于ODBC的应用程序不依赖任何DMBS
JDBC
-
用于Java链接数据库的标准方法
ADO.NET
-
是在微软.net框架下设计的
PDO
-
为PHP访问数据库定义了一个轻量级一致性的接口
SQL语言的分类
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。
1. **数据查询语言DQL**数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE子句组成的查询块:SELECT <字段名表>FROM <表或视图名>WHERE <查询条件>2 .**数据操纵语言DML**数据操纵语言DML主要有三种形式:1) 插入:INSERT2) 更新:UPDATE3) 删除:DELETE3. **数据定义语言DDL**数据定义语言DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER? | | | | |? 表 视图 索引 同义词 簇
DDL操作是隐性提交的!不能rollback 4. **数据控制语言DCL**数据控制语言DCL用来授予或回收访问数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行监视等。如:1) GRANT:授权。
2) ROLLBACK [WORK] TO [SAVEPOINT]:回退到某一点。回滚---ROLLBACK回滚命令使数据库状态回到上次最后提交的状态。其格式为:SQL>ROLLBACK;
3) COMMIT [WORK]:提交。
MySQL的存储引擎
存储引擎的类型MyISAM、InnoDB 、Memory、CSV等9种
名称 | InnoDB | MyISAM |
---|---|---|
事务处理 | 支持 | 不支持 |
数据行锁定 | 支持 | 不支持 |
外键约束 | 支持 | 不支持 |
全文索引 | 不支持 | 支持 |
表空间大小 | 较大,约2倍 | 较小 |
适用场合 使用MyISAM: 不需事务,空间小,以查询访问为主
使用InnoDB: 多删除、更新操作,安全性高,事务处理及并发控制
查看当前默认存储引擎:SHOW VARIABLES LIKE ‘storage_engine%’;
修改存储引擎:default-storage-engine= InnoDB
DML语句——插入单条数据记录
语法:
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
DML语句——插入多条数据记录
语法:
INSERT INTO 新表(字段名列表) VALUES(值列表1),(值列表2),……,(值列表n);
将查询结果插入新表
语法:
CREATE TABLE 新表(SELECT 字段1,字段2…… FROM 原表);
更新数据记录
语法:
UPDATE 表名 SET 字段1=值1,字段2=值2,…,字段n=值n [WHERE 条件];
数据删除
语法:
DELETE FROM 表名 [WHERE条件];
TRUNCATE TABLE 表名;
什么是查询
查询产生一个虚拟表看到的是表形式显示的结果,但结果并不真正存储每次执行查询只是从数据表中提取数据,并按照表的形式显示出来
查询语法
SELECT <列名|表达式|函数|常量> FROM <表名> WHERE <查询条件表达式>];
数据查询基础
查询全部的行和列
语法:SELECT * FROM student
;
数据查询-列别名
SELECT studentNo
AS 学生编号,studentName
AS 学生姓名, address
AS 学生地址 FROM student
WHERE address
<> ‘河南新乡‘;
数据查询-空行、常量列
空行语法:
SELECT studentName
FROM student
WHERE email
IS NULL;
常量列语法:
SELECT studentName
AS 姓名,address
AS 地址,’北京信息中心’ AS 学校名称FROM student
;
常用函数——聚合函数
函数名 | 作用 |
---|---|
AVG() | 返回某字段的平均值 |
COUNT() | 返回某字段的行数 |
MAX() | 返回某字段的最大值 |
MIN() | 返回某字段的最小值 |
SUM() | 返回某字段的和 |
常用函数——字符串函数
函 数 名 | 作 用 | 举 例 |
---|---|---|
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 |
查询多表数据
表连接:比较运算符:子查询只能返回单个数值
子查询:IN/NOT IN:子查询可返回多条记录
高级查询
EXISTS子查询
SELECT …… FROM 表名 WHERE EXISTS(子查询);
子查询有返回结果: EXISTS子查询结果为TRUE
子查询无返回结果: EXISTS子查询结果为FALSE, 外层查询不执行
NOT EXISTS子查询
参考语句:
SELECT AVG(studentresult) + 5 AS 平均分
FROM result
WHERE NOT EXISTS
(SELECT * FROM `result`
WHERE `examDate` = (
SELECT MAX(`examDate`)
FROM `result`
WHERE `subjectNo` = (
SELECT `subjectNo`
FROM `subject`
WHERE
`subjectName` = ‘Logic Java‘
)
)
AND `studentResult` > 60
);
?
子查询注意事项
任何允许使用表达式的地方都可以使用子查询
嵌套在父查询SELECT语句的子查询可包括
SELECT子句
FROM子句
WHERE子句
GROUP BY子句
HAVING子句
只出现在子查询中而没有出现在父查询中的列不能包含在输出列中
分组查询用法:
SELECT …… FROM <表名> WHERE ……GROUP BY ……
分组筛选语句
SELECT …… FROM <表名>WHERE ……GROUP BY ……HAVING……
WHERE与HAVING对比
WHERE子句
用来筛选 FROM 子句中指定的操作所产生的行
GROUP BY子句
用来分组 WHERE 子句的输出
HAVING子句
用来从分组的结果中筛选行
常用的多表连接查询:
内连接(INNER JOIN)
外连接
左外连接 (LEFT JOIN)
右外连接 (RIGHT JOIN)
内连接语句
SELECT …… FROM 表1,表2WHERE ……
SELECT …… FROM 表1INNER JOIN 表2ON ……