MySQL学习笔记(长期更新)

Posted 爱叨叨的程序狗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL学习笔记(长期更新)相关的知识,希望对你有一定的参考价值。

002-字段:这么多字段类型,该怎么定义

字段评估:需要考虑存储空间和可靠性的平衡

类型选择:确保数据不会超过取值范围

注意:

精度问题:

浮点数存在精度丢失的问题,对精度要求高的字段(如价格)不要使用,原因是mysql采用二进制存储数据,如果尾数不是0或5,就需要使用四舍五入的方式来表达,定点数类型:DECIMAL(将十进制数的整数部分和小数部分拆开,分别转换成十六进制数存储)。

主键问题

text类型长度不定,所以无法做主键,可使用char、varchar类型

时间类型

项目中使用时间类型优先考虑使用率最高的DATETIME,其占用存储空间更多、表达时间类型更为完整,取值范围更大。

总结

整数:INT。 ⼩数:DECIMAL。 字符串:TEXT。 ⽇期与时间:DATETIME。

003-表:怎么创建和修改表

约束限定了表中数据应该满足的条件。

建表时给字段设置默认值的做法,就是默认约束。在插入时,如果不明确给字段赋值,那么系统会把设置的默认值自动赋值给字段。

约束类型:

  • 默认约束:插入时如果没有指定值,则插入默认值
  • 主键约束:保证数据的唯一性
  • 外键约束:预防破坏表之间连接的行为
  • 非空约束 :字段值不能为空
  • 唯一性约束:字段值不能重复
  • 自增约束:字段在插入时自动+1,系统自动赋值

满足唯一约束的字段,可以为空值,但满足主键约束的字段,自动满足非空约束。(TINYINT、SMALLINT、MEDIUMINT、INT和BIGINT)

004-增删改查:如何操作表中的数据?

插入:插⼊⼀条部分字段数据记录是可以的,但前提是,没有赋值的字段,⼀定要让MySQL知 道如何处理,⽐如可以为空、有默认值,或者是⾃增约束字段,等等,否则,MySQL会提⽰错误的。

插入查询结果,MySQL⽀持把查询的结果插⼊到数据表中,我们可以指定字段,甚⾄是数值,插⼊到数据表中。

INSERT INTO 表名 (字段名)

SELECT 字段名或值

FROM 表名

WHERE 条件

修改:不要修改主键字段的值,主键是数据记录的唯一表示,修改主键的值可能破坏数据完整性。

Group By 作用:对查询出的数据分组,通常与聚合函数使用

  • 满足"select 字句中的列名必须为分组列或函数"

    select u.user_name, sum(et.singin)
    from user u
    left join employee_tbl et on u.id = et.user_id
    where date >= '2016-04-04 15:26:54'
    group by u.user_name;
    

    group by user_name,所以你查询列必须有user_name这个字段

  • where 必须用在group by之前

HAVING:⽤于筛选查询结果,跟WHERE类似。

FROM:其后可以跟表或查询结果(派生表/子查询),意思是将查询的数据当作一个虚拟的数据表来看待,需要使用AS关键字对派生表进行取名。

ORDER BY:对查询结果排序,ASC升序、DESC降序。

LIMIT (startIndex,length):显示部分查询结果

INSERT INTO 表名 [(字段名 [,字段名] ...)] VALUES (值的列表);
INSERT INTO 表名 (字段名)
SELECT 字段名或值
FROM 表名
WHERE 条件
DELETE FROM 表名
WHERE 条件
UPDATE 表名
SET 字段名=WHERE 条件
SELECT *|字段列表
FROM 数据源
WHERE 条件
GROUP BY 字段
HAVING 条件
ORDER BY 字段
LIMIT 起始点,⾏数

主键冲突时处理:ON DUPLICATE

INSERT INTO demo.goodsmaster
SELECT *
FROM demo.goodsmaster1 as a
ON DUPLICATE KEY UPDATE barcode = a.barcode,goodsname=a.goodsname;

当主键冲突时,唯一主键对应的数据进行更新。

以上是关于MySQL学习笔记(长期更新)的主要内容,如果未能解决你的问题,请参考以下文章

hadoop学习笔记以及遇到的坑整理(长期更新)

(*长期更新)软考网络工程师学习笔记——Section 2 数字传输系统

(*长期更新)软考网络工程师学习笔记——Section 17 交换技术原理

(*长期更新)软考网络工程师学习笔记——Section 15 无线网络技术

(*长期更新)软考网络工程师学习笔记——Section 9 应用层

*(长期更新)软考网络工程师学习笔记——Section 20 路由技术原理