下述部分内容来自
ACID
DCL
mysql
我只是做了一个总结、若侵则删。
DB、DBMS、SQL
DB(database)
长期保存在计算机的存储设备上,按照一定规则组织起来,可以被用户或应用共享的数据集合。
DBMD(database management system)
一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。用户通过数据库管理系统访问数据库中的数据。
SQL(Structure Query Language)
构化查询语言。关系型数据库中进行操作标准语言。编程语言。
SQL对大小写不敏感;结尾需要使用分号
SQL的四大组成
名称 | 作用 |
---|---|
DDL(Data Definition Language)数据定义语言 | 用来定义数据库对象:库、表、列等。包括创建表,修改表,删除表。 |
DML(Data Manipulation Language)数据操纵语言 | 用来定义数据库记录:是对表中数据的操作。包括插入,更新,删除数据 |
DCL(Data Control Language )数据控制语言 | 用来定义访问权限和安全级别 |
DQL(Data QueryLanguage)数据查询语言 | 用来查询记录(数据):只有SELECT语句 |
DDL(Data Definition Language)数据定义语言
DDL操作数据库
创建数据库
CREATE DATABASE 数据库名称; – 创建数据库
CREATE DATABASE 数据库名 SET GBK; – 创建数据库并设置为gbk编码格式
CREATE DATABASE 数据库名 SET GBK COLLATE gbk_chinede_ci; – 创建一个使用gbk字符集,并带校对规则的数据库
查询数据库
SHOW DATABASES; – 查看当前数据库服务器中的所有数据库
SHOW CREATE DATABASE 数据库名; --查看创建数据库时的定义信息
删除数据库
DROP DATABASE 数据库名; – 删除指定数据库
修改数据库
ALTER DATABASE 数据库名 CHARACTER SET utf8; – 将数据库的字符集改为utf8
数据库编码
character_set_client为客户端编码方式;
character_set_connection为建立连接使用的编码;
character_set_database数据库的编码;
character_set_results结果集的编码;
character_set_server数据库服务器的编码;
如果数据乱码,可以show variables like ‘character%’; 查看编码,如果不为utf8,自行百度如何解决。
DDL操作数据表
在创建表格之前需要先选择表格创建的数据库,所以需要选择数据库:
USE 数据库名; – 使用数据库
SELECT DATABASE(); – 选中数据库
创建数据表
语法: CREATE TABLE 表名(
字段1 字段类型,
字段2 字段类型,
…
字段n 字段类型
);
常用数据类型:
int:整型
double:浮点型;
char:固定长度字符串类型;
varchar:可变长度字符串类型;
text:字符串类型;
blob:字节类型;
date:日期类型,格式为:yyyy-MM-dd;
time:时间类型,格式为:hh:mm:ss
timestamp:时间戳类型 yyyy-MM-dd hh:mm:ss 会自动赋值
datetime:日期时间类型 yyyy-MM-dd hh:mm:ss
常用操作 (默认表为employee) | 代码 |
---|---|
显示当前数据库中所有表 | SHOW TABLES; |
查看表的字段信息 | DESC employee; |
在表中插入一个image列,此列为字节类型(插入列的时必须指定列的类型) | ALTER TABLE employee ADD image BOLB; |
修改job列,使其长度为60 | ALTER TABLE employee MODIFY job VARCHAR(60); |
删除image列,一次只能删一列 | ALTER TABLE employee DROP image; |
表名改为user | RENAME TABLE employee TO user; |
查看表格的创建细节 | SHOW CREATE TABLE employee; |
修改表的字符集为gbk | ALTER TABLE employee CHARACTER SET GBK; |
列名name修改为username | ALTER TABLE employee CHANGE name username VARCHAR(100); |
删除表 | DROP TABLE emoloyee; |
DML(Data Manipulation Language)数据操纵语言
DML是对表中的数据进行增、删、改的操作
INSERT增加操作:
插入一条记录的语法:
INSERT INTO 表名(字段1,字段2,…) VALUES(值1,值2,…);
插入操作中要注意:字段和值要一一对应,字段相当java中的形参,值相当于实参,值数可以少于字段数,但不能多。插入空值使用null。插入字符串和日期需要使用单引号括起来。
UPDATE更新操作:
语法: UPDATE 表名 SET 列名1=列值1,列名2=列值2,… WHERE 列名=列值;
DELETE删除操作:
语法:DELETE FROM 表名 (WHERE 列名=值);
DQL(Data QueryLanguage)数据查询语言
数据库执行DQL语句不会对数据进行改变,二十让数据库发送结果集给客户端。查询发挥的结果集是一张虚拟表。
基本语法: SELECT 列名 FROM 表名
语法:
SELECT selection_list /要查询的列名称/
FROM table_list /要查询的表名称/
WHERE condition /行条件/
GROUP BY grouping_columns /对结果分组/
HAVING condition /分组后的行条件/
ORDER BY sorting_columns /对结果分组/
LIMIT offset_start, row_count /结果限定/
条件查询
条件查询就是在查询时给出WHERE子句,在WHERE子句中可以使用如下运算符及关键字:
=、!=、<>、<、<=、>、>=;
BETWEEN…AND;
IN(set);
IS NULL; IS NOT NULL
AND;
OR;
NOT;
说明:
<>的作用与!=的作用完全相同,只是<>出现的比较早。
BETWEEN…AND 还可以查日期的范围
IN中的参数为查询范围,各值之间用逗号隔开
IS NULL 是进行非空判断,与之相对的是IS NOT NULL
模糊查询(LIKE)
模糊查询使用通配符补充模糊地方。通配符有两个:’_‘表示一个任意字符,’%'表示任意多个字符。使用模糊查询需要用到关键字:LIKE。
举例:(比如我们要找的是s开头后面两位任意,第四位为0后面任意长度的学生姓名~)
SELECT * FROM emp WHERE sname LIKE 's__0%';
字段控制查询(DISTINCT)
比如我们要查emp表中sal,想了解一下员工的薪水档次都有那些,就不想看每个人的薪水,字段控制不要查询重复的薪水:
SELECT DISTINCT sal FROM emp;
排序(ORDER BY)
ASC:升序(默认值)
DESC:降序
分组查询
比如说我们需要按照部门来查询每个部门的工资和,就需要按照部门来分组。
子句:GROUP BY
查询每个部门的编号,人数以及每个部门的工资和:
SELECT deptno,COUNT(*) num,SUM(sal) SUM FROM emp GROUP BY deptno ;
子句:HAVING 作用是分组后对数据进行过滤,区别于WHERE
聚合函数
聚合函数是用来做纵向运算的函数。
COUNT():统计指定列不为NULL的记录行数;
MAX():计算指定列的最大值,如果指定列是字符串类型,那么使用字符串排序运算;(字典比较)
MIN():计算指定列的最小值,如果指定列是字符串类型,那么使用字符串排序运算;(字典比较)
SUM():计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;
AVG():计算指定列的平均值,如果指定列类型不是数值类型,那么计算结果为0;
MySQL方言——LIMIT
LIMIT 用来限定查询结果的起始行以及总行数。
与编程语言相同,这里的起始行索引也是从0开始的。
从0行开始查询5行记录:
SELECT * FROM emp LIMIT 0,5;
查询代码的书写顺序和执行顺序
查询语句的书写顺序:SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY-LIMIT
查询语句的执行顺序:FROM-WHERE-GROUP BY-HAVING-SELECT-ORDER BY-LIMIT
DCL(Data Control Language )数据控制语言
用户管理
查询用户
MySQL把用户的数据存放在 “mysql” 数据库的 “user” 表中。
SELECT * FROM user;
创建用户
CREATE USER ‘用户名’@‘主机名’ IDENTIFIED BY ‘密码’; /*
主机名为 localhost 时仅限本地登陆,填写 % 时任何机器都可以登陆 */
删除用户
DROP USER ‘用户名’@‘主机名’;
修改用户密码
UPDATE USER SET PASSWORD = PASSWORD(‘新密码’) WHERE USER = ‘用户名’; – 普通方式
SET PASSWORD FOR ‘用户名’@‘主机名’ = PASSWORD(‘新密码’); – 特有的简化方式
重置 root 用户密码
1) 命令提示符在管理员模式下停止 MySQL 服务: net stop mysql
2) 管理员模式下使用无验证方式启动MySQL服务: mysqld --skip-grant-tables
3) 开启新的命令行窗口进入MySQL: mysql
4) 进入 ‘mysql’ 数据库: USE mysql;
5) 使用修改用户密码语句对root密码进行重置。
6) 启动"运行"窗口,运行命令结束"mysqld"进程: taskkill /im mysqld.exe /f
7) 命令提示符在管理员模式下启动 MySQL 服务: net start mysql
8) 可以用新密码登陆 root 用户。
权限管理
查询用户权限
SHOW GRANTS FOR ‘用户名’@‘主机名’;
授予权限
GRANT 权限列表 ON 数据库名.表名 TO ‘用户名’@‘主机名’;
GRANT ALL ON . TO ‘用户名’@‘主机名’; – 使用通配符给用户授予全部权限
撤销权限
<