设为首页 收藏本站
查看: 709|回复: 0

[经验分享] mysql 语法统计

[复制链接]

尚未签到

发表于 2018-10-8 06:29:47 | 显示全部楼层 |阅读模式
  mysql数据库具有开源,跨平台性,免费使用, 功能强大且使用方便等众多优点。了解它的语法是很有必要的。那么咱们现在就来学习一下它的语法结构。
  一:
  创建数据库:
  create {database | schema} [if not exists] 库名 [default] character set [=] charset_name
  if not exists  如果存在,就忽略。
  character set 默认字符集编码。
  创建数据库: create database

  修改数据库:>  删除数据库: drop   database
  1、mysql常见的数据类型;
  数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
  整型:
  数据类型           字节
  tinyint               1
  smallint             2
  mediumint        3
  int                     4
  bigint                8
  浮点型:
  float[(M,D)]   M是数字总位数,D是小数点后面的位数。
  如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数。
  double[(M,D)]
  日期时间型:
  date   3字节  YYY-MMM-DD     日期值
  time   3字节  HH:MM:SS       时间值
  year   1字节   YYYY            年份值
  datetime   8字节   YYYY-MM-DD      混合日期和时间值
  timestamp  8字节  YYYYMMDDHHMMSS    混合日期和时间值,时间戳。
  字符型:
  char          0-255字节        定长字符串
  varchar     0-65535字节     变长字符串
  tinytext               短文本字符串
  text     长文本数据
  mediumtext           中等长度文本数据
  longtext             极大文本数据
  enum('value1','value2')      1或2个字节
  取决于枚举值的个数(最多65535个数).
  set(‘value1','value2') , 1、2、3、4或8个字节,取决于set成员的数目u(最多64个成员)
  打开数据库:use  库名;
  验证用户打开的数据库:
  select  database();
  创建数据表:
  create  table   [if   not  exists]  表名(列名称   数据类型,...)
  查看数据表列表
  show   tables  [from 库名]   [like   'pattern' | where  expr]
  查看数据表结构:
  show columns  from 表名;  或  desc   表名
  插入记录:
  insert    [into]   表名  [(字段名,...)]  values(值,...);
  insert    表名    values(值,...)
  查找记录
  select    字段,........    from    表名;
  mysql空值和非空:
  空值与非空值
  NULL: 表示字段可以为空
  NOT NULL:表示字段不允许为空。
  mysql自动编号:
  自动编号,且必须和主键组合使用
  默认情况下,起始值为1,每次增量为1.   auto_increment
  mysql主键约束:
  primary key或key
  主键约束特点:
  每张数据表只能存在一个主键,
  主键保证记录的唯一性。
  主键自动为not null
  mysql唯一约束:
  unique key
  唯一约束特点:
  唯一约束可以保证记录的唯一性
  唯一约束的字段可以为空值(null)
  每张数据表可以存在多个唯一约束。
  mysql默认约束:
  default
  默认值
  当插入记录时,如果没有明确为字段赋值,则自动赋予默认值。
  总结:
  数字类型: 字符型,整型,浮点型, 日期时间型
  数据表操作: 插入记录,查找记录。
  记录操作: 创建数据表,约束的使用。
  二:
  数据表操作:
  如何创建数据表:
  主键约束(primary key)
  唯一约束(unique key)
  默认约束(default)
  非空约束(not null)
  记录插入
  记录查找
  约束:
  约束保证数据的完整性和一致性
  约束分为表级约束和列级约束
  约束类型包括:
  主键约束(primary key)
  唯一约束(unique key)
  默认约束(default)
  非空约束(not null)
  外键约束(foreign key)
  外键约束(foreign key)
  保证数据一致性,完整性
  实现一对一或一对多关系
  外键约束的要求:
  1、父表和子表必须使用相同的存储引擎,而且禁止使用临时表。
  2、数据表的存储引擎只能为INNODB。
  3、外键列和参照列必须具有相似的数据类型。其中,数字的长度或是否有符号位必须相同,而字符的长度则可以不同。
  4、外键列和参照列必须创建索引。如果外键列不存在索引的话,mysql将自动创建索引。
  编辑数据表的默认存储引擎:
  mysql配置文件
  Default-storage-engine=INNODB
  查看表名所使用的引擎或表详细结构:   show   create  table   表名;
  查看表的索引: show   indexes   from  表名\G
  查看mysql下所有数据库:   show   databases;
  查看当前库下所有的表:   show   tables;
  查看视图基本信息: desc   视图名;
  查看视图基本信息: show   table   status     like   '视图名';
  查看视图详细信息:  show   create   view   视图名
  查询所有触发器的信息: show   triggers
  查询指定触发器的详细信息:
  select  *  from  information_schema.triggers  where   trigger_name='触发器名';
  查看存储过程和函数的状态:
  show  {查询存储过程 | 查询存储函数}  status  [like  'pattern'];
  注意:  like   'pattern'  : 匹配存储过程或函数名称。
  查看存储过程和函数状态:
  show   create {procedure | function} sp_name;
  procedure  : 表示查询存储过程。
  function  : 表示查询存储函数。
  sp_name  :  表示存储过程或函数名。
  select  *   from   information_schema.Routines  WHERE  routine_name='sp_name';
  注意: routine_name : 存储过程和函数名。
  sp_name  存储过程或函数名。
  mysql 外键约束的参照操作:
  1、cascade:从父表删除或更新且自动删除或更新子表中匹配的行。
  2、set null:从父表删除或更新行,并设置子表中的外键列为null.如果使用该选项,必须保证子表列没有指定not null.
  3、resttict:拒绝对父表的删除或更新操作。
  4、no action: 标准SQL的关键字,在mysql中restrict相同。
  mysql表级约束和列级约束
  列级约束:指对一个数据列建立的约束
  表级约束:指对多个数据列建立的约束。
  列级约束既可以在列定义时声明,也可以在列定义后声明。
  表级约束只能在列定义后声明。
  mysql修改数据表--添加删除列
  修改数据表
  添加单列:
  alter table 表名 add [column] 列名    列定义 [first | after 列名]
  列名(col_name)
  列定义(column_definition)
  添加多列:
  alter table 表名 add [column] (列名  列定义,...)
  删除列:
  alter table 表名 drop [列] 列名
  添加主键约束:
  alter table 表名 add [constraint [symbol]] primary key [index_type](index_col_name)
  例如:
  mysql> create table user2(
  -> username varchar(10) not null,
  -> pid smallint unsigned
  -> );
  Query OK, 0 rows affected (0.02 sec)
  mysql> desc user2;

  mysql>>
  mysql>>  添加唯一约束:
  alter table 表名 add [constraint [symbol]] unique [index | key] [index_name] [index_type] (index_col_name,....)
  例:

  mysql>>  mysql> desc user2;

  mysql>>  添加/删除默认约束

  alter table 表名>  例:

  mysql>>
  mysql>>  mysql修改数据表---删除约束
  删除主键约束
  alter table 表名 drop  primary key
  例:

  mysql>>  mysql> desc user2;
  删除唯一约束:
  alter  table  表名  drop  {index|key}  index_name
  例:

  mysql>>  删除外键约束:
  alter table 表名 drop foreign key   fk_symbol(外键约束名称)
  例如:
  mysql> show create table user2;

  mysql>>
  mysql>>  mysql修改数据表---修改列定义和更名数据表
  修改列定义:
  alter  table 表名  modify [column]
  col_name  col_definition  [first | after col_name]
  例如:

  mysql>>  mysql> show columns from user2;

  mysql>>  修改列名称
  alter table 表名 change [column] old_col_name  new_col_name col_definition [first | after col_name]
  例如:
  mysql> desc user2;

  mysql>>  mysql> desc user2;
  数据表更名:
  方法一:
  alter table 表名 rename [to|as] new_tb1_name
  方法二:
  rename table 表名 to 新表名 [,表名2 to 新表名2]...
  例如:

  mysql>>  或:
  mysql> rename table user3 to user2;
  总结:
  一、约束:
  (1)按功能划分:not null,primary key,unique  key, default, foreign key
  (2) 按数据列的数目划分:表级约束,列级约束。
  二、修改数据表;
  (1)针对字段的操作:添加/删除字段,修改列定义,修改列名称等。
  (2)针对约束的操作:添加/删除各种约束。
  (3)针对数据表的操作:数据表更名(两种方式)
  mysql 插入记录insert
  插入记录:
  insert [into] 表名 [(col_name,...)]
  {values | value} {{expr | default},...),(...),....}
  例如:
  mysql> create table user(

  ->>  -> username varchar(20) not null,
  -> password varchar(30) not null,
  -> age tinyint unsigned not null default 10,
  -> sex boolean
  -> );
  mysql> insert user values(null,'Tom','123',24,1);
  mysql> insert user values(null,'join','456',25,1);
  mysql> insert user values(default,'Tom','456',26,0);
  mysql> insert user values(default,'join','123',2*8+3,0),(null,'jack','5678',default,0);
  插入记录:
  insert [into] 表名 set col_name={expr | default}...
  例如:
  mysql> insert user set username='jack',password='123.cn';
  插入记录:
  insert [into] 表名 [(col_name,...)] select ...
  mysql单表更新update和删除记录delete
  update
  更新记录(单表更新)
  update [low_priority] [ignore] table_reference set col_name1={expr1 | default} [,col_name2={expr2 | default}]... [where where_condition]
  例如:
  mysql> update user set age=age+5;
  mysql> update user set age=age-id,sex=0;

  mysql> update user set age=age+5 where>  delete
  删除记录(单表删除)
  delete from 表名 [where 搜索条件]
  例如:

  mysql> delete from user where>  mysql> insert user values(null,'111','456','30',null);
  select
  查找记录
  select select_expr [.select_expr..]
  [
  from table_references
  [where 条件表达式]
  [group by {col_name | position} [asc | desc],...]
  [having 条件表达式]
  [order by {col_name | expr | position } [asc | desc],...]
  [limit {[offset]row_count | row_count offset offset}]
  ]
  查询表达式
  查询表达式表示你想要的某一列,必须至少有一列
  多个列之间用英文逗号分隔。
  星号(*)表示所有列,tbl_name.*可以表示命名表的所有列
  查询表达式可以使用[AS]alias_name为其赋予别名。
  别名可以用于group by,order by 或having子句。
  where
  条件表达式:
  对记录进行过滤,如果没有指定where子句,则显示所有记录。
  在where表达式中,可以使用mysql支持的函数或运算符。
  group by
  查询结果分组
  [group by {col_name | position} [asc | desc ],...]
  例如:
  mysql> select sex from user group by sex;
  having
  分组条件
  [having 分组条件]
  例如:
  mysql> select age from user group by age having age>300;
  mysql> select sex,age from user group by 1 having count(id)>=2;
  order by
  对查询结果进行排序
  [order by {col_name | expr |position } [asc | desc],....]
  例如:
  mysql> insert user values(null,'123','234','30',1);

  mysql> select * from user order by>  mysql> select * from user order by age,id desc;
  limit
  限制查询结果返回的数量
  [LIMIT {[offset,]row_count | row_count OFFSET offset}]
  例如:
  mysql> select * from user limit 2,2;
  mysql> select * from user limit 3;
  mysql> create table test(

  ->>  -> username varchar(20)
  -> );
  mysql> insert test(username) select username from user where age >=30;
  mysql> select * from test;
  mysql三种常见的子查询:
  用any,some或all修饰的比较运算符:
  operand comparison_operator any(subquery)
  operand comparison_operator some(subquery)
  operand comparison_operator all(subquery)
  any,some,all关键字
  运算符       any       some      all
  >,>=       最小值    最小值      最大值
  any(select goods_price from tdb_goods where goods_cate='超级本');
  使用[not] in的子查询
  语法:
  operand comparison_operator [not] in (subquery)
  =any     运算符与in等效
  !=all  或all运算与not in等效。
  例如:
  创建商品分类:
  mysql> create table if not exists tdb_goods_cates(
  -> cate_id smallint unsigned primary key auto_increment,
  -> cate_name varchar(40) not null
  -> );
  mysql> select goods_cate from tdb_goods group by goods_cate;
  将这个插入到tdb_goods_cates
  mysql> desc tdb_goods_cates;
  mysql> insert tdb_goods_cates(cate_name) select goods_cate from tdb_goods group by goods_cate;
  mysql> select * from tdb_goods_cates;
  mysql多表更新
  多表更新
  update  table_references
  set col_name1(列)={表达式1 | default}
  [,col_name2={表达式2 | default}]..
  [where where_condition]
  表的参照关系:
  table_reference
  {[inner内 | cross] join | {left|right} [outer] join}
  table_reference
  on conditional_expr  表的连接条件
  连接类型:
  inner  join,内连接
  在mysql中,join,cross  join和inner join是等价的。
  left [outer] join,左外连接。
  right [outer] join,右外连接。
  例如:
  mysql> update tdb_goods inner join tdb_goods_cates on goods_cate=cate_name set goods_cate=cate_id;
  create...select
  创建数据表同时将查询结果写入到数据表
  create table [if not exists] 表名
  [(create_definition,....)]
  select_statement
  例如:
  mysql> select brand_name from tdb_goods group by brand_name;
  mysql> create table tdb_goods_brands(
  -> brand_id smallint unsigned primary key auto_increment,
  -> brand_name varchar(40) not null
  -> )
  -> select brand_name from tdb_goods group by brand_name;
  mysql> select * from tdb_goods_brands;
  mysql> update tdb_goods AS a inner join tdb_goods_brands AS b on a.brand_name=b.brand_name set a.brand_name=b.brand_id;
  mysql> desc tdb_goods\G;
  需要修改字段名和字段类型:

  mysql>>  -> change goods_cate cate_id smallint unsigned not null,
  -> change brand_name brand_id smallint unsigned not null;
  mysql> insert tdb_goods_cates(cate_name) values
  -> ('路由器'),('交换机'),('网卡');
  mysql> insert tdb_goods_brands(brand_name)values('海尔'),('清华同方'),('神舟');
  mysql> insert tdb_goods(goods_name,cate_id,brand_id,goods_price)values('yuan 123.cn密码集合','13','4','1849');
  mysql内连接inner join
  子查询与连接:
  连接
  mysql的select语句,多表更新,多表删除语句中支持join操作。
  语法结构;
  table_reference
  {[inner |cross] join | {left | right} [outer] join}
  table_reference
  on conditional_expr  连接条件。
  数据表参照:
  table_reference
  表名 [[as] alias] | table_subquery [as] alias
  数据表可以使用:表名 AS 别名 或表名 别名 赋予别名
  table_subquery可以作为子查询使用在from子句中,这样的子查询必须为其赋予别名。
  连接类型:
  inner join, 内连接
  在mysql中,join,cross  join和inner join是等价的。
  left [outer] join,左外连接。
  right [outer] join,右外连接。
  连接条件:
  使用on关键字来设定连接条件,也可以使用where来代替。
  通常使用on关键字来设定连接条件。
  使用where关键字来进行结果集记录的过滤。
  内连接
  显示左表和右表符合连接条件的记录。
  例如:
  mysql> select goods_id,goods_name,cate_name from tdb_goods inner join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id;
  mysql外连接outer  join
  左外连接
  显示左表的全部记录及右表符合连接条件的记录
  右外连接
  显示右表的全部记录及左表符合连接条件的记录。
  左外连接:
  例如:
  mysql> select goods_id,goods_name,cate_name from tdb_goods left join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id;
  右外连接:
  mysql> select goods_id,goods_name,cate_name from tdb_goods right join tdb_goods_cates on tdb_goods.cate_id=tdb_goods_cates.cate_id\G;
  mysql多表连接:
  例如:
  mysql> select goods_id,goods_name,cate_name,brand_name,goods_price from tdb_goods AS a inner join tdb_goods_cates AS b ON a.cate_id=b.cate_id
  -> inner join tdb_goods_brands AS c ON a.brand_id=c.brand_id\G;
  外连接:
  A  LEFT   JOIN  B  join_condition
  数据表B的结果集依赖数据表A
  数据表A的结果集根据左连接条件依赖所有数据表(B表除外)
  左外连接条件决定如何检索数据表B(在没有指定where条件的情况下)
  如果数据表A的某条记录符合where条件,但是在数据表B中不存在符合连接条件的记录,将生成一个所有列为空的额外的B行。
  外连接:
  如果使用内连接查找的记录在连接数据表中不存在,并且在where子句中尝试以下操作:col_name  is  null时,如果col_name被定义为not  null, mysql将在找到符合连接条件的记录后停止搜索更多的行。
  mysql无限级分类表设计:
  无限级分类数据表的设计
  例如:
  mysql> create table tdb_goods_types(
  -> type_id smallint unsigned primary key
  -> auto_increment,
  -> type_name varchar(20) not null,
  -> parent_id smallint unsigned not null default 0);
  parent_id   父类的ID。
  mysql> select * from tdb_goods_types;
  例如:
  mysql> select s.type_id,s.type_name,p.type_name from tdb_goods_types AS s LEFT JOIN tdb_goods_types AS p ON s.parent_id=p.type_id;
  mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id;
  mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name;
  mysql> select p.type_id,p.type_name,s.type_name from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name ORDER BY p.type_id;
  mysql> select p.type_id,p.type_name,count(s.type_name) child_count  from tdb_goods_types AS p LEFT JOIN tdb_goods_types AS s ON s.parent_id=p.type_id GROUP BY p.type_name ORDER BY p.type_id;
  mysql多表删除:
  例如:
  mysql> select goods_id,goods_name from tdb_goods group by goods_name;
  mysql> select goods_id,goods_name from tdb_goods group by goods_name HAVING count(goods_name)>1;
  mysql> DELETE t1 from tdb_goods AS t1  LEFT JOIN (SELECT goods_id,goods_name from tdb_goods GROUP BY goods_name HAVING count(goods_name)>1) AS t2 ON t1.goods_name=t2.goods_name WHERE t1.goods_id>t2.goods_id;
  mysql> select * from tdb_goods\G
  mysql字符函数:
  运算符和函数
  根据功能的不同可以划分为:
  1、字符函数
  2、数值运算符与函数
  3、比较运算与函数
  4、日期时间函数
  5、信息函数
  6、聚合函数
  7、加密函数
  字符函数:
  函数名
  CONCAT( ) : 字符连接
  CONCAT_WS( ) : 使用指定分隔符进行字符连接。
  FORMAT( ) : 数字格式化
  LOWER( )  :  转换成小写字母
  UPPER( )  :  转换成大写字母
  LEFT( )   : 获取左侧字符。
  RIGHT( )  : 获取右侧字符。
  例如:
  mysql> select   *  from   test;
  mysql> select  concat('yuan','_','MYSQL');
  mysql> select   *   from   user;
  将两个字段合并为一个字段。
  mysql> select concat(username,age) as fullname from user;
  mysql> select concat('dajiangtai','_','Mysql');
  mysql> select concat_ws('@','a','b','c');
  mysql> select format(12345.678,2);
  mysql> select lower('ANXIAOYU');
  mysql> select upper('anxiaoyu');
  mysql> select left('DaJiangTai',3);
  mysql> select lower(left('DaJiangTai',3));
  mysql> select length('dajiangtai');
  length() :  获取字符串长度。
  ltrim() :  删除前导空格。
  rtrim() :  删除后续空格。
  trim() :  删除前导和后续空格。
  substring() :  字符串截取。
  [not]  like  : 模式匹配。
  replace() :  字符串替换。
  例如:
  mysql> select ltrim('   dajiangtai   ');
  mysql> select length(ltrim('  dajiangtai   '));
  mysql> select trim(leading '@' from  '@@@dajiangtai@@@@');
  mysql> select trim(trailing '@' from '@@@dajiangtai@@@@');
  mysql> select trim(both '@' from '@@@dajiangtai@@@@');
  mysql> select replace('@@@dajiang@@tai@@@','@','');
  mysql> select replace('@@@dajiang@@tai@@@','@','##');
  mysql> select substring('dajiangtai',3,5);
  mysql> select substring('dajiangtai',3);
  mysql> select substring('dajiangtai',-3);
  mysql> select 'dajiangtai' like 'd%';
  mysql  数值运算符和函数
  ceil()  : 进一取整
  div    :  整数除法
  floor() : 舍一取整
  mod  : 取余数(取模)
  power() : 幂运算。
  round() : 四舍五入
  truncate() : 数字截取
  例如:
  mysql> select 1+2;
  mysql> select ceil(3.14);
  mysql> select floor(3.14);
  mysql> select 1/2;
  mysql> select 1 div 2;
  mysql> select 4%3;
  mysql> select 4 mod 3;
  mysql> select 4.2 mod 3;
  mysql> select power(2,3);
  mysql> select round(3.1415,3);
  mysql> select truncate(12.3456,2);
  mysql> select truncate(12.3456,-1);
  mysql比较运算符和函数
  [not]  between...and...        :    [不] 在范围之内
  [not] in()   :    [不] 在列出值范围内。
  is [not] null   :   [不]为空。
  例如;
  mysql> select 2 between 1 and 3;
  mysql> select 1 between 2 and 3;
  mysql> select 2 between 2 and 3;
  mysql> select 1 in (1,2,3,4);
  mysql> select null is null;
  mysql> select '' is null;
  mysql日期时间函数
  日期时间函数:
  now()  :  当前日期和时间
  curdate() : 当前日期
  curtime() : 当前时间
  date_add() : 日期变化。
  datediff() : 日期差值。
  date_format() :日期格式化。
  例如:
  mysql> select now();
  mysql> select curdate();
  mysql> select date_add('2015-1-1',interval 365 day);
  mysql> select date_add('2015-1-1',interval -365 day);
  mysql> select datediff('2015-1-2','2015-2-2');
  mysql> select date_format('2015-5-5','%m/%d/%y');
  mysql 信息函数
  connection_id() : 连接ID
  database() : 当前数据库
  last_insert_id() : 最后插入记录的ID号。
  user() : 当前用户
  version() : 版本信息。
  例如:
  mysql> select connection_id();
  mysql> select database();
  mysql> create table test(

  ->>  -> username varchar(20) not null);
  mysql> select last_insert_id();
  mysql> insert test(username) values('join');
  mysql> insert test(username) values('111');
  mysql> insert test(username) values('123');
  mysql> insert test(username) values('11');
  mysql> insert test(username) values('22'),('33');
  mysql> select last_insert_id();
  mysql> select user();
  mysql> select version();
  mysql 聚合函数:
  avg()  : 平均值
  count() : 计数。
  max() :最大值。
  min() : 最小值。
  sum() : 求和。
  例如:
  mysql> select avg(id) from test;
  mysql> select count(id) from test;
  mysql 加密函数:
  MD5() :  信息摘要算法
  PASSWORD() : 密码算法
  例如:
  mysql> select md5('admin');
  mysql> select PASSWORD('admin');
  mysql> set PASSWORD=PASSWORD('root');
  mysql自定义函数:
  用户自定义函数(UDF) 是一种对mysql扩展的途径,其用法与内置函数相同。
  自定义函数的两个必要条件:
  (1), 参数
  (2), 返回值。
  函数可以返回任意类型的值,同样可以接收这些类型的参数。
  创建自定义函数:
  create function function_name
  returns
  {string | integer | real | decimal}
  routine_body
  关于函数体:
  (1) 函数体由合法的SQL语句构成。
  (2) 函数体可以是简单的select或insert语句。
  (3) 函数体如果为复合结构则使用begin....end语句。
  (4) 复合结构可以包含声明,循环,控制语句。
  设置客户端编码为gbk  :
  mysql> set names gbk;
  mysql> select date_format(now(),'%Y年%m月%d日 %H点: %i分: %s秒');
  mysql> create function f1()
  -> returns varchar(30)
  -> return date_format(now(),'%Y年%m月%d日 %H点: %i分: %s秒');
  mysql> CREATE FUNCTION Q1(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
  -> RETURNS FLOAT(10,2) UNSIGNED
  -> RETURN (num1*num2)/2;
  mysql> select Q1(3,4);
  mysql> create function adduser(username VARCHAR(20))
  -> RETURNS INT UNSIGNED
  -> BEGIN
  -> INSERT test(username) values(username);
  -> RETURN LAST_INSERT_ID();
  -> END
  -> //
  mysql> select adduser('hello');
  -> //
  删除函数:
  DROP  FUNCTION [IF EXISTS] function_name
  mysql存储过程:
  SQL命令----> mysql引擎---》语法分析----》 可执行命令---》执行结果----》 客户端。
  存储过程:
  存储过程是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 : 表示该参数在调用时指定,并且可以被改变和返回。
  过程体:
  过程体由合法的SQL语句构成。
  过程体可以是"任意"的SQL语句。
  过程体如果为复合结构则使用BEGIN...END语句。
  复合结构可以包含声明,循环,控制结构。
  例如:
  mysql> create procedure sp1() select VERSION();
  mysql> CALL sp1;
  调用存储过程:
  CALL sp_name([parameter[,...]])
  CALL sp_name[( )]
  mysql创建带有IN类型参数的存储过程:
  例如:
  mysql> delimiter //
  mysql>

  mysql> create procedure removeTestByid(IN>  -> BEGIN

  -> DELETE FROM test where>  -> END
  -> //
  修改存储过程:
  alter procedure  sp_name
  [characteristic  ...]
  COMMENT 'string'
  | {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL
  DATA}
  | SQL SECURITY {DEFINER | INVOKER}
  删除存储过程:
  drop  procedure 名字;
  例如:
  mysql> insert user(username,password,age,sex) values('Tom1','123',21,1),('Tom2',
  '1234',22,1);
  mysql> insert user(username,password,age,sex) values('Tom3','123',30,1),('Tom4',
  '1234',30,1);
  mysql> insert user(username,password,age,sex) values('Tom5','12',20,1),('Tom6','
  1234',32,1);
  mysql> delimiter //
  mysql> create procedure removeUserByid(IN p_id INT UNSIGNED)
  -> BEGIN

  -> DELETE FROM user where>  -> END
  -> //
  mysql> delimiter ;
  mysql> CALL removeUserByid(2);
  mysql> SELECT  *  FROM  user  where  id=2;


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-615054-1-1.html 上篇帖子: mysql的双机热备 下篇帖子: zabbix之监控监控MySQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表