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 ,不能触发 触发器

  

  

  

原文地址:https://www.cnblogs.com/caojuansh/p/10975109.html