• SQL笔记05


    • 安装mysql, 包括MySQL Server:真正的SQL服务器/MySQL Client: 命令行客户端
    • client登录mysql
    • 输入 mysql -u root -p: 登录服务器
    • exit: 断开server连接
    • Client的可执行程序是mysql, Server的可执行程序是mysqld.
    • sql语句, 通过TCP连接发送到server, 端口号默认是: 3306
    • 连接远程sql server, 使用-h <ip>
    • 在MySQL Server服务器上真正执行的是mysqld, 在后台运行

    管理MySQL

    数据库

    • SHOW DATABASES;: 展示所有数据库
    • CREATE DATABASE <数据库名称>: 创建数据库
    • DROP DATABASE <数据库名称>: 删除数据库
    • 删除一个数据, 所有的表都被删除了
    • USE <数据库名称>: 切换数据库

    • SHOW TABLES: 展示所有的表
    • DESC <表名>; 展示表结构
    • 查看建表语句: SHOW CREATE TABLE students;
    • CREATE TABLE <表名>/DROP TABLE <表名>: 创建表/删除表
    • 修改表:
      • 添加一列, 新增一个属性
      • ALTER TABLE students ADD COLUMN birth VARCHAR(10) NOT NULL;
      • ALTER TABLE <表名> ADD COLUMN <列名> <类型> <是否为空>
      • 修改列, 属性
      • ALTER TABLE students CHANGE COLUMN birth birthday VARCHAR(20) NOT NULL;
      • 删除表
      • ALTER TABLE students DROP COLUMN birthday;

    适用SQL语句

    插入或替换

    • 如果当前记录不存在, 就插入; 如果存在, 就替换
    REPLACE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 99);
    

    插入或更新

    • 如果记录不存在就插入, 如果存在, 就根据后面UPDATE进行更新
    INSERT INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 88) ON DUPLICATE KEY UPDATE name='小红', gender='F', score=88;`
    
    • INSERT INTO ... ON DUPLICATE KEY UPDATE ...: 插入或者更新

    插入或忽略

    • 不存在便插入, 存在便忽略
    INSERT IGNORE INTO students (id, class_id, name, gender, score) VALUES (1, 1, '小明', 'F', 22);
    

    快照

    • 都某一个表中的全部数据, 或者指定数据进行快照存储
    CREATE TABLE students_of_class1 SELECT * FROM students WHERE class_id=1;
    

    写入查询结果集

    • 可以使用insertselect查询到的结果直接插入到新表中
    -- 创建表
    CREATE TABLE statistics (id BIGINT NOT NULL AUTO_INCREMENT, class_id BIGINT NOT NULL, average DOUBLE NOT NULL, PRIMARY KEY (id));
    
    -- 查询数据, 并直接插入
    INSERT INTO statistics (class_id, average) SELECT class_id,  AVG(score) FROM students GROUP BY class_id;
    

    强制使用查询索引

    • 执行查询语句, 数据库自动分析查询语句, 并选择一个最合适的索引
    • 多数时候, 数据库系统查询优化器, 并不一定总是使用最优索引
    • 可以使用: FORCE INDEX: 强制查询使用的索引
    -- 新建索引
    CREATE INDEX idx_class_id ON students (id, class_id);
    
    -- 强制使用指定索引进行查询
    SELECT * FROM students FORCE INDEX (idx_class_id) WHERE class_id = 1 ORDER BY id DESC;
    
  • 相关阅读:
    ruby基础语法
    几种移动开发技术的比较和选型
    iOS中UIWebView与其中网页的javascript的交互
    android混合开发,webview的java与js互操作
    在学Go语言
    从11对战平台获取玩家数据进行分析
    本地json文件的编辑器,node-webkit开发的exe程序
    51单片机实现多模式计算器
    如何得到个性化banner
    php文件下载服务器代码
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/13194269.html
Copyright © 2020-2023  润新知