数据库基础语句

数据库基础语句

  • 连接数据库

    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;

原文地址:https://www.cnblogs.com/ikai/p/7744479.html