zoukankan      html  css  js  c++  java
  • 数据库基础语句

    数据库基础语句

    • 连接数据库

      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;

  • 相关阅读:
    POJ 3114 Tarjan+Dijkstra
    278. First Bad Version
    209. Minimum Size Subarray Sum
    154. Find Minimum in Rotated Sorted Array II
    153. Find Minimum in Rotated Sorted Array
    710. Random Pick with Blacklist
    767. Reorganize String
    524. Longest Word in Dictionary through Deleting
    349. Intersection of Two Arrays
    350. Intersection of Two Arrays II
  • 原文地址:https://www.cnblogs.com/ikai/p/7744479.html
Copyright © 2011-2022 走看看