数据库(DataBase)-- 存储数据的仓库
存于数据库中的数据(优点):
关系数据库: 数据的逻辑组织是表
数据库发展历程:
数据库体系结构:
数据库 – 硬盘
MySQL数据库管理系统(DBMS) – 运行在内存
DBMS : DataBaseManagerSystem 数据库管理系统
所有对数据都要通过DBMS来进行, DBMS会将要操作的数据拷贝到内存中操作,只有在提交事务之后,在内存中所做的操作才会写入硬盘,真正变成永久保存。
SQL语言:结构化查询语言,是关系型数据库统一的操作语言
SQL语句分类
SHOW DATABASES;
USE 数据库名;
CREATE DATABASE [IF NOT EXISTS] mydb1
;ALTER DATABASE mydb1 CHARACTER SET utf8;
CREATE TABLE emp( eid CHAR(6),ename VARCHAR(50));
SHOW TABLES;
DESC 表名;
DROP TABLE 表名;
INTERT INTO 表名(列名1,列名2,...) VALUES(列值1, 列值2,...)
UPDATE 表名 SET 列名1=列值1, 列名2=列值2, ... [WHERE 条件]
DELETE FROM 表名 [WHERE 条件];
使用root登录(此时权限最大),而后进行权限操作
(1)CREATE USER 用户名@IP地址 IDENTIFIED BY ‘密码’;
用户只能在指定的IP地址上登录
(2)CREATE USER 用户名@’%’ IDENTIFIED BY ‘密码’;
用户可以在任意IP地址上登录
2.给用户授权
(1)GRANT 权限1, … , 权限n ON 数据库.* TO 用户名@IP地址
权限、用户、数据库
给用户分派在指定的数据库上的指定的权限
例如:GRANT CREATE,ALTER,DROP,INSERT,UPDATE,DELETE,SELECT ON mydb1.* TO user1@localhost;
REVOKE delete ON mydb1.* FROM user1@localhost;
验证方法:使用user1登录,而后切换到mydb1数据库,执行delete操作将错误。具体如下:
(1)mysql -uuser1 -p123
(2) use mydb1;
(3)delete from stu;
SHOW GRANTS FOR 用户名@IP地址
查看指定用户的权限
如:SHOW GRANTS FOR user1@localhost;
DROP USER 用户名@IP地址
如:DROP USER user1@localhost;
此时再用user1登录将出错。
SELECT * FROM 表名;
SELECT 列1 [, 列2, ... 列N] FROM 表名;
SELECT DISTINCT * | 列1 [, 列2, ... 列N] FROM 表名;
Java中字符串连接符号为+;
Oracle中字符串连接符号为||;
MySQL中字符串连接符号为CONCAT ;
例如:SELECT CONCAT('$', sal) FROM emp;
又如:select concat(ename,job) from emp;
select concat('my name is ',ename, ' my job is ',job) from emp;
与前面介绍的UPDATE和DELETE语句一样,SELECT语句也可以使用WHERE子句来控制记录。
说明:条件必须是一个boolean类型的值或表达式;
运算符:=、!=、<> 、>、<、>=、<=、BETWEEN...AND、IN(...)、IS NULL、NOT、OR、AND
SELECT * FROM emp WHERE ename LIKE '%';
注意:这个条件等同于不存在(该条件有无均可,既可以去掉),但如果姓名为NULL的查询不出来!
查询姓名中第二个字符为“h”的所有员工。
SELECT * FROM emp WHERE ename LIKE '_h%';
1 SELECT * FROM emp ORDER BY sal ASC;
按sal排序,升序!
ASC升序 可以省略
DESC降序 不能省略
2 使用多列作为排序条件
SELECT * FROM emp ORDER BY sal ASC, comm DESC;
--> 使用sal升序排,如果sal相同时,使用comm的降序排。
SELECT * FROM emp ORDER BY sal ASC, comm DESC,empno ASC;
--> 使用sal升序排,如果sal相同时,使用comm的降序排,如果sal和comm都相同时,使用empno升序排列。
聚合函数
聚合函数用来做某列的纵向运算。
COUNT-- SELECT COUNT(comm), COUNT(mgr) FROM emp;
功能:统计指定列不为NULL的记录行数;
SUM-- SELECT SUM(sal) FROM emp;
功能:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG -- SELECT AVG(sal) FROM emp;
功能:计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0。
MAX-- SELECT MAX(sal) FROM emp;
功能:计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算
MIN-- SELECT MIN(sal) FROM emp;
功能:计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算。
分组查询
分组查询是把记录使用某一列进行分组, 然后查询组信息。
SELECT job, COUNT(*) FROM emp GROUP BY job;
分组后条件: HAVING后的条件部分必须使用聚合函数作为条件。