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




  • 相关阅读:
    uva 1584.Circular Sequence
    成为Java顶尖程序员 ,看这11本书就够了
    java 线程同步 原理 sleep和wait区别
    xargs -r
    java
    事故分析
    各大互联网公司架构演进之路汇总
    char 汉字
    nginx优化之request_time 和upstream_response_time差别
    学习进度05
  • 原文地址:https://www.cnblogs.com/historylyt/p/9832002.html
Copyright © 2020-2023  润新知