zoukankan      html  css  js  c++  java
  • MySQL学习笔记(三)


    MySQL学习笔记(三)

    一.数据操作

    1.添加记录

    • INSERT [INTO] tbl_name[(字段名称,...)] {VALUE|VALUES}(VALUES...);
    • INSERT tbl_name VALUE(value...);

    不指定字段名称,需要按照建表时的字段顺序给每一个字段赋值

    • INSERT tbl_name(字段名称,...) VALUES(值,...);

    指定字段名称不写字段名称的按默认值(自增值)插入

    • INSERT tbl_name SET 字段名称=值,...;
    • INSERT tbl_name[(字段名称...)] SELECT 字段名称,... FROM tbl_name [WHERE 条件];
    • INSERT tbl_name[(字段名称,...)] VALUES(值,...),(值,...),(值,...),...;

    一次插入多条数据

    2.修改记录

    • UPDATE tbl_name SET 字段名称=值,字段名称=值 [WHERE 条件];

    如果不添加条件,整个表中的记录都会被更新

    3.删除记录

    • DELETE FROM tbl_name [WHERE 条件];

    如果不添加条件,表中所有记录都会被删除
    DELETE 清空数据表的时候不会重置AUTO_INCREMENT的值,可以通过ALTER 语句将其重置为1

    • TRUNCATE [TABLE] tbl_name;

    清除表中所有记录
    会重置AUTO_INCREMENT的值

    4.单表查询记录

    • SELECT select_expr,... FROM tbl_name
      [WHERE 条件]
      [GROUP BY {col_name|position} HAVING 二次筛选]
      [ORDER BY {col_name|position|expr} [ASC|DESC]]
      [LIMIT 限制结果集的显示条数];
    • SELECT * FROM tbl_name;

    查询表中所有记录

    • SELECT 字段名称,... FROM tbl_name;

    查询指定字段的信息

    • SELECT DISTINCT (字段名称) FROM tbl_name;

    查询时过滤结果中重复的值

    • SELECT 字段名称,... FROM db_name.tbl_name;

    以库名.表名的形式查询某个表

    • SELECT 字段名称 [AS] 别名名称,... FROM db_name.tbl_name;

    显示查询记录时给字段起别名

    • SELECT 字段名称 ,... FROM tbl_name [AS] 别名;

    显示查询记录时给表起别名

    • SELECT tbl_name.col_name,... FROM tbl_name;

    以表名.字段名的形式查询某个字段

    使用 WHERE 条件

    根据条件选择特定记录

    • 比较运算符> >= < <= != <> <=>

    <=> 和 =的区别:<=>可以检测NULL值

    • IS [NOT] NULL

    检测值是否为NULL或者NOT NULL

    • [NOT] BETWEEN ... AND

    指定范围

    • [NOT] IN(值,...)

    指定集合

    • 逻辑运算符
    1. AND 逻辑与
    2. OR 逻辑或
    • 匹配字符
    1. [NOT] LIKE
    2. % 任意长度的字符串
    3. _ 任意一个字符

    使用 GROUP BY 分组

    把值相同放到一个组中,最终查询出的结果只会显示组中一条记录

    • GROUP_CONCAT(字段名称)

    配合查看组中某个字段的详细信息

    • 聚合函数
    1. COUNT({字段名称|*})

    统计记录总数
    如果写的是COUNT(字段名称),字段中的值为NULL,不统计进来
    写COUNT(*)会统计NULL值

    1. SUM(字段名称) 求和
    2. MAX(字段名称) 最大值
    3. MIN(字段名称) 最小值
    4. AVG(字段名称) 平均值
    • WITH ROLLUP

    会在记录末尾添加一条记录,是上面所有记录的总和

    • WITH+聚合函数

    对分组结果进行二次筛选

    使用 ORDER BY 排序

    根据特定规则进行排序

    • ORDER BY 字段名称 [ASC|DESC],字段名称 [ASC|DESC],...

    ASC和默认不写均为升序
    DESC为降序
    可以按顺序进行多个字段的排序

    • ORDER BY RAND()

    随机排序

    使用 LIMIT 限制结果集显示条数

    • LIMIT [offset],row_count

    从offset开始,显示几条记录,不写offset时默认从0开始
    配合升序降序可以实现翻页效果

    5.多表联查

    • 笛卡尔积
      SELECT tbl_name.字段名称,tbl_name.字段名称,...FROM tbl_name1,tbl_name2,...
    • 内连接
      SELECT 字段名称,... FROM tbl_name1
      INNER JOIN tbl_name2
      ON 连接条件;

    查询两个表中符合连接条件的记录

    • 外连接
    1. 左外连接
      SELECT 字段名称,... FROM tbl_name1
      LEFT [OUTER] JOIN tbl_name2
      ON 条件;

    先显示左表中的全部记录,再去右表中查询符合条件的记录,不符合的以NULL代替

    1. 右外链接
      SELECT 字段名称,... FROM tbl_name1
      RIGHT [OUTER] JOIN tbl_name2
      ON 条件;

    先显示右表中的全部记录,再去左表中查询符合条件的记录,不符合的以NULL代替

    • 自身连接查询

    可以实现无限分类

    6.外键约束

    只有InnoDB存储引擎支持外键

    • [CONSTRAINT 外键名称]FOREIGN KEY(字段名称) REFERENCES 主表(字段名称)

    子表的外键字段和主表的主键字段类型要相似;如果是数值型要求一致,并且无符号也要一致;如果是字符型,要求类型一致,长度可以不同
    如果外键字段没有创建索引,MySQL会自动帮我们添加索引
    子表的外键关联的必须是父表的主键

    • 动态添加外键
      ALTER TABLE tbl_name ADD [CONSTRAINT 外键名称] FOREIGN KEY(外键字段) REFERENCES 主表(主键字段);

    动态添加外键之前表中的记录一定合法的记录,没有脏值,否则外键添加不成功

    • 动态删除外键
      ALTER TABLE tbl_name
      DROP FOREIGN KEY fk_name;
    • 外键约束的参照操作
    1. CASCADE

    从父表删除或更新,子表也跟着删除或者更新,级联操作

    1. SET NULL

    从父表删除或者更新记录,并设置子表的外键列为NULL

    1. NO ACTION | RESTRICT

    拒绝对父表做更新或者删除操作

    7.子查询

    内层语句查询的结果可以做为外层语句查询的条件

    • SELECT 字段名称 FROM tbl_name WHERE col_name=(SELECT col_name FROM tbl_name);
    • 由IN引发的子查询
      SELECT 字段名称 FROM tbl_name WHERE col_name IN (SELECT col_name FROM tbl_name);
    • 由比较运算符引发的子查询
      SELECT 字段名称 FROM tbl_name WHERE col_name>=[ANY](SELECT col_name FROM tbl_name);
    • 运算符 ANY SOME ALL
      >、>= 最小值 最小值 最大值
      <、<= 最大值 最大值 最小值
      = 任意值 任意值
      <>、!= 任意值
    • 由EXISTS引发的子查询
      SELECT 字段名称 FROM tbl_name WHERE col_name EXISTS (SELECT col_name FROM tbl_name);

    内层语句查询存在时执行外层查询语句

    • INSERT ... SELECT(...)

    将查询出的数据插入到表中

    • CREATE ... SELECT(...)

    将查询出的数据插入到新创建的表中

    8.联合查询

    将查询出的值整合

    • SELECT 字段名称, ... FROM tbl_name1
      UNION
      SELECT 字段名称, ... FROM tbl_name2;
    • SELECT 字段名称,... FROM tbl_name1
      UNION ALL
      SELECT 字段名称... FROM tbl_name2;

    UNION ALL是简单的合并,UNION会去掉表中重复记录

    二、常用函数

    数学函数

    1.进一取整

    CEIL()

    2.舍掉小数部分

    FLOOR()

    3.四舍五入

    ROUND()

    4.截取小数点后几位

    TRUNCATE()

    5.取余数

    MOD()

    6.取绝对值

    ABS()

    7.幂运算

    POWER()

    8.圆周率

    PI()

    9.0~1之间的随机数

    RAND() | RAND(X)

    10.得到数字符号

    SIGN(X)

    11.计算e的x次方

    EXP(X)

    字符串函数

    1.字符串的字符数

    CHAR_LENGTH('char')

    2.字符串的字节数

    LENGTH('char')

    UTF-8下一个中文字符占3个字节

    3.将字符串拼接成一个整体

    CONCAT('char1','char2')

    如果字符串中包含NULL,拼接结果就为NULL

    4.以指定分隔符拼接字符串

    CONCAT_WS('-','char1','char2',...)

    分隔符为NULL时,结果为NULL;拼接字符包含NULL,NULL不显示

    5.将字符串转换为大写

    UPPER() | UCASE()

    6.将字符串转换为小写

    LOWER() | LCASE()

    7.反转字符串

    REVERSE()

    8.返回字符串的前几个字符或者后几个字符

    LEFT('char',int) | RIGHT('char',int)

    9.用字符串填充到指定长度

    LPAD() | RPAD(原字符串,指定长度,填充字符)

    10.去除字符串两端的空格符

    TRIM() | LTRIM() | RTRIM()

    11.重复指定的字符串达到s个

    REPEAT(s)

    12.替换字符串

    REPLACE(需替换的字符串,需替换的子字符串,替换值)

    13.截取字符串

    SUBSTRING(字符串,fromIndex,toIndex)

    14.比较字符串

    STRCMP(字符串1,字符串2)

    相等时返回0;前者较小时,返回-1;前者较大时,返回1

    日期时间函数

    1.获取当前日期

    CURDATE() | CURRENT_DATE()

    2.获取当前时间

    CURTIME() | CURRENT_TIME()

    3.获取当前日期时间

    NOW() | CURRENT_TIMESTAMP() | SYSDATE()

    4.获取日期中的月份

    MONTH('1970-01-01')

    5.获取月份的名称

    MONTHNAME(CURDATE())

    6.获取星期几

    DAYNAME(日期)

    7.获取一周内的第几天

    DAYOFWEEK(日期)

    8.获取一年内的第几周

    WEEK()

    9.获取年份 天数 小时数 分钟数 秒数

    YEAR() DAY() HOUR() MINIUTE() SECOND()

    10.计算两个日期的相差天数(前-后)

    DATEDIFF(日期1,日期2)

    11.以指定符号分隔日期

    DATE_FORMAT(日期,'%Y/%m/%d')

    %m,%d需小写,大写时显示的是月份,天数名称

    其它函数

    1.Mysql版本

    VERSION()

    2.服务器连接ID

    CONNECTION_ID()

    3.当前数据库

    DATABASE() | SCHEMA()

    4.当前用户

    USER() | CURRENT_USER() | SYSTEM_USER() | SESSION_USER()

    5.获取上一步AUTO_INCREMENT的值

    LAST_INSERT_ID()

    6.加密字符串

    MD5(字符串)

    返回32位的字符串

    7.mysql默认用户密码加密算法

    PASSWORD()

  • 相关阅读:
    MySQL修改表中字段的字符集
    JMM内存模型相关笔记整理
    可重入锁与不可重入锁
    ForkJoin、并行流计算、串行流计算对比
    CyclicBarrier的用法
    git笔记整理-learnGitBranching
    Git 学习相关笔记
    《0day2》学习笔记-part5(书目第十二章(上))
    《0day2》学习笔记-part4(书目第八、九、十、十一章)
    《0day2》学习笔记-part3(书目第六、七章)
  • 原文地址:https://www.cnblogs.com/lxy764139720/p/12194226.html
Copyright © 2011-2022 走看看