Mysql入门
author:一佰互联 2019-03-30   click:193

简介:数据库的操作:1.用 SHOW 显示已有的数据库show databases 2.创建数据库:create database 创建数据库create database db_name3.删除数据库:drop databse db_name4.use 选定数据库.use db_name 数据表的操作:1.show/de ...

数据库的操作:


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 able_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 所选择的过程取决于服务器是否能使用外部锁定。如果不使用,则必修使用内

部锁定协议。

本文仅代表作者个人观点,不代表巅云官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱2522407257@qq.com。更多相关资讯,请到巅云www.yinxi.net学习互联网营销技术请到巅云建站www.yx10011.com。