• MySQL基本操作笔记


    一、数值类型

    1、常量
    (1)字符串常量
    ASCII字符串常量占一个字节
    例如:'Hello Word'
    Unicode字符串常量占两个字节
    例如:N'Hello Word'

    mysql> select 'Hello Word';
    +------------+
    | Hello Word |
    +------------+
    | Hello Word |
    +------------+
    1 row in set (0.00 sec)
    
    mysql> select N'Hello Word';
    +------------+
    | Hello Word |
    +------------+
    | Hello Word |
    +------------+
    1 row in set (0.01 sec)

    (2)数值常量
    整数常量:不带小数的十进制数
    浮点数常量:使用小数点数的数值常量
    例如:5.23、10.5E5(科学计数法)

    mysql> select 3.14159;
    +---------+
    | 3.14159 |
    +---------+
    | 3.14159 |
    +---------+
    1 row in set (0.00 sec)
    
    mysql> select 100e-3;
    +--------+
    | 100e-3 |
    +--------+
    |    0.1 |
    +--------+

    (3)十六进制常量
    MySQL支持十六进制;一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符;其最前面有一个大写字母“X”或者小写字母“x”;0-9,A(a)-F(f);
    例如:X'41'表示大写字母A;x'4D7953514C'表示字符串MySQL;

    mysql> select X'41';
    +-------+
    | X'41' |
    +-------+
    | A     |
    +-------+
    1 row in set (0.00 sec)

    (4)日期时间常量
    用单引号将表示日期时间的字符串括起来构成;
    日期型常量包括年、月、日,数据类型为DATE;例如:'2021-09-30';
    时间型常量包括小时、分钟、秒、微秒,数据类型为TIME;例如:'13:47:00:00';

    mysql> select '2021-09-30 13:56:00';
    +---------------------+
    | 2021-09-30 13:56:00 |
    +---------------------+
    | 2021-09-30 13:56:00 |
    +---------------------+
    1 row in set (0.01 sec)

    (5)位字段值
    可以使用b'value'符号写位字段值;例如b'0' ,b'1';不同的数据库,展示的内容不一样;

    mysql> select b'1';
    +------+
    | b'1' |
    +------+
    |     |
    +------+
    1 row in set (0.00 sec)

    (6)布尔值
    TRUE 1
    FALSE 0

    mysql> select TRUE;
    +------+
    | TRUE |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)

    (7)NULL值
    通常用来表示空值,无数据;但是并不等同于字符串类型的空字符串

    mysql> select NULL;
    +------+
    | NULL |
    +------+
    | NULL |
    +------+
    1 row in set (0.04 sec)

    2、变量
    用户可以在表达式中使用自己定义的变量,称为用户变量;
    使用用户变量前必须先定义或者初始化;如果使用没有初始化的变量,它的值位NULL;
    用户变量前加@用来区分列名;
    系统变量前加两个@@;

    mysql> set @a=1;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> select @a;
    +------+
    | @a   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)

    3、运算符
    (1)算数运算符
      +(加)、-(减)、*(乘)、/(除)、%(取模)

    mysql> select 7%3;
    +------+
    | 7%3  |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)

    (2)位运算符
      &(位与)、|(位或)、^(位异或)、~(位取反)、>>(位右移)、<<(位左移);
      例如:二进制101转十进制:1*2**2+0*2**1+1*2**0=4+0+1=5
         二进制101向左移1位:1010 转换为十进制为:10;原来的数乘以2;
         二进制101向右移动1位:10;转换位十进制为:2;原来的数除以2取整;

    mysql> select 5&1;
    +-----+
    | 5&1 |
    +-----+
    |   1 |
    +-----+
    解释:
    5的二进制为101
    1的二进制为001
    
    1与0 结果为假0
    0与0 结果为假0
    1与1 结果为真1
    所以结果为1;
    mysql> select 5|1;
    +-----+
    | 5|1 |
    +-----+
    |   5 |
    +-----+
    解释:
    5的二进制为101;
    1的二进制位001;
    
    1或0 结果为真1
    0或0 结果假0
    1或1 结果为真1
    所以结果为5;
    mysql> select 5 >> 1;
    +--------+
    | 5 >> 1 |
    +--------+
    |      2 |
    +--------+
    1 row in set (0.00 sec)
    
    mysql> select 5 << 1;
    +--------+
    | 5 << 1 |
    +--------+
    |     10 |
    +--------+
    1 row in set (0.00 sec)

    (3)比较运算符
      其结果为逻辑值真、假、NULL
      =(等于)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)、<>/!=(不等于)、<=>(相等或等于空)

    mysql> select 5 > 4;
    +-------+
    | 5 > 4 |
    +-------+
    |     1 |
    +-------+
    1 row in set (0.00 sec)

    (4)逻辑运算符
      NOT或! 逻辑非
      AND或&& 逻辑与
      OR或|| 逻辑或
      XOR 逻辑异或

    mysql> select 5 >4 OR 5>8;
    +-------------+
    | 5 >4 OR 5>8 |
    +-------------+
    |           1 |
    +-------------+
    1 row in set (0.00 sec)
    
    mysql> select 5 >4 AND 5>8;
    +--------------+
    | 5 >4 AND 5>8 |
    +--------------+
    |            0 |
    +--------------+
    1 row in set (0.00 sec)

    4、表达式
      表达式就是常量、变量、列名、复杂计算、运算符和函数的组合;
    5、内置函数
      ABS() 绝对值
      SORT() 开根号
      COUNT() 聚合
      ASCII()
      CHAR()
      NOW() 获取当前时间
      YEAR()
      ENCODE()/ENCRYPT() 加密函数
      IF())/IFNULL() 流程控制函数
      FORMAT() 格式化函数
      CAST() 类型转换函数

    mysql> select now();
    +---------------------+
    | now()                   |
    +---------------------+
    | 2021-09-30 16:18:49 |
    +---------------------+
    1 row in set (0.00 sec)
    mysql> select abs(-10);
    +----------+
    | abs(-10) |
    +----------+
    |       10    |
    +----------+
    1 row in set (0.00 sec)
    mysql> select ASCII('A');
    +------------+
    | ASCII('A') |
    +------------+
    |         65 |
    +------------+
    1 row in set (0.00 sec)
    mysql> select char(65);
    +----------+
    | char(65) |
    +----------+
    | A        |
    +----------+
    1 row in set (0.00 sec)

      mysql> select year(now()); #month(now()),day(now())
      +-------------+
      | year(now()) |
      +-------------+
      | 2021        |
      +-------------+
      1 row in set (0.00 sec)

      mysql> select cast(X'41' as unsigned);  #此时不再是字符a;而是字符65;
      +-------------------------+
      | cast(X'41' as unsigned) |
      +-------------------------+
      | 65                      |
      +-------------------------+
      1 row in set (0.00 sec)

    二、数据库定义
    1、创建数据库
      语法格式:
        CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
        [DEFAULT] CHARACTER SET charset_name
        |[DEFAULT] COLLATE collation_name
        说明:语句中"[]"内为可选项;
        db_name:数据库名
        IF NOT EXISTS:在建数据可前进行判断,只有该数据库目前不存在是才执行CREATE DATABASES操作;
        DEFAULT:指定默认值;
        CHARACTER SET:指定数据库字符集(Charset)
        charset_name为字符集名称
        COLLATE:指定字符集的校对规则
    2、选择数据库
      USE db_name;
    3、修改数据库
    语法格式:
      ALTER {DATABASE | SCHEMA} [db_name]
      alter_specification [,alter_specification]
      [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name
    4、删除数据库
    语法格式:
      DROP DATABASE [IF EXISTS] db_name
      db_name是要删除的数据库名;可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息;
    5、查看数据库
      SHOW [DATABASES | SCHEMAS]
    三、表定义
      数值类型:
        整型 INT
        浮点型 FLOAT、DOUBLE、DECIMAL
      日期和时间类型:
        日期类型 DATE(YYYY-MM-DD)、YEAR
        日期时间类型 DATETIME、TIME
        时间戳类型 TIMESTAMP
      字符串类型:
        固定长度类型 CHAR 最大长度255
        可变长度类型 VARCHAR 最大长度65535
      文本类型 TEXT
    1、创建表
        语法格式:
      CREATE TABLE [IF NOT EXISTS] tbl_name(字段名1 数据类型 [列级完整性约束条件] [默认值] [,字段名2 数据类型 [列级完整性约束条件] [默认值]] [表级完整性约束])[ENGINE=引擎类型];

    mysql> create table student (id int not null auto_increment, name varchar(10),age int);
    ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
    #自增列只能有1列,而且必须是key;
    mysql> create table student (id int not null auto_increment primary key, name varchar(10),age int);
    Query OK, 0 rows affected (0.01 sec)
    #id数据类型为int型,不允许为空,且为自增长,主键;

    2、添加字段
      ALTER TABLE tbl_name ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
    3、修改字段
      ALTER TABLE tbl_name CHANGE [COLUMN] 原字段 新字段名 数据类型
      [约束条件]
      ALTER TABLE tbl_name ALTER [COLUMN] 字段名 {SET | DROP} DEFAULT;
      ALTER TABLE tbl_name MODIFY [COLUMN] 字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
    4、删除字段
      ALTER TABLE tbl_name DROP [COLUMN] 字段名;
    5、重命名表
      ALTER TABLE 原表名 RENAME [TO] 新表名
      RENAME TABLE 原表名1 TO 新表名1 [,原表名2 TO 新表名2]......;
    6、删除表
      DROP TABLE [IF EXISTS] 表1[,表2]......
    7、查看表
      SHOW TABLES [{FROM | IN} db_name];
    8、查看表结构
      SHOW COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name];
      DESC tbl_name;
    四、索引定义
      可以理解成目录,在查找时有目录查找速度会加快;
      用途划分:
      普通索引(INDEX) 类似于排序
      唯一性索引(UNIQUE) 在某一个特定的列中不允许有重复值;
      主键(PRIMARY KEY)
      全文索引(FULLTEXT) 引擎MyIAM支持
      聚簇索引 引擎InnoDB支持
      列表索引
      单列索引
      组合索引
    1、索引的创建
    (1)方法
      CREATE TABLE tbl_name[col_name data_type] [CONSTRAINT index_name]
      [UNIQUE][INDEX|KEY][index_name](index_col_name[lengh])[ASC(升序)|DESC(降序)]
    (2)方法(常用)
      CREATE [UNIQUE] INDEX index_name ON tbl_name(col_name[(length)][ASC|DESC],...)
    (3)方法
      ALTER TABLE tbl_name ADD[UNIQUE|DULLTEXT][INDEX|KEY][index_name](col_name[length][ASC|DESC],...)
    2、索引的查看
        语法格式:
      SHOW {INDEX|INDEXS|KEYS}{FROM|IN} tbl_name [{FROM|IN} db_name]
    3、索引的删除
        语法格式:
      (1)DROP INDEX index_name ON tbl_name;
      (2)ALTER TABLE tbl_name DROP INDEX index_name;
    五、数据更新
    1、插入数据
        INSERT语法格式:
      INSERT INTO tbl_name(column_list) VALUES (value_list1)[,(value_list2)],...
     从数据查询中插入数据
      INSERT INTO tbl_name1 (column_list1) SELECT (column_list2) FROM tbl_name2 WHERE (condition)
    注意:column_list1与column_list2必须个数相同且数据类型一一对应;
        使用INSERT...SET语句插入部分列值数据
      INSERT [INTO] tbl_name SET col_name={expr|DEFAULT},...
        使用INSERT...SELECT语句插入子查询数据
      INSERT [INTO] tbl_name [(col_name,..)] SELECT ...
    2、删除数据
        语法格式:
      DELETE FROM tbl_name [WHERE <condition>];
        删除所有记录可以使用:
      TRUNCATE [TABLE] tbl_name;
    注意:TRUNCATE是删除整个表,重新建一个表,在删除全部数据时候效率高于DELETE,DELETE逐条删除;TRUNCATE无法恢复,AUTO_INCREMENT计数器重置;
    3、修改数据
        语法格式:
      UPDATE tbl_name SET col_name1=expr1 [,col_name2=expr2 ...] [WHERE where_definition]
    六、视图定义
    视图是从一个或多个表(或视图)导出的表;例如,对于一个学校,其学生的情况存于数据库的一个或多个表中,而作为学校的不同职能部门,所关心的学生数据的内容是不同的;
    视图是一张虚表;
    视图一经定义以后,就可以像表一样被查询、修改、删除和更新;
    1、创建视图
        语法格式:
      CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW view_name [(column_list)]
      AS select_statement
      [WITH [CASCADED | LOCAL] CHECK OPTION]

    mysql> select * from student1;
    +----+-------+------+-------+
    | id | name  | age  | class |
    +----+-------+------+-------+
    |  1 | jerry |   30 | NULL  |
    |  2 | tom   |   22 | NULL  |
    |  3 | marry |   20 | NULL  |
    |  4 | jack  |   18 | NULL  |
    |  5 | lilei |   30 | 1-1   |
    +----+-------+------+-------+
    mysql> create view v_avg(avg) as select avg(age) from student1;
    mysql> create view v_age as select age from student1 where age>=20;

    2、删除视图
        语法格式:
      DROP VIEW [IF EXISTS]
      view_name [,view_name] ...
    3、修改视图定义
        语法格式:
      ALTER VIEW view_name [(column_list)]
      AS select_statement
      [WITH [CASCADED | LOCAL] CHECK OPTION]
    4、查看视图定义
        语法格式:
      SHOW CREATE VIEW view_name

    七、数据查询
    1、select语句
    SELECT [ALL|DISTINCT(唯一,去除重复)|DISTINCTROW] select_expr,... [FROM table_reference [,table_reference]...] [WHERE where_definition] /*WHERE子句/
    [GROUP BY {col_name|expr|position} [ASC|DESC],...[WITH ROLLUP]] /*GROUP BY子句*/
    [HAVING where_definition] /*HAVING子句*/
    [ORDER BY {col_name|expr|position} [ASC|DESC],...] /*ORDER BY子句*/
    [LIMIT {[offset,] row_count|row_count OFFSET offset}] /*LIMIT子句*/

    子句        说明                 是否必须使用
    SELECT     要返回的列或表达式         是
    FROM       从中检索数据的表      仅在从表选择数据是使用
    WHERE      行级过滤                 否
    GROUP BY   分组说明              仅在按组计算聚合时使用
    HAVING     组级过滤                 否
    ORDER BY   输出排序顺序              否
    LIMIT      要检索的顺序              否

    2、列的选择与指定
    (1)选择指定的列
    SELECT list1,list2,... FROM table_name;
    (2)选择所有列
    SELECT * FROM table_name;
    3、定义并使用列的别名
    SELECT list1 AS alias_name1, list2 AS alias_name2,..., FROM table_name;
    4、计算列值

    函数名             说明
    COUNT          求组中项数,返回int类型整数
    MAX            求最大值
    MIN            求最小值
    SUM            求和
    AVG            求平均
    STD或STDDEV    返回给定表达式中所有值的标准值
    VARIANCE       返回给定表达式中所有值的方差
    GROUP_CONCAT   返回由属于一组的列值链接组合而成的结果
    BIT_AND        逻辑或
    BIR_OR         逻辑与
    BIT_XOR        逻辑异或
    mysql> select * from student;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | zhang |   18 |
    |  2 | wang  |   20 |
    |  6 | li    |   15 |
    |  7 | zhao  |   13 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select count(age) from student where age >= 15;
    +------------+
    | count(age) |
    +------------+
    |          3 |
    +------------+
    1 row in set (0.00 sec)
    mysql> select sum(age) from student where age >= 15;
    +----------+
    | sum(age) |
    +----------+
    |       53 |
    +----------+
    1 row in set (0.01 sec)
    mysql> select avg(age) from student;
    +----------+
    | avg(age) |
    +----------+
    |  16.5000 |
    +----------+
    1 row in set (0.00 sec)
    mysql> select * from student order by age asc;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  7 | zhao  |   13 |
    |  6 | li    |   15 |
    |  1 | zhang |   18 |
    |  2 | wang  |   20 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select * from student order by age desc;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  2 | wang  |   20 |
    |  1 | zhang |   18 |
    |  6 | li    |   15 |
    |  7 | zhao  |   13 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select * from student order by age desc limit 2;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  2 | wang  |   20 |
    |  1 | zhang |   18 |
    +----+-------+------+
    2 rows in set (0.00 sec)
    mysql> select * from student;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | zhang |   18 |
    |  2 | wang  |   20 |
    |  6 | li    |   15 |
    |  7 | zhao  |   13 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select sum(id*age) as 'id乘以年龄的总和' from student;  #(1*18+2*20+6*15+7*13)
    +-------------------------+
    | id乘以年龄的总和          |
    +-------------------------+
    |                     239 |
    +-------------------------+
    1 row in set (0.00 sec)

    5、FROM子句多表连接查询
    (1)内连接
    FROM table1 [INNER] JOIN table2 ON 连接条件
    等值连接
    FROM table1, [table2] ... WHERE table1.字段 <比较运算符> table2.字段
    (2)外连接
    左连接
    FROM table1 [LEFT] JOIN table2 ON 连接条件
    右连接
    FROM table1 [RIGHT] JOIN table2 ON 连接条件

    mysql> select * from student;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | zhang |   18 |
    |  2 | wang  |   20 |
    |  6 | li    |   15 |
    |  7 | zhao  |   13 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select * from student1;
    +----+-------+------+
    | id | name  | age  |
    +----+-------+------+
    |  1 | jerry |   30 |
    |  2 | tom   |   22 |
    |  3 | marry |   20 |
    |  4 | jack  |   18 |
    +----+-------+------+
    4 rows in set (0.00 sec)
    mysql> select * from student join student1 on student.age=student1.age;
    +----+-------+------+----+-------+------+
    | id | name  | age  | id | name  | age  |
    +----+-------+------+----+-------+------+
    |  2 | wang  |   20 |  3 | marry |   20 |
    |  1 | zhang |   18 |  4 | jack  |   18 |
    +----+-------+------+----+-------+------+
    2 rows in set (0.00 sec)

    6、WHERE子句与查询条件

    查询条件      操作符
    比较         =, <>, !=, <, <=, >, >=, !, NOT+比较运算符 
    确定范围     BETWEEN AND, NOT BETWEEN AND
    确定集合     IN, NOT IN 
    字符匹配     LIKE, NOT LIKE
    空值        IS NULL, IS NOT NULL
  • 相关阅读:
    继承与派生
    函数,迭代器,生成器
    面向对象
    函数
    模块与包
    python面试题(转自https://www.cnblogs.com/wupeiqi/p/9078770.html)
    python学习大纲目录(转自alex博客https://www.cnblogs.com/alex3714/)
    Mysql(基础篇)
    初识HTML和CSS2
    初识前端作业1
  • 原文地址:https://www.cnblogs.com/zhangzhide/p/15357872.html
Copyright © 2020-2023  润新知