详解数据库引擎与SQL语句增删改查(非常详细,带例)
数据库系统(DBMS): 专门负责数据管理的工具。增加数据、创建索引、建立索引之间的关联关系、更新索引。。。。。。
连接器:PHP要访问MySQL,可以通过API访问,也可以通过PHP的驱动,而那个驱动就是连接器。
数据的组织结构
层次型 :有上下级关系
网状型 :
关系型 :
关系型数据库管理系统(RDBMS) :以表的方式来展示,并且能帮我们去维护这些表和表之间关系的这么一个软件!
负责将数据从文件中抽取出来,并展示为表的格式
管理数据本身完整性
DBA视图:既能看到用户视图,又能看到物理视图。还能看到中间的处理过程
SQL基本组件
1、用户或者前端驱动。。。会发出SQL命令
2、SQL命令送给我们的DBMS以后,DBMS必须要接受下来,并且做处理
3、提供一个分析器,做词法分析,语法分析。。。。
4、分析的结果要生成执行计划----计划执行器(我们到底有多少种路径可以完成相应任务)
5、对每一条计划进行筛选,选出代价最小,性能最好的---优化器(先不执行,选择一条最优的执行方式)
6、这一切分析结束以后,语句执行要操作数据,文件的存取
7、文件读进来之后先缓存在内存中,---缓存器(先把数据读取到缓存器里面才能进行操作的)
8、缓存器中所提供的任何内容最终还要回存到硬盘中去---磁盘空间管理器(实现对磁盘空间中的某个数据文件中的数据到底该怎么存储进行管理)
9、故障恢复管理器---服务器崩溃,再次启动之后,把存储数据,正在存储数据恢复为正常状态
10、事务管理器
11、锁管理器
mysql简单应用
特性:mysql名:mysql安装到Windows上不需要命令大小写,安装在Linux上区分大小写
mysql基于tcp连接的
若服务器端和客户端在同一台主机上时;服务器端与客户端连接方式为:
Linux:socket (这种连接实现的是本机进程与进程之间的通信,不需要网络驱动来连接,速度非常快!)
windows:memory (共享内存)
socket:套接字文件,这个文件在/var/lib/mysql/mysql.sock
命令(选项和参数之间可以不用加空格)
mysql
-u :指定用户,指名以哪个用户的身份去连接(后面不跟用户名,默认为root)
-p :给这个用户提供密码(后面没有密码,默认为空密码)
-h :指定主机,你的服务器是谁?(后面没跟服务器地址,默认为localhost)
例:mysql -uroot -p -h 127.0.0.1 (第一次登陆)
MySQL数据库管理
数据库对象:
库、表、索引、视图、约束、存储过程、、存储函数、触发器(主动数据库)、游标、用户、权限、事务
关系型数据库最核心的组件就是表(行(row)、列(field/column)组成)
一个表称为实体
字段名称:定义一个字段时,这个字段中存储的是数据还是数值做一下说明(数据类型)。
数据类型:
字符(字符型默认情况下不区分大小写):
CHAR(字符长度) --->你最多存储多少个字符,最多存储256个字符
VARCHAR(字符长度) --->你最多存储多少个字符,最多存储65536个字符 (两个字节)(可变化空间)
BINARY(字符长度) --->以二进制格式进行存储(区分大小写的字符)(固定空间)
VARCHAR(字符长度) --->以二进制格式进行存储(区分大小写的字符)(可变化空间)
TEXT(文本长度) --->文本大对象,(不区分大小写)
BLOB(文本长度) --->二进制格式的文本大对象(区分大小写)
数值:
精确数值(整型),有6种变化,分别使用不同长度的字节来存储整数
TINYINT --->小整形,范围:一个字节,最多表示范围-128到127,或者0-255
SMALLINT --->微整形,范围:两个字节,最多表示范围-128到127,或者0-255
MEDIUMINT --->中等整形,范围:三个字节
INT --->范围:四个字节
BIGINT --->大整形,范围:八个字节
DECIMAL --->十进制
修饰符:UNSIGNED,无符号,
NOT NULL ,不允许为空
近似数值(浮点型)
FLOAT
DOUBLE
日期时间:
DATE --->日期
TIME --->时间
DETETIME --->日期时间
STAMP --->时间戳
布尔(逻辑):
内置(枚举):
表头(header):每一列的名称
列(row):具有相同数据类型的数据的集合
行(col):每一行用来描述某个人/物的具体信息
值(value):行的集体信息
键(key):表中用来识别某个特定的人/物的方法,键的值在当前列中具有唯一性
数据库命令分类及其常用命令(命令不区分大小写)
姓名(name) 年龄(age) 学号(id) 性别(sex) 电话(tel)
DDL:数据定义语言
create:创建数据库、表
create database; 数据库名称; --->创建数据库
create database if not exists 数据库名称; --->如果数据库不存在我们就创建
create table 指定库. 表名 (属性1,属性2,...); --->创建表
alter :修改数据库、表
alter table 表名
modify :修改某个字段(改字段属性)
change :改变某个字段(不改属性,改内容)
add :添加一个字段
drop :删除一个字段
drop :删除数据库、表
drop table 表名 --->删除表
drop table if exists 表名 --->表存在才删除表
drop database 数据库名; --->删除数据库
DML:数据操作语言(表)
insert:插入
insert into 表名 (字段名称1,字段名称2...)value("字符串",数值); --->数值不用加引号,不加字段名称代表每个字段都写
replace:替换
replace into
update:修改
update 表名 set 字段='替换内容' where name='名字'
delete:删除
delete from 表名 where 符合条件的行
DCL:数据控制语言
grant:给用户授权 也可以修改密码
grant 权限1,权限2,... on 库名.表名 to '用户名'@'主机名' identified by '密码';--->给用户授权,用户不存在自动创建用户
revoke:取回权限
revoke 权限1,权限2... on 库名.表名 from '用户名'@'主机名;
select 查询
select格式: select 指定字段 from 表名 条件
create user :创建用户 格式: create user '用户名'@'主机名' identified by '密码';
drop user :删除用户 格式: drop user '用户名'@'主机名';
select * from 表名; --->查看表中的内容
show databases; --->查看库
show tables from 指定库;--->查看库中的表
desc 表名; --->查看表中的结构
show grants for '用户名'@'主机名'; --->查看用户的授权
select user(); --->当前登录的用户
use 数据库名; --->设置默认数据库
where 指定搜索条件; --->做逻辑比较
flush privileges; --->刷新授权表
set password for '用户名'@'主机名' =password('密码'); --->为用户创建密码
选择和投影
选择:指定以某字段作为搜索码,做逻辑比较 ,筛选符合条件的行
投影:选择列为搜索码
数据库命令使用格式详解
创建表及修改字段
create table xueyuan (name char(20) not null, age tinyint unsigned, gender char(1) not null);
添加表 表名 姓名 属性 不能为空, 年龄 属性 不能为负数, 性别 属性 不能为空
alter table xueyuan add kecheng varchar(100);
一个字段 表名 添加 字段名 属性
alter table xueyuan change kecheng Kecheng varchar(100) after name;
一个字段 表名 修改 字段名 修改后字段名 属性 放在字段name下面
给表插入数据
insert into xueyuan (name,gender) value ('linghuchong', 'm') , ('xiaolongnv','f');
插入 表名 字段,字段 关键字 (name字段,gender字段),(name字段,gender字段);
insert into xueyuan value ('xiao' , 'hama' , 57 , 'm');
插入 表名 关键字 name字段, course字段,age字段,性别字段
给表修改数据
update xueyuan set Kecheng='shuxue' where name = 'xiao'
修改属性 表名 关键字 字段 修改的内容 条件 字段 修改哪一行

在表中筛选数据
select name,Kecheng from xueyuan where Kecheng='shuxue';
查询 字段 字段 关键字 表名 选择 Kecheng字段中有shuxue 的行
在表中删除数据
delete from xueyuan where Kecheng='xiaoniu';
删除 关键字 表名 条件 在Kecheng字段中有xiaoniu的行
创建、删除用户
create user 'sun' @ '%' identified by 'sun';
创建 用户 用户名 所有主机 identified by:会将纯文本密码加密作为散列值存储
mysql
-u :指定用户,指名以哪个用户的身份去连接(后面不跟用户名,默认为root)
-p :给这个用户提供密码(后面没有密码,默认为空密码)
-h :指定主机,你的服务器是谁?(后面没跟服务器地址,默认为localhost)
--protocol :{tcp|socket|pipe|memory} 指定使用的协议
--port :指定端口
-D 库名 :在登录以后,直接把某个数据库设为默认数据库
个字符
VARCHAR(字符长度) --->你最多存储多少个字符,最多存储65536个字符 (两个字节)(可变化空间)
BINARY(字符长度) --->以二进制格式进行存储(区分大小写的字符)(固定空间)
VARCHAR(字符长度) --->以二进制格式进行存储(区分大小写的字符)(可变化空间)
TEXT(文本长度) --->文本大对象,(不区分大小写)
BLOB(文本长度) --->二进制格式的文本大对象(区分大小写)
auto_increment --->自动增长
数值:
精确数值(整型),有6种变化,分别使用不同长度的字节来存储整数
TINYINT --->小整形,范围:一个字节,最多表示范围-128到127,或者0-255
SMALLINT --->微整形,范围:两个字节,最多表示范围-128到127,或者0-255
MEDIUMINT --->中等整形,范围:三个字节
INT --->范围:四个字节
BIGINT --->大整形,范围:八个字节
DECIMAL --->十进制
修饰符:UNSIGNED,无符号,
NOT NULL ,不允许为空
近似数值(浮点型)
FLOAT
DOUBLE
DDL:数据定义语言
create:创建数据库、表
create database; 数据库名称; --->创建数据库
create database if not exists 数据库名称; --->如果数据库不存在我们就创建
create table 指定库. 表名 (属性1,属性2,...); --->创建表
alter :修改数据库、表
alter table ,字段名称2...)value("字符串",数值); --->数值不用加引号,不加字段名称代表每个字段都写
replace:替换
replace into
update:修改
update 表名 set 字段='替换内容' where name='名字'
delete:删除
delete from 表名 where 符合条件的行
DCL:数据控制语言
grant:给用户授权 也可以修改密码
grant 权限1,权限2,... on 库名.表名 to '用户名'@'主机名' identified by '密码';--->给用户授权,用户不存在自动创建用户
revoke:取回权限
revoke 权限1,权限2... on 库名.表名 from '用户名'@'主机名;
创建与删除索引
创建索引: create index 索引名称 on 表名 (字段) ;
删除索引:drop index 索引名 on 表名;
select 查询
select格式: select 指定字段 from 表名 条件
create user :创建用户 格式: create user '用户名'@'主机名' identified by '密码';
drop user :删除用户 格式: drop user '用户名'@'主机名';
truncate 表名; --->清空表,并且重置计数器(类似于ID..)
show table status like '表名'\g ; --->查看一个表的属性信息
show engines; --->可以显示当前数据库 所支持的所有存储引擎
select * from 表名; --->查看表中的内容
show databases; --->查看库
show tables from 指定库;--->查看库中的表
desc 表名; --->查看表中的结构
show grants for '用户名'@'主机名'; --->查看用户的授权
select user(); --->当前登录的用户
use 数据库名; --->设置默认数据库
select database(); --->查看当前默认的数据库
where 指定搜索条件; --->做逻辑比较
flush privileges; --->刷新授权表
select USER,Host,Password FROM user; --->查看用户列表
set password for '用户名'@'主机名' =password('密码'); --->为用户创建密码
show variables like "%变量名%" --->查看变量
show indexes from 表名 ; --->查看指定表的索引
show master status; --->查看当前正在使用的二进制日志文件
show binary logs; 查看当前mysql上所可以使用的二进制文件的列表
show binlog events in "file" ; 查看某一个二进制日志文件中的相关内容
选择和投影
选择:指定以某字段作为搜索码,做逻辑比较 ,筛选符合条件的行
投影:选择列为搜索码
数据库命令使用格式详解
创建表及修改字段
create table xueyuan (name char(20) not null, age tinyint unsigned, gender char(1) not null);
添加表 表名 姓名 属性 不能为空, 年龄 属性 不能为负数, 性别 属性 不能为空
alter table xueyuan add kecheng varchar(100);
一个字段 表名 添加 字段名 属性
alter table xueyuan change kecheng Kecheng varchar(100) after name;
一个字段 表名 修改 字段名 修改后字段名 属性 放在字段name下面
给表插入数据
insert into xueyuan (name,gender) value ('linghuchong', 'm') , ('xiaolongnv','f');
插入 表名 字段,字段 关键字 (name字段,gender字段),(name字段,gender字段);
insert into xueyuan value ('xiao' , 'hama' , 57 , 'm');
插入 表名 关键字 name字段, course字段,age字段,性别字段
给表修改数据
update xueyuan set Kecheng='shuxue' where name = 'xiao'
修改属性 表名 关键字 字段 修改的内容 条件 字段 修改哪一行

在表中筛选数据
select name,Kecheng from xueyuan where Kecheng='shuxue';
查询 字段 字段 关键字 表名 选择 Kecheng字段中有shuxue 的行
在表中删除数据
delete from xueyuan where Kecheng='xiaoniu';
删除 关键字 表名 条件 在Kecheng字段中有xiaoniu的行
创建、删除用户
create user 'sun' @ '%' identified by 'sun';
创建 用户 用户名 所有主机 identified by:会将纯文本密码加密作为散列值存储
客户端交互式命令
批处理模型/脚本模式 (
select cid from xuehao where cid between 2 and 6;
关键字 cid在2与6之间(between:。。。与。。。之间)
select keming from kehao where keming like 'y%'
关键字 字段名 个字符
select keming from kehao where keming like '%k%';
,用一条命令查看自动生成的id,(select last_insert_id();)mysql会接着这里面的数字继续排下去,除非把这里面的数值清零。
在表中筛选出的数据插入到另一张表中(两种表的字段必须相同)
insert into kebiao (name) select name from xuesheng where id>2;
插入到 表名 字段 在 字段 表名 筛选 条件
在表中筛选出的数据插入到另一张表中,若这张表中数据重复则替换
replace into kebiao (name) select name from xuesheng where id>2;
delete
mysql内置选项:当你使用delete语句或者update语句时,没有使用where条件(字句),它不会让你执行!
注意:当你清空整张表时,在插入数据,数据的id号也会接着最后一个被清空数据的id号继续往下排
所以,想要从零开始,必须清空(select last_insert_id();)中的数值
truncate 表名; --->清空表,并且重置计数器(select last_insert_id();)类似于id。。。
加锁:lock tables 表名 锁类型{read|write}
解锁:unlock tables :表示解除所有表的锁
mysql默认隔离级别为REPATABLE READ可重读
查看隔离级别:show global variables like '%iso%';
修改隔离级别:set {session|global} 变量名='对应值'; |set tx_isolation='read-committed';
创建用户
create 权限 用户名@主机名 identified by "密码"
flush privileges; 重读授权表,读取用户信息
show grants for 用户名@'主机名'; 查看用户账户信息
修改管理员密码
退出并关闭mysql :service mysql stop
手动修改启动文件:/etc/init.d/mysql 修改第283行
添加:
--skip-grant-tables :跳过授权表
--skip-networking :跳过网络

启动mysql服务:service mysql start
use mysql :指定数据库
select User,Host,Password from user; :查看用户表
update user set Password=PASSWORD('密码') where User='root'; :手动修改密码
退出数据库,关闭服务!
修改/etc/init.d/mysql,把添加的那两行删除
再重新启动服务,就可以登陆了
详解数据库引擎与SQL语句增删改查(非常详细,带例)的更多相关文章
- 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
数据库的创建和sql语句增删改查 1. 载入驱动. 2. 连接数据库. 3. 操作数据库. 创建表: create table person( _id integer primary key, nam ...
- sql语句增删改查(转)
一.增:有4种方法 1.使用insert插入单行数据: 语法:insert [into] <表名> [列名] values <列值> 例 ...
- sql语句增删改查(方便你我Ta)
又自学,把SQL的一些常用语句复习了一遍. 整理如下: 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strde ...
- SQL 语句(增删改查)
一.增:有4种方法1.使用insert插入单行数据: --语法:insert [into] <表名> [列名] values <列值> 例:insert into Strden ...
- 安卓开发之sql语句增删改查2(利用谷歌封装好的API进行增删改查)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- 安卓开发之sql语句增删改查
package com.lidaochen.phonecall; import android.content.Context; import android.database.sqlite.SQLi ...
- sql语句增删改查与子查询
修改表 修改表 语法: Alter table <旧表名> rename [ TO] <新表名>; 例子:Alter table `demo01` rename `demo02 ...
- 数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)
SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) ...
- Django框架之第二篇--app注册、静态文件配置、form表单提交、pycharm连接数据库、django使用mysql数据库、表字段的增删改查、表数据的增删改查
本节知识点大致为:静态文件配置.form表单提交数据后端如何获取.request方法.pycharm连接数据库,django使用mysql数据库.表字段的增删改查.表数据的增删改查 一.创建app,创 ...
随机推荐
- Python进阶-Ⅹ 正则表达式(RexEx)、re模块
1.正则表达式(RexEx)常用知识 2.python中re模块的初步使用 1).findall方法 ret = re.findall('a', 'eva egon yuan') # 返回所有满足匹配 ...
- 【day04】css
一.CSS2.0[Cascading Style Sheets]层叠样式表 1.什么是CSS:修饰网页元素(标记)外观(比如给文字加颜色,大小,字体)的,W3C规定尽量用CSS样式替代XHTML属性 ...
- 线段树模板(无lazy优化)
区间修改与区间查询问题 模板: int ans; struct node{ int l,r,v; node(){v=;} }tree[LEN*]; int arr[LEN]; //建树 void bu ...
- 【K短路】牛慢跑
牛慢跑 据说是\(k\)短路模板,要用\(A^*\),然而我不会.我是用拓扑排序加堆优化广搜水过去的.第一道完全靠自己做出来的紫题,调了两个小时,交了两遍.果然我还是太菜了. 正解的话,可以看红太阳的 ...
- Linux性能优化实战学习笔记:第二十五讲
一.磁盘性能指标 1.使用率 2.饱和度 3.IOPS 4.吞吐量 5.响应时间 6.性能测试工具 二.磁盘I/O观测 1.每块磁盘的使用率(指标实际上来自/proc/diskstats) [root ...
- [LeetCode] 18. 4Sum 四数之和
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...
- java-int数据的溢出
数据的溢出: 当整数的数据大小超出了可以表示的范围,而程序中又没有做数值范围的检查时, 这个整型变量所输出的值将发生紊乱,且不是预期的运行结果. 01 // 整数值如果超出了自己所可以表示范围的最大 ...
- Python连载28-logging设置&logger解析
一.logging模块讲解 1.函数:logging.basicConfig() 参数讲解: (1)level代表高于或者等于这个值时,那么我们才会记录这条日志 (2)filename代表日志会写在这 ...
- 如何修改SQL Server 2008 R2数据库的内存
本篇经验将和大家介绍如何修改SQL Server 2008 R2数据库的内存,希望对大家的工作和学习有所帮助! 工具/原料 SQL Sever 2008 R2数据库已安装 方法/步骤 1 打开 ...
- 一张图入门Python【中文版】
好久没写了,就拿这张图作为开篇吧,重新梳理自己学习的东西,最近两年人工智能炒红了python,devops的提出也把开发.运维整合到了一起,作为一个运维工程师,随着企业自动化运维的提出,光会shell ...