`
senton
  • 浏览: 206686 次
  • 性别: Icon_minigender_1
  • 来自: 紫禁城
社区版块
存档分类
最新评论

mysql笔记

阅读更多
 
MySql学习:
一.
要把一个表从一个类型转到另一个类型,可使用ALTER TABLE语句,这个语句指明新的类型:
ALTER TABLE t ENGINE = MYISAM;
ALTER TABLE t TYPE = BDB;
 
二.
存储过程:
下面一些情况下存储程序尤其有用:
1.当用不同语言编写多客户应用程序,或多客户应用程序在不同平台上运行且需要执行相同的数据库操作之时。
2.安全极为重要之时。比如,银行对所有普通操作使用存储程序。这提供一个坚固而安全的环境,程序可以确保每一个操作都被妥善记入日志。在这样一个设置中,应用程序和用户不可能直接访问数据库表,但是仅可以执行指定的存储程序。
存储程序和函数是用CREATE PROCEDURE和CREATE FUNCTION语句创建的子程序。一个子程序要么是一个程序要么是一个函数。使用CALL语句来调用程序,程序只能用输出变量传回值。就像别其它函数调用一样,函数可以被从语句外调用(即通过引用函数名),函数能返回标量值。存储子程序也可以调用其它存储子程序。
MySQL 5.1中,一个存储子程序或函数与特定的数据库相联系。这里有几个意思:
1. 当一个子程序被调用时,一个隐含的USE db_name 被执行(当子程序终止时停止执行)。存储子程序内的USE语句时不允许的。
2. 你可以使用数据库名限定子程序名。这可以被用来引用一个不在当前数据库中的子程序。比如,要引用一个与test数据库关联的存储程序p或函数f,你可以说CALL test.p()或test.f()。
3. 数据库移除的时候,与它关联的所有存储子程序也都被移除。
下面一节描述用来创建,改变,移除和查询存储程序和函数的语法。
CREATE PROCEDURE和CREATE FUNCTION
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
 [characteristic ...] routine_body
 
CREATE FUNCTION sp_name ([func_parameter[,...]])
 RETURNS type
 [characteristic ...] routine_body
 
proc_parameter:
 [ IN | OUT | INOUT ] param_name type
 
func_parameter:
 param_name type
 
type:
 Any valid MySQL data type
 
characteristic:
 LANGUAGE SQL
 | [NOT] DETERMINISTIC
 | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
 | SQL SECURITY { DEFINER | INVOKER }
 | COMMENT 'string'
 
routine_body:
 Valid SQL procedure statement or statements
如果子程序名和内建的SQL函数名一样,定义子程序时,你需要在这个名字和随后括号中间插入一个空格,否则发生语法错误。当你随后调用子程序的时候也要插入。为此,即使有可能出现这种情况,我们还是建议最好避免给你自己的存储子程序取与存在的SQL函数一样的名字。
由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT
注意: 指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)
RETURNS字句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。
创建数据库:
mysql> create database itcast;
进入数据库:
mysql> use itcast;
创建表:
mysql> create table Student (stu_No int not null,stu_Name varchar(20) not null,stu_Address varchar(50));
显示当前数据库中的表:
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| student          |
+------------------+
添加主键约束:
mysql> alter table Student add constraint pk_stu_No primary key (stu_No);
显示指定表的列信息:
mysql> desc student;
+-------------+-------------+------+-----+---------+-------+
| Field       | Type        | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| stu_No      | int(11)     | NO   | PRI |         |       |
| stu_Name    | varchar(20) | NO   |     |         |       |
| stu_Address | varchar(50) | YES |     |         |       |
+-------------+-------------+------+-----+---------+-------+
插入记录:
mysql> insert into Student values (1,'张三','武汉');
也可以这样插入:
mysql> insert into Student values (2,'李四','长沙'),(3,'王五','香港'),(4,'赵六'
'广州');
查询:
mysql> select * from student;
+--------+----------+-------------+
| stu_No | stu_Name | stu_Address |
+--------+----------+-------------+
| 1      | 张三     | 武汉        |
| 2      | 李四     | 长沙        |
| 3      | 王五     | 香港        |
| 4      | 赵六     | 广州        |
+--------+----------+-------------+
创建带输入参数的存储过程:
在程序被定义的时候,用mysql客户端delimiter命令来把语句定界符从 ;变为//。这就允许用在程序体中的;定界符被传递到服务器而不是被mysql自己来解释。
mysql> delimiter //
mysql> create procedure proc_insert(in no int,in name varchar(20),in address var
char(50))
    -> begin
    -> insert into Student values (no,name,address);
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> delimiter ;
执行存储过程:
mysql> call proc_insert(5,'田七','深圳');
Query OK, 1 row affected (0.00 sec)
 
mysql> select * from Student;
+--------+----------+-------------+
| stu_No | stu_Name | stu_Address |
+--------+----------+-------------+
| 1      | 张三     | 武汉        |
| 2      | 李四     | 长沙        |
| 3      | 王五     | 香港        |
| 4      | 赵六     | 广州        |
| 5      | 田七     | 深圳        |
+--------+----------+-------------+
5 rows in set (0.00 sec)
再次执行这条语句时报错了。因为前面加了主键约束,这意味着一旦定义成了主键就不能有重复的字段。唯一约束也是如此。
mysql> call proc_insert(5,'田七','深圳');
ERROR 1062 (23000): Duplicate entry '5' for key 1
 
创建一个不带参数的存储过程:
mysql> create procedure proc_select()
    -> begin
    -> select * from Student;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> delimiter ;
mysql> call proc_select();
+--------+----------+-------------+
| stu_No | stu_Name | stu_Address |
+--------+----------+-------------+
| 1      | 张三     | 武汉        |
| 2      | 李四     | 长沙        |
| 3      | 王五     | 香港        |
| 4      | 赵六     | 广州        |
| 5      | 田七     | 深圳        |
+--------+----------+-------------+
5 rows in set (0.01 sec)
 
Query OK, 0 rows affected (0.01 sec)
 
创建一个带一个输出参数,一个输入参数的存储过程。
mysql> delimiter //
mysql> create procedure proc_search(out name varchar(20),in no int)
    -> begin
    -> select stu_Name into name from Student where stu_No=no;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> delimiter ;
 
应当象这样执行:
mysql> call proc_search(@name,'1');
Query OK, 0 rows affected (0.00 sec)
 
mysql> select @name;
+-------+
| @name |
+-------+
| 张三 |
+-------+
1 row in set (0.00 sec)
 
 
创建自定义函数:
如果在存储函数中的RETURN语句返回一个类型不同于在函数的RETURNS子句中指定类型的值,返回值被强制为恰当的类型。比如,如果一个函数返回一个ENUM或SET值,但是RETURN语句返回一个整数,对于SET成员集的相应的ENUM成员,从函数返回的值是字符串。
mysql> delimiter //
mysql> create function getName(no int) returns varchar(20)
    -> begin
    -> declare name varchar(20);
    -> select stu_Name into name from Student where stu_No=no;
    -> return name;
    -> end
    -> //
Query OK, 0 rows affected (0.00 sec)
 
mysql> select getName(3);
    -> //
+------------+
| getName(3) |
+------------+
| 王五       |
+------------+
 
 
分享到:
评论

相关推荐

    狂神MySQL笔记.rar

    【狂神MySQL笔记】是一份全面且深入的MySQL学习资源,涵盖了从基础到高级的各种MySQL技术知识点。作为数据库领域的核心工具,MySQL因其高效、稳定、开源等特性,被广泛应用于各种规模的企业和项目中。这份笔记旨在...

    尚硅谷mysql笔记.zip

    尚硅谷的MySQL笔记可能是为了帮助学习者深入理解和掌握MySQL的相关知识而编写的。这份笔记可能包含了从基础概念到高级特性的全面讲解,包括但不限于SQL语言、数据类型、数据库设计、索引、事务处理、视图、存储过程...

    MySQL笔记,比较全,知识点都有,而且有例子

    这份"MySQL笔记"涵盖了其主要知识点,并且每个概念都配有实例,使得学习更为直观易懂。以下是对这些笔记的详细解析: 一、基础概念 MySQL的基础部分包括数据库、表、字段、记录等基本元素的创建、修改和删除。理解...

    mysql 笔记

    ### MySQL 笔记知识点梳理 #### 一、数据库概述与分类 - **Microsoft SQL Server**:易用性好,适合企业级应用。 - **MySQL**:开源免费,广泛应用于中小型项目及个人项目。 - **Oracle**:适用于Java开发者,特别...

    MySQL笔记——笔记.md

    MySQL笔记

    MySQL笔记(狂神说java)

    "狂神说Java"的MySQL笔记可能深入探讨了如何在Java编程环境中与MySQL进行交互,这对于我们理解数据库管理和开发至关重要。以下是对这个主题的详细阐述: 1. **MySQL基础**: - 数据库概念:MySQL是一个用于存储和...

    mysql笔记mysql笔记

    mysql笔记

    MYSQL笔记.zip

    总的来说,这个MySQL笔记涵盖了数据库管理的各个方面,通过一天的学习,你可以建立起对MySQL的初步理解,并具备基本的数据库操作能力。然而,要想成为真正的MySQL专家,还需要不断实践和深入学习更高级的主题,如...

    mysql笔记 mysql笔记

    mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记 mysql笔记

    mysql笔记及考试答案.zip

    这份"mysql笔记及考试答案.zip"压缩包包含了深入学习MySQL的重要资源,包括一个PDF格式的MySQL笔记和一个包含考试试题及答案的文件,这对于复习MySQL知识或者准备相关考试非常有帮助。 MySQL笔记可能涵盖了以下几个...

    MySQL笔记.md

    MySQL笔记.md

    老杜MySQL笔记总结.md(全)

    老杜MySQL笔记总结.md(全)

    Mysql笔记资料

    这份"MySQL笔记资料"涵盖了全面的MySQL学习内容,包括基础理论、实战技巧以及优化策略,旨在帮助用户深入理解和掌握这个强大的数据存储与管理工具。 一、MySQL基础知识 在MySQL的学习之初,你需要了解其基本概念,...

    MySQL笔记.pdf

    这只是MySQL笔记的部分内容,实际上MySQL的功能远不止这些,还包括视图、索引、事务处理、存储过程、触发器、函数等多个高级特性。了解并掌握这些内容,将有助于在实际项目中更高效地管理和操作数据。

    MySQL笔记合集.pdf

    "MySQL笔记合集.pdf" MySQL 是一款开源的关系数据库管理系统(RDBMS),是一种relational database management system(RDBMS),是当下最流行的数据库管理系统之一。MySQL 的主要特点是开源、免费、跨平台、支持...

    mysql笔记.rar

    本笔记将深入探讨MySQL的基础知识,帮助你全面掌握这个强大的数据存储和管理工具。 首先,我们要理解数据库的基本概念。数据库是一个组织和存储数据的系统,允许用户通过结构化查询语言(SQL)进行数据的检索、更新...

    自整理! 最全mysql笔记

    - 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果 - 如果只有INSERT和SELECT操作,可以选择Archive,...

    MySQL笔记,老杜,初级MySQL笔记

    MySQL笔记,老杜,初级MySQL笔记

Global site tag (gtag.js) - Google Analytics