MySQL(DDL DML DQL DCL)
文章目录
- 服务器
- 数据库
- MySQL: 数据库软件
- SQL: 结构化查询语句
- DDL: 操作数据库和表
- 操作数据库
- 操作表
- 列数据类型
- 操作表的语法
- DML: 操作表中的数据
- where子句运算符
- 增-input
- 删-delete
- 改-update
- DQL: 查询
- 查询表中数据
- 表达式对查询的列进行运算
- 添加别名(as)
- select查询语句顺序
- where子句查询
- 分组统计(group by--having)
- 排序(order by)
- 分页展示(limit)
- 合并查询(union)
- DCL:数据库权限
- 远程登录数据库
- 数据库表的设计
服务器
服务器:服务器是硬件和软件的结合体 能够对外提供某种服务 我们就叫做服务器数据库服务器:一台装有MySQL服务软件的电脑 能够对外提供数据增删改查的服务 我们就叫做数据库服务器web服务器:一台装有web服务软件(例如,Tomcat)的电脑 能够对外提供上网(网络资源的访问,比如图片,音乐,视频等等,文字,等等)服务 那么这台电脑就可以称作web服务器
数据库
概念数据存储的仓库,用于存储和管理数据常见的数据库产品Oracle: oracle公司 大型的关系型数据库 收费的DB2: IBM公司 大型的关系型数据库 收费的Mysql: mysql公司 中小型关系型数据库 免费的。后来被oracle收购 mysql6之后收费(社区版(免费的) 旗舰版)Sql Server: 微软公司 中小型关系型数据库 收费的Sqllite: 安卓系统内置数据库 微型关系型数据库 免费的关系型数据库: 数据的存储结构 有行和列组成的这种二维表 并且表和表之间存在对应关系非关系型数据库:比如用 键值存储数据这种数据库 类似JSON 例如:Redis
MySQL: 数据库软件
卸载:1.关闭mysql服务a.手动关闭:我的电脑-->右键-->管理b.cmd-->services.msc,打开服务面板c.cmd-->net stop mysql(注意获取cmd管理员权限)2.卸载3.删除数据存储文件找到mysql的安装目录。中my.ini文件 datadir目录,删除使用:登陆数据库:cmd-->mysql -uroot -p密码服务: 系统后台进程启动服务: net start mysql停止服务: net stop mysql删除服务: sc delete mysql 配置:
修改mysql的密码步骤:1.停止mysql服务 运行输入services.msc 停止mysql服务或者 cmd -- net stop mysql2.在cmd下输入 mysqld -- skip-grant-tables 启动服务器 光标不动(不要关闭该窗口)3.新打开cmd 输入mysql -u root -p 旧密码 use mysql;update user set password=password('123456') WHERE User='root';4.关闭两个cmd窗口 在任务管理器结束mysqld进程 5.在服务管理页面 重启mysql 服务
SQL: 结构化查询语句
概念SQL是Structured Query Language的缩写,中文译为“结构化查询语言”。结构化查询语言,是针对关系型数据库,指定的一套操作数据库的语法规范,只要是关系型数据库,都要遵循此规范,但是允许各家数据库存在差异,这些差异我们称之为方言SQL分类DDL(Data Definition Language): 数据定义语言,用来定义数据库对象: 库、表、列等DML(Data Manipulation Language): 数据操作语言,用来定义数据库记录(增、删、改)DCL(Data Control Language): 数据控制语言,用来定义访问权限和安全级别DQL(Data Query Language): 数据查询语言,用来查询记录(数据)
DDL: 操作数据库和表
操作数据库
-- ``反引号在创建数据库,表时 用来规避关键字 -- 创建数据库
create database `数据库名称`;-- 删除数据库
drop database `数据库名称`;-- 修改数据库字符集
ALTER DATABASE 数据库名称 CHARACTER SET='utf8';-- 查看当前数据库服务器中的所有数据库
SHOW DATABASES;-- 查看前面创建的db01数据库的定义信息
SHOW CREATE DATABASE `数据库名称`;-- 备份数据库(在DOS执行)命令行
-- mysqldummp -u 用户名 -p -B 数据库1 数据库2 >文件名.sql
mysqldump -u root -p -B db01>d:\\bak.sql;-- 备份数据库的表(在DOS执行)命令行
-- mysqldummp -u 用户名 -p 数据库 表1 表2>文件名.sql
mysqldump -u root -p db01 users>d:\\bak.sql;-- 恢复数据库(进入Mysql命令行在执行)
-- source 文件名.sql
mysql -u root -p
source d:\\bak.sql;-- 恢复数据库(复制方式)
-- 新建新查询编辑器->复制bak.sql内容->粘贴到新查询编辑器->运行
操作表
列数据类型
表,有表头(或者叫字段)
字段或者说表头,是有数据类型的
分类 | 数据类型 | 说明 |
---|---|---|
整数型 | 没有指定unsigned就是有符号 | 指定unsigned就是无符号 |
bit(M) | 位类型 M指定位数 默认值为1 范围1~64 | |
tinyint[unsigned] 占1个字节 | 有符号范围-128~127 无符号0~255 默认有符号 | |
smallint[unsigned] 占2个字节 | 有符号范围-215~215-1 无符号0~2^16-1 | |
mediumint[unsigned] 占3个字节 | 有符号范围-223~223-1 无符号0~2^24-1 | |
int[unsigned] 占4个字节 | 有符号范围-231~231-1 无符号0~2^32-1 | |
bigint[unsigned] 占8个字节 | 有符号范围-263~263-1 无符号0~2^64-1 | |
浮点型 | float[unsigned] 占4个字节 | |
doouble[unsigned] 占8个字节 | 比float精度更大的小数 | |
decimal(M,D)[unsigned] | 定点数 M指定长度 D表示小数点的位数 | |
文本、二进制类型 | char(size) char(20) | 固定长度的字符串 最大255 |
varchar(size) varchar(20) | 可变长度字符串 0~65535[2^32-1] | |
text longtext | 文本TEXT(0~2^16) LONGTEXT(0~2^32) | |
blob longblob | 二进制数据blob(0~2^16-1) longblob(0~2^32-1) | |
时间日期类型 | (YYYY-MM-DD) (YYYY-MM-DD HH:MM:SS) | |
date | 年月日 | |
datetime | 年月日 时分秒 | |
timestamp | 时间戳 可用于自动记录insert与update操作的时间 |
可变长度字符串 最大65532字节 【utf8编码最大21844字符 1-3个字节用于记录大小】
如果表的编码是 utf8 varchar(size) size = (65535-3) / 3 = 21844
如果表的编码是 gbk varchar(size) size = (65535-3) / 2 = 32766CREATE TABLE `time`{login_time TIMESTAMP--如果希望login_time列自动更新 需要进行下面的配置NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
}
操作表的语法
-- 建表之前,先选择库
use `数据库名称`;-- 创建表
-- 建表时 可以加上字段说明
create table `emp`(`id` INT COMMENT '员工编号',`name` VARCHAR(32) COMMENT '员工姓名',`sex` CHAR(1),`birthday` DATE,`entry_date` DATE,`job` VARCHAR(32),`salary` DOUBLE,`resume` TEXT)character set utf8 collate utf8_bin engine innodb;character set字符集
collate校对规则
engine innodb引擎-- 添加语句
insert into `表名` values(-128);-- 删除表
drop table `表名`;-- 修改表名
rename table emp to employee
alter table emp rename to employee;-- 查询表
select * from `表名`;-- 查看该库中所有的表
show tables;-- 显示表的结构(查看表的所有列)
desc 表名;-- 对表头的操作 alter
-- 添加列
alter table `emp`add image varchar(32) after resume;-- 删除列
alter table `emp`drop sex;-- 修改列的数据类型
alter table `emp`modify job varchar(60);-- 可以在修改列名时 可以修改数据类型
alter table employee change change `name` `name` varchar(60); -- 修改列名
alter table employee change `name` `user_name` varchar(32) not NULL default '';-- 修改字符集
alter table employee character set utf8;
DML: 操作表中的数据
where子句运算符
比较运算符 | ||
---|---|---|
> < <= >= = <> != | 大于 小于 小于(大于)等于 不等于 | |
between … and … | 显示在某一区间的值 | |
in(set) | 显示在in列表中的值 如in(100,200) | |
列名 like ‘张%’ / not like ’ ’ | 模糊查询 | |
is null / is not null | 判断是否为空 | |
逻辑运算符 | ||
and | 多个条件同时成立 | |
or | 多个条件任一成立 | |
not | 不成立 如not(salsry>100) |
增-input
-- 向表中插入数据
insert into table_name (column...)values(value...)
-- column是列名 如果不写,默认添加全部的值
-- value是需要往column中添加的值-- 向employee表中添加数据
-- id 字段添加 1
-- salary 字段添加 3000
insert into employee (id,`salary`)values(1,3000)1.插入的数据应于数据类型相同
2.数据的长度应该在列的规定范围内
3.在VALUES中列出的数据位置 必须与被加入的列的排列位置相对应
4.字符和日期类型数据应包含在单引号中''
5.列可以插入空值insert into table values(null)
6.添加多条记录insert into table (column...)values(value...),(value...),(value...)
7.如果给表中的所有列添加数据 可以不写前面的列名insert into table_name values(value...)
8.不给某个字段值时 如果有默认值就添加默认值 否则报错如果某个字段没有指定NOT NULL 那么添加数据时没有给定值 则默认给NULL
9.timestamp 日期类型 你不给值或者给null值 他就会取系统的时间
删-delete
-- 删除表中的数据
-- 逐行删 如果数据多 删的慢
delete from table_name where where_definition
-- where_definition判断删除那些行
-- 不写WHERE表示删除表中的所有数据-- 删除所有记录
-- 先删除表 再创建表 效率高一些
truncate table 表名;-- 删除employee表中数据
-- 删除 id字段为1 的数据
delete from employee where id = 1 1.如果不使用WHERE子句 将删除表中的所有数据
2.DELETE不能删除某一列的值(可以使用UPDATE将某列的值设为null或'')
3.使用DELETE只能删除表中数据 不能删除表本身
-- 如果要删除表 可以使用 drop table 表名;
-- 如果要删除列 可以使用 alter table 表名 drop 列名;★truncate 清空表格式:truncate 表名; 干掉表,重新创建一张空表和delete from 区别:delete属于DML语句 truncate属于DDL语句delete逐条删除 truncate干掉表,重新创建一张空表
改-update
-- 修改表中数据
update table_nameset col_name1 = expr1, col_name2 = expr2 ...where where_definition
-- col_name1要修改的列名 expr1要修改后的值
-- where_definition判断修改那些行
-- 不写WHERE表示修改所有行-- 修改employee表中的数据
-- 只修改id字段为2的行中的salary值
update employeeset salary = 9000where id = 21.update语法可以用新值更新原有表中的各列
2.set子句指示要修改那些列和要给予那些值
3.where子句指定应更新那些行若不写WHERE子句 则更新所有的行
4.如果要修改多个字段 可以通过set 字段1 = 值1, 字段2 = 值2 ...
DQL: 查询
查询表中数据
●查询表中数据SELECT [DISTINCT] *|{column1, column2 ...}FROM table_name;DISTINCT可选 在显示结果时 每一列都相同,则去掉重复的数据*代表查询所有的列column查询指定的列名FROM指定查询哪张表-- 查询student表中所有学生信息
SELECT * FROM student;
-- 查询student表中学生的姓名和学生的英语成绩
SELECT `name`,english FROM student
-- 过滤表中重复的数据
SELECT DISTINCT * FROM student
表达式对查询的列进行运算
●使用表达式对查询的列进行运算SELECT *|{column1|expression, column2|expression ...}FROM table_name;expression表达式|代表或-- 查询student表中学生的姓名和学生的总成绩
SELECT `name`,(chinese+english+math) FROM student;
添加别名(as)
●使用as语句 添加别名SELECT column_name as 别名 FROM 表名;#使用别名来表示学生的总成绩
SELECT `name`,(chinese+english+math) AS totoal_score FROM student;
#简写别名
SELECT `name`,(chinese+english+math) totoal_score FROM student;
select查询语句顺序
DQL: 查询
书写顺序:SELECT selection_list /*要查询的列名称*/FROM table_list /*要查询的表名称*/WHERE condition /*行条件*/GROUP BY grouping_columns /*对结果分组*/HAVING condition /*分组后的行条件*/ORDER BY sorting_columns /*对结果排序*/LIMIT offset_start(起始索引), row_count(展示数量) /*结果分页*/执行顺序:
(7) SELECT
(8) DISTINCT <select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) HAVING <having_condition>
(9) ORDER BY <order_by_condition>
(10) LIMIT <limit_number>
where子句查询
-- 查询姓名为赵云的学生成绩
SELECT * FROM studentWHERE `name` = '赵云'; -- 查询英语分数在80-90之间的学生
SELECT * FROM studentWHERE english BETWEEN 80 AND 90;-- 查询数学分数为89,90,91的学生
SELECT * FROM studentWHERE math IN(89, 90, 91);-- 模块查询 like
-- 模糊查询时要用到两个通配符
-- % 匹配多个任意字符
-- _ 匹配单个任意字符
-- 查询所有姓韩的学生成绩
SELECT * FROM studentWHERE `name` LIKE '韩%';-- 我要查询姓名第二个字母是D
SELECT * FROM emp WHERE ename LIKE '_D%'; -- 查询奖金为null的
SELECT * FROM emp WHERE comm IS NULL; -- 查询奖金不为null的
SELECT * FROM emp WHERE comm IS NOT NULL;
分组统计(group by–having)
●group by子句对列进行分组SELECT column1, column2 ... FROM table_nameGROUP BY column ●having子句对分组后的结果进行过滤SELECT column1, column2 ... FROM table_nameGROUP BY column having ...注意这里的where是对分组前的条件限定 也就是说不满足条件的 不参与分组
where和having区别where:在分组之前对条件进行限定。不满足条件,就不会参与分组having:在分组之后 对结果集的筛选#显示每个部门的平均工资和最高工资
SELECT deptno , AVG(sal) ,MAX(sal)FROM emp GROUP BY deptno;#显示每个部门的每种岗位的平均工资和最低工资
SELECT deptno, job, AVG(sal), MIN(sal) FROM emp GROUP BY deptno, job;#显示平均工资低于2000的部门号和它的平均工资
#HAVING 是对分组之后的结果 进行再次筛选
SELECT deptno, AVG(sal) AS avg_salFROM empGROUP BY deptnoHAVING avg_sal < 2000;#每个部门的部门编号 以及每个部门工资大于1500的人数
#where 在分组之前进行条件的筛选。
SELECT deptno AS '部门编号',COUNT(*) AS '部门人数' FROM emp WHERE sal>1500 GROUP BY deptno;#查询各个部门 员工工资大于1500 的平均工资
#并且平均工资 大于3000的部门
SELECT deptno AS '部门编号',AVG(sal) AS '部门平均工资' FROM emp WHERE sal>1500 GROUP BY deptno HAVING 部门平均工资>3000;
排序(order by)
●使用order by语句 排序SELECT column1, column2 ...FROM tableORDER BY column asc(默认 升序)|desc(降序)#对数学成绩排序输出(升序)
SELECT * FROM studentORDER BY math;#对总分按从高到低的顺序输出
SELECT `name`,(math+chinese+english) AS total_score FROM studentORDER BY total_score DESC; #对姓韩的学生总分排序输出(升序)
SELECT `name`,(math+chinese+english) AS total_score FROM studentWHERE `name` LIKE '韩%'ORDER BY total_score;
分页展示(limit)
LIMIT 起始索引, 展示数量 /*结果限定*/#分页展示
#起始索引=(页码-1)*每页条数#一页展示 3条
#第一页
SELECT * FROM emp LIMIT 0,3;#第二页
SELECT * FROM emp LIMIT 3,3;#第三页
SELECT * FROM emp LIMIT 6,3;#既有条件,又有排序,又有分页
SELECT * FROM emp WHERE comm IS NOT NULL ORDER BY comm DESC LIMIT 0,3;
合并查询(union)
-- union all 就是将两个查询结果合并 不会去重
SELECT ename,sal,job FROM emp WHERE sal>2500 -- 5
UNION ALL
SELECT ename,sal,job FROM emp WHERE job='MANAGER' -- 3-- union 就是将两个查询结果合并 会去重
SELECT ename,sal,job FROM emp WHERE sal>2500 -- 5
UNION
SELECT ename,sal,job FROM emp WHERE job='MANAGER' -- 3
DCL:数据库权限
★mysql数据库权限问题root:拥有所有权限权限账户:只拥有部分权限(CURD)例如,只能操作某个数据库的某张表★mysql数据库 用户配置:user表
-- 使用数据库
USE mysql;
-- 查询用户密码
Select password('root');
-- 查询数据库用户
SELECT * FROM USER; ★修改mysql用户密码
-- MySQL5.5修改密码
UPDATE USER SET PASSWORD=PASSWORD('123456') WHERE USER='root';
-- MySQL5.7修改密码
UPDATE USER SET authentication_string=PASSWORD('123456') WHERE USER='root';★分配权限账户
方式一语法:GRANT 权限 ON 数据库名.某张表名 TO '用户名'@'localhost' IDENTIFIED BY '123456';#@后面可以是localhost也可以是ip 也可以给% #(%代表任意一台计算机都可以连接上来)例子: GRANT SELECT ON my_database.`users` TO 'root'@'localhost' IDENTIFIED BY '123456';#注意分配多个权限用逗号隔开例子:GRANT DELETE,SELECT,UPDATE ON my_database.`users` TO 'root'@'localhost' IDENTIFIED BY '123456';
方式二 INSERT INTO USER(HOST, USER, PASSWORD, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest',PASSWORD('guest123'),'Y', 'Y', 'Y'); ★删除用户
Delete FROM user Where User='用户名' and Host='localhost';★备份数据库
-- 备份数据库(在DOS执行)命令行
-- mysqldummp -u 用户名 -p -B 数据库1 数据库2 >文件名.sql
mysqldump -u root -p -B db01>d:\\bak.sql;-- 备份数据库的表(在DOS执行)命令行
-- mysqldummp -u 用户名 -p 数据库 表1 表2>文件名.sql
mysqldump -u root -p db01 users>d:\\bak.sql;-- 恢复数据库(进入Mysql命令行在执行)
-- source 文件名.sql
mysql -u root -p
source d:\\bak.sql;-- 恢复数据库(复制方式)
-- 新建新查询编辑器->复制bak.sql内容->粘贴到新查询编辑器->运行
远程登录数据库
1.切换库
use mysql; 2.授权远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; 3.刷新
flush privileges; 4.然后退出mysql
exit;5.启动服务
service mysqld start6.查看状态
service mysqld status7.远程登录
mysql -h IP地址 -P 3306 -u root -p123456
数据库表的设计
数据库设计引入需求分析 -> 需求分析师 -> 原始需求 -> 抽取业务模型图书模型: 图书名称 版本号 作者 出版社学生模型: 学号 学生姓名 手机号码......角色: 学生 老师 图书管理员《需求说明书》需求设计 概要设计 抽取实体: 业务模型 -> 实体模型(java类 c++类)内存class Book{ name, bookNo, author }数据库设计:业务模型/实体模型 - > 数据模型(硬盘)数据库表设计问题: 如何设计?详细设计类详细 属性和方法三大范式设计原则: 建议设计的表尽量遵守三大范式第一范式: 要求表的每个字段必须是不可分割的独立单元student : name -- 违反第一范式 张小名|狗娃 sutdent : name old_name --符合第一范式张小名 狗娃第二范式: 在第一范式的基础上,要求每张表只表达一个意思。表的每个字段都和表的主键有依赖。 employee(员工): 员工编号 员工姓名 部门名称 订单名称 --违反第二范式员工表: 员工编号 员工姓名 部门名称 订单表: 订单编号 订单名称 -- 符合第二范式第三范式: 在第二范式基础,要求每张表的主键之外的其他字段都只能和主键有直接决定依赖关系。员工表: 员工编号(主键) 员工姓名 部门编号 部门名 --符合第二范式,违反第三范式(数据冗余高)员工表: 员工编号(主键) 员工姓名 部门编号 --符合第三范式(降低数据冗余)部门表: 部门编号 部门名
MySQL(DDL DML DQL DCL)相关推荐
- Python|SQL详解之DDL|DML|DQL|DCL|索引|视图、函数和过程|JSON类型|窗口函数|接入MySQL|清屏|正则表达式|executemany|语言基础50课:学习(14)
文章目录 系列目录 原项目地址 第41课:SQL详解之DDL 建库建表 删除表和修改表 第42课:SQL详解之DML insert操作 delete 操作 update 操作 完整的数据 第43课:S ...
- MySQL 的DDL DML DQL DCL细节解析 知道这些就够了
SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data Definition Language) 对象: 数据库和表 ...
- dml语句包括哪些_聊聊MySQL基本操作DDL,DML,DQL,DCL
本篇文章来回顾一下MySQL的基本操作之DDL,DML,DQL,DCL,每种操作都有各自不同的语法,常用的操作汇总如下. 一.DDL-数据定义语言 作用:数据定义语言主要用来定义数据库中的各类对象,包 ...
- MySql基础汇总-DDL DML DQL DCL,存储过程,事务,触发器,函数等
use testdb;-- /**********************************************一:数据库操作语言****************************** ...
- 如何管理和使用哪些命令操作MySQL数据库?(基本操作,SQL语言,DDL,DML,DQL,DCL,Windows字符和图形界面MySQL安装)
文章目录 前言 一:数据库基本操作命令 1.1:MySQL常用管理操作是哪些? 1.2:查看数据库列表信息的命令是? 1.3:查看数据库中的数据表信息命令是? 1.4:显示数据表的结构(字段)命令是? ...
- Mysql的DDL DML DQL DCL
m代表长度(1-65) d代表保留少数位(0-30) 整数型 tinyint(m)1字节 取值范围(-128-+127) int(m)4字节 取值范围(大概20几亿) 浮点型 double(m,d)8 ...
- MySQL 数据库 - 通用语法 DDL DML DQL DCL
目录 数据模型 通用语法及分类 DDL(数据定义语言) 数据库操作 表操作-查询 表操作-创建 表操作-修改 表操作-删除 表操作-数据类型 DML(数据操作语言) DML介绍 DML添加数据 DML ...
- SQL分类:DDL/DML/DQL/DCL以及作用
sql分类 1 DDL(Data Definition Language:数据库定义语言,操作数据库,表(创建,删除,修改)) 2 DML(Data Manipulation Language:数据库 ...
- DDL,DML,DQL,DCL概念
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHERE ...
最新文章
- oracle何时使用to_date函数
- 会议室管理前端页面_福州会议室钟联系方式
- qpushbutton设置居中_Qt QGridLayout自动将项目居中(移动)到中间。
- 基于MATLAB的面对对象编程(3)——事件和响应
- python 的dict的append()?
- PHP的curl实现get,post 和 cookie(几个实例)
- 【转载保存】hadoop三个配置文件的参数含义说明core-site.xml、hdfs-site.xml、...
- 语法推导树之短语,直接短语,句柄
- 用前考虑清楚,伤敌一千自损八百的字体反爬虫
- 局域网传文件_手机和电脑之间互传比较大的文件,哪种方式比较好?
- 201771010111李瑞红《第十六周学习总结》
- 阶段3 2.Spring_07.银行转账案例_7 代理的分析
- Smobiler中Poplist控件的用法
- android文字识别apk,照片转文字识别提取apk
- html桌面天干地支,天干地支-janlen-ChinaUnix博客
- 《C Primer Plus第六版》第六章复习题目和编程练习题的答案
- 【AAAI2023】视觉辅助的常识知识获取Visually Grounded Commonsense Knowledge Acquisition 个人学习笔记
- csr8811蓝牙芯片porting总结
- 计算2个拼音的相似度 PHP版本
- 融资租赁系统-覆盖业务全场景数据服务