zoukankan      html  css  js  c++  java
  • mysql-笔记 定义语句

     show charactor set ; show collation ; show warnings;

    查看表信息:select * from information_schema.tables

    show create table tt02;

     show index from tbl_name

    1 alter {database | schema} [db_name] 

      [default] character set [=] charset_name

      [default] collate[=]collation_name

    可以必变所有数据的特性,这些特性被存储在数据库目录 下的db.opt文件中

    alter {database|schema} db_name upgrade data directory name  从旧版本5.1之前升级 到5.1之后 。将会作废在以后版本中。

    2 Alter

      [Definer=user]

      event_name

      [on schedule schedule]

      [on completion [not] preserve]

      [rename to new_event_name]

      [enable|disable|disable on slave]

      [comment 'string']

      [do event_body]

    只对存在的事务起作用

    create event myevent

      on schedule

        every 6 hour

      comment 'a sample comment.'

      do

        update tt02 set a=a+1;

    alter event myevent on schedule every 12 hour starts current_timestamp+interval 4 hour;

    alter event myevent on schedule at current_timestamp+interval 1 day do truncate table tt02;

    使用事件不起作用 alter event myevent   disable 

    on schedule 语句 可以使用 mysql自带的函数,用户变量 以获取任务timestamp或interval值。不能使用存储过账或用户自定义的函数。不能使用任何表引用。但可以使用select from dual

    重命名: alter event myevent  rename to yourevent;

    移动事件到不同的数据库:alter event olddb.myevent  rename to newdb.myevent;

    disable on slave 复制事件到从服务器中,但不执行事件。

    2 Alter Function func_name

    [

      comment 'string'

      |language sql

      |{contains sql | no sql | reads sql data | modifies sql data }

      | sql security {definer|invoker}

    ]

    可以改变函数的特性,但是不能改变函数的变量 和 函数体(只能删除后重新生成函数)

    必须有这一函数的alter routine 权限

    3 alter logfile group logfile_group 

      add undofile 'file_name'

      [initial_size[=]size]

      [wait]

      engine [=] engine_name

    只有一个 add undofile 语句

    initial_size参数按字节设置初始大小;如果没有指定,初始值=128MB。 单位可以是:M G 

    32位系统中最大支持:4GB

    最小值是:1MB

    engine参数:存储引擎。当前只接受:NDB  NDBCLUSTER ,二者是相等的。

    alter logfile group lg_3

      add undofile 'undo_10.dat'

      initial_size=32M

      engine=ndb

    select file_name,logfile-group_number,extra from information_schema.files

     5 Alter procedure proc_name

      [

        comment 'string'

        | language sql

        | {contains sql | no sql | reads sql data | modifies sql data }

        | sql security {definer | invoker}

    ]

    只能改变存储过程的特性,不能改变参数 和 内容

    6 alter server server_name

      options (option[,option]...)

    修改服务器信息 ,调整任务create server语句允许的选项 并修改 mysql.servers 表中的相关字段。 需要 super 权限。

    7 alter table 

    修改表结构,例如:添加列/删除列 /创建索引/作废索引/改变现有列的类型/重命名列,重命名表,改变存储引擎或注释

    需要表的alter create insert 权限

    alter table t1 engine=InnoDB; 修改engine时,会重新建表。

    alter table t1 row_format=compressed;

    alter table tt02 encryption='Y';alter table tt02 encryption='N'; 必须安装keying插件

    alter table tt02 add column id int auto_increment primary key; 添加自增列

    alter table tt02 auto_increment=13;重新设置自增值,这个值不能小于或等于当前存在的值,如果大于等于存在 在INNODB MYISAM中值,则为最大值加1

    alter table tt02 character set =utf8; 修改字符集

    alter table tt02 comment='for test comment alter'; 修改注释,会作废所有存在的注释

    alter table ... tablespace 总会引起重建整个表,即使tablespace属性没有改变。不支持从临时表空间到永久表空间转移。

    select table_name,data_free,engine,version,table_comment,table_rows,row_format from information_schema.tables where table_name like '%tt%'; 查看表信息

    show create table tt02; 查看表信息

    使用alter 添加、删除列-默认添加在最后,可以使用first/after 指定位置,如果只有一列不可以删除这一列。如果删除了一列,则这一列在所有的索引中也被移除,如果索引的所有列都被移除了,则这个索引也被移除。

      change: 可以重命名列、改变列的定义 ,需要2次命名列名。使用first或after能改变列的顺序

      modify:可以改变列的定义 不能重命名;使用first after可以改变列的顺序,如果不是重命名,比change的使用更方便

      alter :只用于改变列默认值

      alter table tt02 change a a1 bigint not null; 重命名

      alter table tt02 change a1 a1 int not null;修改类型

      alter table tt02 modify a1 int not null; 修改类型,并删除 unsigned,default,comment 属性。如果保留这些需要确切的定义出来。

      alter table tt02 modify a1 int unsigned default 1 comment 'my column';

      转换可以会丢数据 ,字符串改变长度,索引长度变短

      使用change 重命名时,索引、外键中的字段会改变。视图、存储过程中的字段不会改变。

      alter ... set default or alter ..drop default 指定一个新的默认值或删除一个旧的默认值。

      使用 after//first in change 或 modify 操作中 重新对字段排序

      drop primary key 删除主键,如果没有则出错。

      drop index 删除一个索引

      rename index old_index_name To new_index_name 重命名索引,old_index_name 必须是存在的索引名称。new_index_name 新的名称不能与存在的索引重名。且2个索引名称都不能是主键索引

      如果 在MyISAM 表中使用alter table ,所有的非唯一索引被创建在一个单独的批中 像:repair table,这样有多个索引时使用alter table 很快。

     MyISAM 表可以设置 myisam_sort_buffer_size系统变量为一个大的值,可以提高索引速度

    Alter table XXX Disable keys 禁用索引 

    Alter table XXX enable keys 使用索引重新开启索引

    禁用索引后再操作MyISAM 表,如批量导入,操作完成后再开启索引。这样可以提交速度

      Add constraint XXX foreign key 

      alter table tbl_name drop foreign key fk_symbol;

      alter table tbl_name convert to character set charset_name; utf8

       Alter table partion_options 相关子句 可以用来分区操作:添加、删除、作废、导入、合并、拆分 操作

       create table t1( id int,year_col int) partition by range (year_col)( partition p0 values less than (1991), partition p1 values less than (1999));

      alter table t1 add partition (partition p3 values less than (200));

      alter table t1 drop partition p0,p1; 在NDB 存储引擎中不起作用

      add partition /drop partition当前不支持 if [not] exists 

      每个innodb表有它自己的表空间文件。

      alter table t1 discard partition p2,p3 tablespace

      alter table t1 import partition p2,p3 tablespace

      create table t1(id int,year_col int) partition by range(year_col)(partition p0 values less than (1991),partition p1 values less than (1995),partition p2 values less than(1999));

      alter table t1 truncate partition p0,p1 ; 删除所有p0内的记录 ,只删除行

      delete from t1 where year_col<1991;

      alter table t1 truncate partition all;

      select partition_name,table_rows from information_schema.partitions where table_name='t1'; 检查分区行数

      truncate partition只支持 存储引擎是myisam/innodb/memory的分区表

      create table t2( name varchar(30),started date)partition by hash(year(started)) partitions 6;

      alter table t2 coalesce partition 2; 合并最后2个分式到之前的几个分区中,用于使用hash key 分区的表

      remove partitioning 移除表的分区不影响表的数据

     alter table 允许generated column添加、修改、

      create table t1(c1 int);alter table t1 add column c2 int generated always as (c1+1) stored; 添加

      alter table t1 modify column c2 tinyint generated always as (c1+5) stored; 修改 ,虚拟列不能修改为存储列,反之亦然,只能删除后添加新的定义

      alter table t3 add column c3 int generated always as (c1+1) virtual;

      create table t4 (c1 int,c2 int);alter table t1 modify column c2 int generated always as (c1+1) stored; 可以转化非generated 列成为存储列,但是不可以转化为 虚拟列。

      alter table t4 modify column c2 int; 可以转化generated存储列到非generated列。但是不可以转化虚拟列。

     alter table t4 rename t41 ; 重命名表名

     alter table t4  modify c2 tinyint not null,change c1 c11 char(20);

    ------------------------------------------------------------------------------------------

    alter tablespace tablespace_name

    {add | drop} datafile 'file_name'

    [initial_size[=] size]

    engine[=] engine_name

    添加、删除表空间中的数据文件

    ---------------------------------------------------------------------

    alter view view_name[(column_list)] as select_statement [with [cascaded|local] check option ]

    --------------------------------------------------

    create 

      [definer=user]

      event

      [if not exists]

      event_name

      on schedule schedule [on completion [not] preserve] [enalbe | disable | disable on slave] [ comment 'string'] do event_body;

    schedule:

      at timestamp [+ interval interval]... |

      every interval [starts timestamp[+interval interval]...][Ends timestamp [+ interval interval]...]

    interval:

      quantity {year | quarter|month|day|hour|minute|week|second|year_month|day_hour|day_minute|day_second|hour_minute|hour_second|minute_second}

     一个有效的create event 语句 至少要有:

      1 Create event+ eventName 在数据库中唯一的名称

      2 on schedule 语句  什么时候如何执行事件

      3 do 语句:事件执行的sql语句

      create event myevent

        on schedule at current_timestamp + interval 1 hour

        do update myschema.mytable set mycol=mycol+1;

    ----------------------------------------------

    create logfile group logfile_group 

      add undofile 'undo_file'

    创建一个日志文件组包含一个文件,一个NDB群集实例只能有一个日志文件组,只能在NDB 中使用

    如果不指定 存储引擎,按默认的引擎:select @@default_storage_engine ;

     -----------------------------------------------------------

    create [definer=user] procedure sp_name([proc_parameter[,]])[characeristic...] routine_body

    pro_parameter;[in | out | inout] param_name type

    create [definer=user] function sp_name([func_parameter[,...]]) returns type [characteristic] routine_body

    使用call 触发存储过账

    如果没有参数也要有() 参数名称大小写不敏感,默认为 in 参数

    in 参数传递值到存储过程,out 参数传递值到外部调用者,inout 参数调用时初始化,可以在存储过程中修改,返回给调用者。

    delimiter //                    声名分隔符

    create procedure simpleproc (out param1 int) begin select count(*) into param1 from t; end//

    delimiter ;

    call simpleproc(@a); select @a;

    函数中returns 语句是必须的,指示函数的返回类型,函数体必须包含一个return 值语句

    create function hello (s char(20)) returns char(50) deterministic return concat('hello,',s,'!');

    select hello('world');

     --------------------------------------------------------------------

     create [temporary] table [IF not exists] db_name.tbl_name

    create table new_tbl like orig_tbl

    create table new_tbl as select * from orig_tbl;

    一个表限制列数=4096,auto_increment 应用于integer floating-point 类型;default不能应用于 blob text geometry json 类型

    create table t (c char(20) character set utf8 collate utf8_bin);

    auto_increment:当插入null 或 0时,自动=自增列最大值+1,插入一行后 使用 last_insert_id() 或 mysql_insert_id() ,如果 no_auto_value_on_zero=enabled ,存储0时不会自动按最大值+1

    一个表只能有一列auto_increment列。必须是索引列,不能有default值。使用正数时可以正常工作,使用负数时会作为最正数大值使用。

    MYISAM表中,可以指出第二个auto_increment 列

    列的comment 指定一个comment 1024字符长。使用 show create  table 或 show full columns 语句查看

    NDB表可以使用storage disk storage memory ,必须包含 tablespace 语句。

     primary key 唯一索引,所有关键列都为 not null ,一个表只能有一个primary key

    show index from tbl_name 查看索引

    foregin key 表之间的关联

    --------------------------------------------------------------------------------------------------

    create trigger [definer=user] 

    trigger_name 同一架构下不能有同名称

    trigger_time trigger_event on tbl_name  for each row

    [trigger_order] trigger_body 使用begin end 结构

    trigger_time:{before | after}

    trigger_event:{insert | update | delete } drop table ,truncate table drop a partition 不能触发触发器

    trigger_order:{follows | precedes} other_trigger_name

    ------------------------------------------------------------------------------

    create [or replace] [definer=user] 如果有replace 语句 ,如果没有则创建,如果有则 替换

    view view_name [(column_list)] as

    select_statement [with[cascaded|local] check option] 如果生成视图的表添加字段则视图不会添加字段,如果生成视图的表删除了字段,在从视图中查询时 出错

    默认视图创建在默认的数据库中,可以使用db_name.view_name 来指定所属的数据库

    ------------------------------------------------------------------------------------

    drop {database|schema}[if exists] db_name 删除所有数据库中的表 并删除数据库

    会删除所有数据库目录下的文件:.bak .dat .hsh .mrg .myd .myi .trg .trn .cfg .db .frm .ibd .ndb .par .opt

     -----------------------------------------------------------------------------------------------------------

     drop event [if exists] event_name 删除事件,事件立即停止执行。

    drop function 删除函数

    drop index index_name on tbl_name 删除表索引

    drop logfile group logfile_group engine[=]engine_name 删除日志组  engine_name 当前是ndb ndbcluster

    drop {procedure | function}[if exists] sp_name 删除存储过程或存储函数

    drop server [if exists] server_name 删除服务器 并删除 mysql.servers表中的对应记录,隐式提交,不写入日志。

    drop [temporary] table [if exists] tbl_name [,tbl_name]...[restrict|cascade] 删除一个表或多个表

    删除表会删除表中的所有数据,如果表是分区的,会删除所有分区,相关联的所有分区定义。删除所有这个表的触发器。

    drop table产生隐式的提交。 删除temporary 表时不会隐式提交。

    如果没有 if exists 删除所有存在的表,返回错误指示出没有存在的表

    如果有 if exists 对于不存在的表不提示出错。

    ------------------------------------------------------------------------

    drop tablespace tablespace_name [engine [=] engine_name] 删除表空间,tablespace不会自动删除,只能使用 drop tablespace 明确的删除。

    drop database不会删除表空间,可以删除表空间中的表。

    删除 表空间中的表后,空间可以用于新的数据,但不会归还给操作系统。

     drop trigger [if exists] [schema_name.]trigger_name

    drop view [if exists] view_name[,view_name]... [restrict|cascade] 删除视图

     ------------------------------------------------------------------------

    rename table tbl_name to new_tbl_name [,tbl_name2 to new_tbl_name2]...重命名表 可以一次重命名多个表,不能用于临时表

    alter table old_table rename new_table  只能是一个表,可用于临时表

    rename table current_db.tbl_name to other_db.tbl_name 可以移动一个表到另一个数据库中

    ----------------------------------------------------------------------

    truncate [table] tbl_name 删除表中的所有数据 同 delete from tb_name ,不能触发 触发器

      

      

      

  • 相关阅读:
    简单理解jQuery中$.getJSON、$.get、$.post、$.ajax用法
    适配器模式(Adapter Pattern)
    什么样的登录框才算是优秀的?
    transient的作用及序列化
    MySQL索引实现原理
    concurrentHashMap原理分析和总结(JDK1.8)
    HashMap实现原理(JDK1.8)
    深入理解Java中的IO
    多线程系列
    多线程系列
  • 原文地址:https://www.cnblogs.com/caojuansh/p/10975109.html
Copyright © 2011-2022 走看看