• 数据库基础语句


    数据库基础语句

    • 连接数据库

      mysql -u root -p;

    • 查看数据库

      show databases;

    • 选择一个数据库

      USE 数据库名称;

    • 查看当前打开的数据库

      select database();

    • 创建一个基本的表

      create table [IF not exists] table_name (column_name data_type,...);

    • 查看数据库表列表

      show tables [from db_name] [like 'patter' | where expr];

    • 查看表接口

      desc table_name;
      show columns from tbl_name;

    • 插入记录

      INSERT [into] tbl_name [(col_name,...)] values(val,...);

    • 查找记录

      select expr ,... from tbl_name;

    • 数据库约束

      not null 非空约束

      primary key 主键约束

      unique key 唯一约束

      default 默认约束

      foreign key() peferences 外键约束

       外键约束要求:
       - 父表和字表必须使用相同的存储引擎 禁止使用临时表
       - 存储引擎只能为 __InnoDB__
       - 外键列和参照列必须具有相似的数据类型,其中数字的长度或是否有符号为必须相同;而字符的长度则可以不同
       - 外键列和参照列必须创建索引,如果外键列不存在索引MySQL自动创建索引
      
       外键约束的参照操作:
       - CASCADE:从父表删除或更新且自动删除或更新字表中匹配的行
       - SET NULL:从父表删除或更新行,并设置子表中的外键列为NUll。如果使用该项,必须保证子表列没有指定not null 
       - RESTRICT:拒绝对父表的删除或更新操作
       - NO ACTION:标准的SQL关键字,在MySQL中与RESTRICT相同
      
    • 主键自增

      primary key auto_increment

    • 创建表时列为无符号

      unsigned

    • 查看创建一个表的SQL语句

      show create table tbl_name;

    • 查看表的索引

      show Indexes from tbl_name/G;

    • 添加单列

      alter table tbl_name add [column] col_name column_definition [first | after col_name];

    • 添加多列

      ALTER TABLE tb1_name ADD[COLUMN] (col_name column_definition,...);

    • 删除列 以逗号分割删除多个

      ALTER TABLE tb1_name DROP[COLUMN] col_name;

    • 修改列

      alter table tble_name modify [column] col_name column_definition [first | after col_name];

    • 修改列名称

      ALTER TABLE tb1_name change old_col_name new_col_name column_deinition [first | after col_name];

    • 修改数据表

      ALTER TABLE tb1_name rename [TO|AS] new_tbl_name;

      rename TABLE tb1_name rename TO new_tbl_name[,tbl_name2 to new_tbl_name2]...;

    • 插入记录

      insert [INTO] tbl_name [(col_name)] {values | value} ({expr | default},..),(...),...;

    • 插入记录

      insert [info] tb1_name set col_name={expr|default},...;

    • 插入记录

      insert [info] tb1_name [(col_name,...)] select ...;

    • 更新记录(单表更新)

      UPDATE [low_priority] [ignore] table_reference set col_name1={expr|default}[,col_name2={expr|default}]...[where where_condition];

    • 删除记录(单表删除)

      delete from tbl_name [where where_condition];

    • 查询记录-多条件

      select select_expr[,select_expr ...][from table_references[where where_condition][group by{col_name | position}[ASC|DESC],...][having where_condition][order by{col_name|expr|position}[ASC|DESC],...][limit {[offset,] row_count | row_count offset offset}]];

       查询表达式 select_expr
        - 每个表达式表示想要的一列,必须有至少一个。
        - 多个列之间以英文逗号分隔
        - 星号(*)表示所有列。tbl_name.*可以表示命名表的所有列。
        - 查询表达式可以使用[AS] alias_name 为其赋予别名。
        - 别名可用于group by ,order by 或 having 字句。
      
    • 创建自定义函数

      create function function_name returns {string | integer | real | decimal} routine_body;

    • 删除定义函数

      drop function function_name;

       自定义函数两个必要条件:
       - 参数(可以包含0个或多个参数)
       - 返回值(必须包含一个返回值)
       - 具有复合结构的函数体需要使用BEGIN...end 来包含
      
    • 修改mysql的结束符号

      delimiter 符号;

    • 存储过程

      ——————;

       存储过程是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理,用户调用执行,接收多个参数,返回多个参数。
       存储过程优点:
       - 增强了SQL语句的功能和灵活性
       - 实现较快的执行速度
       - 减少了网络流量
      
    • 创建存储过程

      create [definer = {user | current_user}] procedure sp_name ([proc_parameter[,...]]) [characteristic..] routine_body;

      proc_parameter: [IN |OUT|INOUT] param_name type

       - IN:表示该参数的值必须在调用存储过程时指定
       - OUT:表示该参数的值可以被存储过程改变,并且可以返回
       - INOUT:表示该参数的调用时指定,并且可以被改变和返回
       - 特性
       	- comment:注释
       	- contains sql:包含SQL语句,但不包含读或写数据的语句
       	- no sql:不包含sql语句
       	- reads sql data:包含读数据的语句
       	- modifies sql data:包含写数据的语句
       	- sql security {definer|invoker} : 指明谁有权限来执行
       - 过程体
       	- 由合法的SQL语句组成
       	- 可以是任意的SQL语句
       	- 复合结构则使用BEGIN..END
       	- 可以包含声明、循环、控制语句
      
       - 结语
       	- 存储过程:是SQL语句和控制语句的预编译集合,以一个名称存储作为一个单元处理
       	- 参数:输入类型、输出类型、输入&输出类型
       	- 创建:create...procedure...
       	- 注意事项
       		- 创建存储过程或自定义函数需要用delimiter语句修改定界符
       		- 如果自定义函数或存储过程复合体要用begin..end 进行包裹
       		- 存储过程用call来调用
      
    • 调用存储过程

      CALL sp_name([parmater[,...]]);
      CALL sp_name[()];

    • 修改存储过程

      ALTER procedure sp_name [characteristic...] comment 'string' |{contains SQL |NO SQL|reads sql data|modifies sql data} |sql security{definer|invoker};

    • 删除存储过程

      drop procedure sp_name;

    • 设置用户变量 只在当前的客户端生效

      set @par_name;

    • 返回通过增删改查操作成功的记录数

      SELECT row_count();

    • 存储引擎

      --;

       MySQL可以将数据以不同的技术存储在文件(内存)中,这种技术就称为存储引擎。
       - MySQL支持的存储引擎
       	- MyISAM:不支持事务,支持表锁,支持索引,最大256TB,支持数据压缩,支持外键
       	- InnoDB:支持事务,支持行锁,支持索引,最大64TB,不支持数据压缩,支持外键
       	- Memory:不支持事务,表锁,支持索引,不支持数据压缩,支持外键
       	- CSV:
       	- Archive:不支持事务,支持行锁以及索引,支持数据压缩,支持外键
      
       - 共享锁(读锁)
       	- 在同一时间段内,多个用户可以读取同一个资源,读取过程数据不会发生任何变化
      
       - 排它锁(写锁)
       	- 在任何时候只能有一个用户写入资源,当进行写锁时会阻塞其他的读锁或者写锁操作
      
       - 锁颗粒
       	- 表锁:开销最小锁策略
       	- 行锁:开销最大的锁策略(支持最大并发)
      
       - 事务的四大特性
       	- 原子性(A),一致性(C),隔离性(I),持久性(D)
      
    • 修改存储引擎

      create table tbl_name(...)engine = engine;

  • 相关阅读:
    浅谈 LCA
    树剖毒瘤题整理
    树链剖分&咕咕咕了好久好久的qtree3
    洛谷P4095新背包问题
    洛谷P4127同类分布
    洛谷P4124 手机号码
    数位dp好题整理+自己wa过的细节记录
    P4999烦(gui)人(chu)的数学作业
    洛谷P4317 花(fa)神的数论题(数位dp解法)
    网络流之最短路径覆盖问题
  • 原文地址:https://www.cnblogs.com/ikai/p/7744479.html
Copyright © 2020-2023  润新知