MySQL笔记

    这些知识点补全,很碎,主要是自己平常不清楚的或者易混淆的。

  1. mysql -h 主机名 -u 用户名 -p
    -h : 该命令用于指定客户端所要登录的MySQL主机名, 登录当前机器该参数可以省略
    -u : 所要登录的用户名
    -p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项

  2. MySQL语句以分号为语句的结束, 若在语句结尾不添加分号时, 命令提示符会以 -> 提示你继续输入(有个别特例, 但加分号是一定不会错的)。

  3. 对于一些较长的语句在命令提示符下可能容易输错, 因此我们可以通过任何文本编辑器将语句输入好后保存为.sql 的文件中, 通过命令提示符下的文件重定向执行执行该脚本。打开命令提示符, 输入:
    mysql -D samp_db -u root -p < createtable.sql
    提示: 如果连接远程主机请加上 -h 指令;createtable.sql文件若不在当前工作目录下需指定文件的完整路径

  4. A=B or A=C or A=D A in (‘B’,’C’,’D’)
    A!=B and A!=C and A!=D A not in(’B’,’C’,’D’)

  5. SQL 语句对大小写不敏感。

  6. 如果要插入的字段是auto_increment属性,那么在insert的时候values里要么不注明该字段,要么设为null。

     CREATE TABLE Persons (
         P_Id int NOT NULL AUTO_INCREMENT,
         LastName varchar(255) NOT NULL,	
         FirstName varchar(255),
         PRIMARY KEY (P_Id)
     )
    

    INSERT INTO Persons (FirstName,LastName) VALUES ('Bill','Gates')
    INSERT INTO Persons VALUES (null,'Bill','Gates')

  7. MySQL的反引号是为了区分MySQL的保留字与普通字符而引入的符号,如果字段值是字符或字符串,则要加引号。

  8. 可从以下几个方面进行优化MySQL(重要性依次降低,成本依次增加)

  • SQL及索引
  • 数据表结构
  • 系统配置
  • 硬件 具体措施:
    • max加索引
    • count分开查
    • 子查询优化为join
    • limit限制查询:避免过多的扫描
    • 使用有索引的列或主键进行order by操作
    • 记录上次返回的主键,在下次查询时使用主键过滤
    • 索引
    • 在where、group by、order by、on从句中出现的列
    • 索引字段越小越好
    • 离散度大的列放到联合索引的前面
    • 索引的维护及优化——删除重复己冗余的索引
    • 选择合适的数据类型
    • 数据结构优化:表的范式化和反范式化。符合第三范式,要求数据表中不存在非关键字段对任何候选关键字段的传递函数依赖。
    • 数据库结构优化:表的垂直拆分和水平拆分。
    • 系统配置优化
    • 服务器硬件优化
  1. SQL语言包含四个部分:

    • 数据定义语言(DDL):CREATE DROP ALTER
    • 数据操作语言(DML):INSERT UPDATE DELETE
    • 数据查询语言(DQL):SELECT
    • 数据控制语言(DCL):GRANT REVOKE COMMIT ROLLBACK
  2. 一些典型的SQL语法

    INSERT INTO 表名 [(字段名1,字段名2,...,字段名n)] VALUES ('值1','值2',...,'值n');
    
    UPDATE 表名 
    SET 字段名=表达式[,...]
    [WHERE 条件]
    [ORDER BY 字段]
    [LIMIT 行数];
    
    SELECT [ALL|DISTINCT]
    {*|table.*|[table.]field1[AS alias1][,table.|\field2[AS alias2][,...]]} 
    FROM tableexpresion[,...][IN externaldatabase] 
    [WHERE]
    [GROUP BY]
    [HAVING]
    [ORDER BY]
    [LIMIT count];
    
    COUNT() COUNT(*)返回找到的记录行数
    SUM() 
    AVG()
    MAX()
    MIN()