(办公)Mysql入门
数据库的操作:
1.用 SHOW 显示已有的数据库
show databases
2.创建数据库:create database 创建数据库
create database db_name
3.删除数据库:
drop databse db_name
4.use 选定数据库.
use db_name
数据表的操作:
1.show/describe 语句显示数据表的信息:
show tables
2.create table 创建表:
create table 表名
(
列名 类型,
列名 类型
)
2.1 利用select的结果创建表.
MySQL 将为在 select
2.1.1 create table 表名
(
select * from 表名
)
2.1.2 create table user_testC select * from user_t
2.2 利用alter table修改表
2.2.1 增加列: alter table 表名 add col_name 类型.
2.2.2 删除列: alter table 表名 drop col_name
2.2.3 改变列: alter table 表名 modify col_name 类型
alter table 表名 change old_col_name (新的列名)col_name 类型
2.3.4 给表更名: alter table 表名 rename 新表名.
3.drop table 删除表: drop table if exists 表名.
drop table if exists 数据库.表名
4.插入语句:insert
insert into 表(列名,列名,列名....) values(,,....)
4.1 插入其他表选择的行:
insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;
5.查询语句:select
SELECT 语句的语法如下:
SELECT selection_list 选择哪些列
FROM table_list 从何处选择行
WHERE primary_constraint 行必须满足什么条件
GROUP BY grouping_columns 怎样对结果分组
HAVING secondary_constraint 行必须满足的第二条件
ORDER BY sorting_columns 怎样对结果排序
LIMIT count 结果限定
5.1 普通查询: select * from t_user
5.1.1 查询特定的行: select * from t_user where nickname like '%朱晓明%'
5.2 条件查询: select * from t_user where nickname like '%朱晓明%'
5.2.1 算术运算符:+,-,*,/,<,<=,=,!=或者<>,>=,>
5.2.2 逻辑运算符:NOT或!,OR或||,AND或&&
5.3 查询排序: order by 子句的语法 order by column_name [ASC(升序)|DESC(降序)][,....]
5.4 查询分组与行计数: select age,count(2) from person group by age
5.4.1 COUNT()函数计数非NULL结果的数目.MAX(),MIN(),AVG(),SUM()
5.4.2 表连接,1.inner join,2.select * from tableA A,tableB B where A.bid = b.id
5.5 修改,删除数据记录. update 表名 set 列名 = xx where 列名 运算符 值
5.6 删除记录: delete from 表名 where 要删除的记录.
*********************************MySQL函数字符串,索引*********************************
1.集合函数:
1.1 行列计数:COUNT(*),计算查询语句返回记录数.
1.2 计算平均值:AVG().对数字使用,忽略空值.
1.3 计算字段值的总和:SUM()
1.4 计算字段的极值MAX()和MIN()
2.操作日期和时间.
2.1 返回当前的日期和时间CURDATE(),CURTIME()返回当前时间,以HH:MM:SS或HHMMSS格式返回当前的时间值,NOW()
返回当前时期和时间以 YYYY-MM-DD HH:MM:SS 的格式或者 YYYYMMDDHHMMSS 的格式.
2.2 使用关系运算符和逻辑运算符来限制时间范围:
select * from table where end_date >= '2001-02-08' and end_date < '2001-02-08'
2.3 另一种方法,你可以使用LIKE来返回正确的记录.通配符'%'
2.4 比较日期和时间:TO_DAYS(date) TO_DAYS函数 返回一个天数 (从年份0开始的天数 )
3.字符串模式的匹配.
3.1:"_"匹配任意单个字符,"%"匹配任意数字字符。
3.2:扩展正则表达式模式匹配 REGEXP,NOT REGEXP
3.2.1 .匹配任何单字符
3.2.2 [...]匹配方括号内的任何字符.例如"[abc]",如果是范围的话-,[a-z]匹配任何小写字母,[0-9]匹配任何数字.
3.2.3 * 匹配零个或者多个在它前面的东西.比如[0-9]*匹配任何数量的数字,".*"匹配任何数量的任何东西.
"[aA]"匹配小写或大写的"a"而"[a-zA-Z]"匹配两种写法的任何字母。
3.2.4 为了定位一个模式以便它必须匹配被测试值的开始或结尾,在模式开始处使用"^"
或在模式的结尾用"$"。
4.深入select的查询功能.
4.1. 别名 select name as 别名 from table
在子句中使用列的别名:select count(1) total from table having total > 1
select * from table as tb
4.2. 取出互不相同的记录,一般的办法是使用DISTINCT关键字:
4.3. NULL,使用IS NULL和IS NOT NULL.
4.4. 大小写敏感性
4.5. 检索语句与多个表想连接.inner join,left join(左表为主,右表匹配,匹配不到的为NULL,显示)
*******************************************索引属性*******************************************
1.提示:(一个索引可以由最多 15 个列组成)
2.索引有如下的几种情况:
INDEX 索引:通常意义的索引,某些情况下 KEY 是它的一个同义词。索引的列
可以包括重复的值。
UNIQUE 索引:唯一索引,保证了列不包含重复的值,对于多列唯一索引,它保
证值的组合不重复。
PRIMARY KEY 索引:也 UNIQUE 索引非常类似。事实上,PRIMARY KEY 索
引仅是一个具有PRIMARY 名称的 UNIQUE 索引。这表示一个表只能包含一个
PRIMARY KEY。
3.用 Alter Table 语句创建与删除索引:(CREATE INDEX 可对表增加普通索引或 UNIQUE 索引,
不能用)
create index index_name on table_name (column_list)
create unique index index_name on table_name (column_list)
3.1 创建表的时候创建索引:
create table person
(
id float,
name varchar(200),
age float,
remark varchar(200),
email varchar(200),
PRIMARY key index_name (id),
index index_nameA(name),
unique index_nameunique (email)
)
4.删除索引:drop index index_name on table_name
**************************************数据的备份和恢复*********************************************
1.使用Navicat Premium 图形界面操作:
1.1 备份与还原.
1.1.1 选中数据库有个备份,新建,可以选择(视图,函数,事件),也可以将备份文件另存为到桌面.(点击备份的文件,右击菜单,
还原备份.)
1.1.2 直接保存sql文件,点击数据库,出现菜单,然后转储sql文件.(导入的话,需要新建一个和数据库名字和原来一样.)
2.使用Navicat Premium 查看日志,他的目录是 logs.
2.1 HttpDump.log:保存 HTTP 服务器答复的数据。
LogHistory.txt:记录在 Navicat 数据库及数据库对象上全部已运行的作业上的全部 SQL 语句。从主菜单选择工具->历史日志,或使用快捷键 CTRL+H,在历史日志查看器打开 LogHistory.txt 文件。
注意:当 Navicat 重新启动时,这个记录将会被覆盖。
2.2 LogImport.txt:记录在导入进程期间发生的每个错误的详细数据,显示成功或失败。
注意:这个记录将会在每次导入时被覆盖。
LogExport.txt:记录在导出进程期间发生的每个错误的详细数据,显示成功或失败。
注意:这个记录将会在每次导出时被覆盖。
2.3 LogSynchronize.txt:记录数据同步进程期间发生的每个错误的详细数据,显示成功或失败。
注意:这个记录将会在每次同步时被覆盖。
LogCmd.txt:保存 Navicat 命令列进程和运行计划时全部操作的信息。
3. MySQL内建复制.这个配置可以去百度查询.
首先,要确定得到了一个完整的数据快照。如果忘记拷贝一个表或数据库将导致从
机线程序停止。生成快照的时刻是很关健的。你应该确保在拷贝数据文件之前二进制日志
功能是无效的。如果在得到快照之前就允许了二进制日志功能,从机的线程可能会停止,
原因就是当线程试图导入重要的记录时,可能会由于主键重复而停止。最好就是接照第二
部分所讨论的处理办法来做:关闭-拷贝-允许二进制日志功能重启。
你可能想要按照最初的一种方式来配制复制处理,并且在合适的时间关注从机,确
保从机与主机保持同步。
****************************************数据库的维护与修复**********************************************
表的故障检测和修正的一般过程如下:
检查出错的表。如果该表检查通过,则完成任务,否则必须修复出错的数据库
表。
在开始修复之前对表文件进行拷贝,以保证数据的安全。
开始修复数据库表。
如果修复失败,从数据库的备份或更新日志中恢复数据。
在使用 myisamchk 或 isamchk 检查或修复表之前,应该首先注意:
建立数据库备份和使用更新日志,以防修复失败,丢失数据。
仔细阅读本章内容以后再进行操作,尤其是不应该在阅读“避免与 MySQL 服务
器交互作用”之前进行操作。因为,在你没有足够的知识之前贸然操作,可能会
引起严重的后果。
如果你在 Unix 平台上对表进行维护时,应该首先注册到专用的帐户 mysql,以
避免对表读写访问产生所有权的问题,以及破坏数据库目录的所有权限。
****************************************数据库优化**********************************************
1.建立索引,相对来说查询会快一些.
2.索引用于以下方面:
快速找出匹配一个 WHERE 子句的行。
在多个表的查询时,执行连接时加快了与其他表中的行匹配的行的搜索。
对特定的索引列找出 MAX()或 MIN()值。
如果排序或分组在一个可用索引的最左面前缀上进行(例如,ORDER BY
key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随 DESC,键
以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表
的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从
索引树被检索出来。
3.索引文件要占磁盘空间。如果有大量的索引,索引文件可能会比数据文件更
快地达到最大的文件尺寸。其次,索引文件加快了检索,但增加了插入和删除,以及更新
索引列中的值的时间(即,降低了大多数涉及写入的操作的时间),因为写操作不仅涉及
数据行,而且还常常涉及索引。一个表拥有的索引越多,则写操作的平均性能下降就越
大。
3.1 选择索引的准则
3.1.1 搜索的索引列,不一定是所要选择的列
3.1.2 使用惟一索引
3.1.3 使用短索引
3.1.4 利用最左前缀
3.1.5 不要过度索引
3.1.6 考虑在列上进行的比较类型
4.数据类型的一些问题:
4.1 使你的数据尽可能小
4.2 使用定长列,不使用可变长列
4.3 将列定义为 NOT NULL
4.4 考虑使用 ENUM 列
4.5 有关 BLOB 和 TEXT 类型
4.5.1 使用 BLOB 和 TEXT 类型的优点
4.5.2 使用 BLOB 和 TEXT 类型的可能弊端
4.6 必要的准则:1.对容易产生碎片的表使用 OPTIMIZE TABLE
2.使用多列索引
3.将 BLOB 值隔离在一个独立的表中
5.使用 ANALYSE 过程检查表列
6.查询的优化:
6.1 使用 EXPLAIN 语句检查 SQL 语句
例子:EXPLAIN select * from book
6.2 想使得查询变快,你可以加个索引.
6.2.1 优化where
6.2.1.1 删除不必要的括号:
6.2.1.2 常数调入:
6.2.1.3 删除常数条件(因常数调入所需):
6.2.1.4 索引使用的常数表达式仅计算一次.
6.2.1.5 在一个单个表上的没有一个 WHERE 的 COUNT(*)直接从表中检索信息。当仅使
用一个表时,对任何 NOT NULL 表达式也这样做。
6.2.1.6 无效常数表达式的早期检测。MySQL 快速检测某些 SELECT 语句是不可能的并
且不返回行。
6.2.1.7、如果你不使用 GROUP BY 或分组函数(COUNT()、MIN()……),HAVING 与
WHERE 合并。
6.2.1.8、为每个子联结(sub join),构造一个更简单的 WHERE 以得到一个更快的 WHERE
计算并且也尽快跳过记录
6.2.1.9、所有常数的表在查询中的任何其他表前被首先读出。一个常数的表是:
一个空表或一个有 1 行的表。
与在一个 UNIQUE 索引、或一个 PRIMARY KEY 的 WHERE 子句一起使用的
表,这里所有的索引部分使用一个常数表达式并且索引部分被定义为 NOT
NULL。
6.2.1.10、对联结表的最好联结组合是通过尝试所有可能性来找到:(。如果所有在 ORDER
BY 和 GROUP BY 的列来自同一个表,那么当廉洁时,该表首先被选中。
6.2.1.11、如果有一个 ORDER BY 子句和一个不同的 GROUP BY 子句,或如果 ORDER
BY 或 GROUP BY 包含不是来自联结队列中的第一个表的其他表的列,创建一个临时
表。
6.2.1.12、如果你使用 SQL_SMALL_RESULT,MySQL 将使用一个在内存中的表。
6.2.1.13、因为 DISTINCT 被变换到在所有的列上的一个 GROUP BY,DISTINCT 与
ORDER BY 结合也将在许多情况下需要一张临时表。
6.2.1.14、每个表的索引被查询并且使用跨越少于 30% 的行的索引。如果这样的索引没能
找到,使用一个快速的表扫描。
6.2.1.15、在一些情况下,MySQL 能从索引中读出行,甚至不咨询数据文件。如果索引使
用的所有列是数字的,那么只有索引树被用来解答查询。
6.2.1.16、在每个记录被输出前,那些不匹配 HAVING 子句的行被跳过。
6.3 MySQL 怎样优化 LEFT JOIN
6.3.1 表 B 被设置为依赖于表 A。
6.3.2 表 A 被设置为依赖于所有用在 LEFT JOIN 条件的表(除 B 外)。
6.3.3 所有 LEFT JOIN 条件被移到 WHERE 子句中。
6.3.4 进行所有标准的联结优化,除了一个表总是在所有它依赖的表之后被读取。如果
有一个循环依赖,MySQL 将发出一个错误。
6.3.5 进行所有标准的 WHERE 优化。
6.3.6 如果在 A 中有一行匹配 WHERE 子句,但是在 B 中没有任何行匹配 LEFT JOIN
条件,那么在 B 中生成所有列设置为 NULL 的一行。
6.3.7 如果你使用 LEFT JOIN 来找出在某些表中不存在的行并且在 WHERE 部分你有下
列测试:column_name IS NULL,这里 column_name 被声明为 NOT NULL 的列,那么
MySQL 在它已经找到了匹配 LEFT JOIN 条件的一行后,将停止在更多的行后寻找(对一
特定的键组合)。
6.4 MySQL 怎样优化 LIMIT
6.4.1 如果你用 LIMIT 只选择一些行,当 MySQL 一般比较喜欢做完整的表扫描时,它
将在一些情况下使用索引。
6.4.2 如果你使用 LIMIT #与 ORDER BY,MySQL 一旦找到了第一个 # 行,将结束排
序而不是排序整个表。
6.4.3 当结合 LIMIT #和 DISTINCT 时,MySQL 一旦找到#个唯一的行,它将停止。
6.4.4 在一些情况下,一个 GROUP BY 能通过顺序读取键(或在键上做排序)来解决,并
然后计算摘要直到键值改变。在这种情况下,LIMIT #将不计算任何不必要的 GROUP。
6.4.5 只要 MySQL 已经发送了第一个#行到客户,它将放弃查询。
6.4.6 LIMIT 0 将总是快速返回一个空集合。这对检查查询并且得到结果列的列类型是
有用的。
6.4.7 临时表的大小使用 LIMIT #计算需要多少空间来解决查询。
以下是了解内容:
***************************************服务器级优化**************************************************
如何在服务器级优化数据库的性能,以及提高数据库性能涉及到的
硬件问题。选择一个尽量快的系统,使用 RAID 磁盘阵列是非常容易想到的方法。
对于数据库守护程序,既可以在编译时就提供合适的参数,也可以在选项文件中提供
需要优化的参数。
***************************************避免与 MySQL 服务器交互作用******************************************
1.锁定表的的方法:
1.1 内部锁定:
锁定表:LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]
解锁表:UNLOCK TABLES
如果一个线程获得在一个表上的一个 READ 锁,该线程(和所有其他线程)只能从表中
读。如果一个线程获得一个表上的一个 WRITE 锁,那么只有持锁的线程 READ 或
WRITE 表,其他线程被阻止。
每个线程等待(没有超时)直到它获得它请求的所有锁。
WRITE 锁通常比 READ 锁有更高的优先级,以确保更改尽快被处理。这意味着,如
果一个线程获得 READ 锁,并且然后另外一个线程请求一个 WRITE 锁, 随后的 READ 锁
请求将等待直到 WRITE 线程得到了锁并且释放了它。
显然对于检查,你只需要获得读锁。再者钟情跨下,只能读取表,但不能修改它,
因此他也允许其它客户机读取表。对于修复,你必须获得些所以防止任何客户机在你对表
进行操作时修改它。
1.2 外部锁定
服务器还可以使用外部锁定(文件级锁)来防止其它程序在服务器使用表时修改文
件。通常,在表的检查操作中服务器将外部锁定与 myisamchk 或 isamchk 作合使用。但
是,外部锁定在某些系统中是禁用的,因为他不能可靠的进行工作。对运行 myisamchk
或 isamchk 所选择的过程取决于服务器是否能使用外部锁定。如果不使用,则必修使用内
部锁定协议。
****************************************************************************************************************
(办公)Mysql入门的更多相关文章
- 21分钟 MySQL 入门教程(转载!!!)
21分钟 MySQL 入门教程 目录 一.MySQL的相关概念介绍 二.Windows下MySQL的配置 配置步骤 MySQL服务的启动.停止与卸载 三.MySQL脚本的基本组成 四.MySQL中的数 ...
- MySQL入门02-MySQL二进制版本快速部署
在上篇文章 MySQL入门01-MySQL源码安装 中,我们介绍了MySQL源码安装的方法. 源码安装虽然有着更加灵活和更加优化等诸多优势.但源码编译安装部署的过程相对复杂,而且整个过程所花费的时间很 ...
- MYSQL入门全套(第三部)
MYSQL入门全套(第一部) MYSQL入门全套(第二部) 索引简介 索引是对数据库表中一个或多个列(例如,employee 表的姓名 (name) 列)的值进行排序的结构.如果想按特定职员的姓来查找 ...
- MySQL入门(三)
写了两篇<MySQL入门>以后我发现,写书的人还是都挺有本事的,起码人家知道怎么编排自己想讲的知识点,我实在是不知道该先说那里后说哪里,那我就想到什么讲什么吧. 一 写SQL 其实我是不想 ...
- MySQL入门笔记
MySQL入门笔记 版本选择: 5.x.20 以上版本比较稳定 一.MySQL的三种安装方式: 安装MySQL的方式常见的有三种: · rpm包形式 · 通用二进制 ...
- MySQL入门转载
21分钟 MySQL 入门教程 http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html 目录 一.MySQL的相关概念介绍 二.Wi ...
- mysql 入门 基本命令
MYSQL入门学习之一:基本操作 1.登录数据库 www.2cto.com 命令:mysql -u username –p (mysql -h主机地址 -u用户名 -p用户密码) ...
- MySQL入门笔记(一)
一.数据类型 1. 整型 2. 浮点型 3. 字符型 4. 日期时间型 二.数据库操作 1. 创建库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_nam ...
- MySQL入门(上)
1 课程回顾 自定义标签&编码实战 1)自定义标签步骤: 1.1 编写标签处理器类,继承SimpleTagSupport类,覆盖doTag方法 1.2 在WEB-INF目录下建立tld文件,在 ...
随机推荐
- Java内存溢出异常(下)
此篇是上一篇文章Java内存溢出异常(上)的续篇,没有看过的同学,可以先看一下上篇.本篇文章将介绍剩余的两个溢出异常:方法区和运行时常量池溢出. 方法区和运行时常量池溢出 这部分为什么会放在一起呢?在 ...
- 使用 SonarQube 来分析 .NET Core 项目代码问题
0.介绍 Sonar 是一款开源的代码分析工具,可能有很多人已经用过,本篇文章主要是讲解如何在 Docker 里面安装 Sonar 并且用其来分析 .Net Core 项目. Sonar 是一个用于代 ...
- Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
1. 输出重定向 最基本的重定向是将命令的输出发送到一个文件中.在bash shell中用大于号(>) ,格式如下:command > inputfile.例如:将date命令的输出内容, ...
- [转]迄今为止最优的Eclipse运行性能调优 ,含eclipse.ini
最近,Eclipse(Eclipse-JEE3.5)运行十分缓慢(可能插件安装过多),因此,得到了个机会调优一下,以便提高工作效率 下图是未经任何调整eclipse的gc情况(使用jvisualvm命 ...
- 使用 trash 避免 rm -rf 悲剧
昨晚做了一个令人痛心疾首的操作,rm -rf something,把我个人电脑里的重要文件夹给删掉了,懵逼了半天才缓过来.还好是个人文件,不对公司造成影响.这件事也让我意识到 rm -rf 确实是个高 ...
- Chapter 4 Invitations——7
The next day, I was surprised that Jessica wasn't her usual gushing self in Trig and Spanish. 第二天,我很 ...
- Use Generic Replacements of 1.X Framework API Classes 用泛型替换Framework 1.X版本的API类
第一章,第一节 用泛型替换Framework 1.X版本的API类. 说起来,我是没接触过Framework 1.X版本的程序,12年毕的业(算算时间也一年多了,依旧一事无成,汗),毕业之后到公司实习 ...
- SSM框架的sql中参数注入(#和$的区别)
<select id="findUsersByUserName2" resultType="java.util.Map" parameterType=&q ...
- BurpSuite 各模块使用
Proxy 代理 对浏览器进行代理 对浏览器增加代理服务器 可以对http 请求进行监视 intercept is on 进行监控 off 不监控 可以任意修改 对任意的网络请求 进行爬虫 在 s ...
- 使用Mybatis Generator插件自动生成映射文件(cmd无法进入文件,dns服务器对区域没有权威等问题)遇到问题
使用Mybatis Genertor插件自动生MyBatis所需要的DAO接口,实体模型类,Mapping映射文件,将生成的代码赋值到项目工程中即可. 有命令行,Eclipse插 ...