一、用INSERT INTO 插入数据
二、更新和删除数据 UPDATE DELETE
三、创建和操纵表
1.创建表
CREATE TABLE创建表,必须给出下列信息:
1) 新表的名字,在关键字CREATE TABLE之后
2) 表列的名字和定义,用逗号分隔
CREATE TABLE customers
(
cust_id int NOT NULL AUTO_INCREMENT,
cust_name char(50) NOT NULL,
cust_address char(50) NULL,
cust_city char(50) NULL,
cust_state char(5) NULL,
cust_zip char(10) NULL,
cust_country char(50) NULL,
cust_contact char(50) NULL,
cust_email char(255) NULL,
primaryKEY (cust_id)
) ENGINE = InnoDB;
有以下几点需要注意:
1)其中主键也可以用多个列组成,如orderitems表中在主键表示如下:
PRIMARY KEY(order_num,order_item)
主键只能使用不允许NULL值的列。
2)每个表只允许一个AUTO_INCREMENT列。可用SELECT last_insert_id()获取最后一个AUTO_INCREMENT值。
3)用DEFAULT指定默认值
4)引擎类型
InnoDB是一个可靠的事物处理引擎,它不支持全文本搜索
MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快(特适合于临时表)
MyISAM是一个性能极高的引擎,它支持全文本搜索,但不支持事物处理
引擎可以混用,但外键不能夸引擎。
2.更新表
必须提供以下信息:
1)在ALTER TABLE之后给出要更改的表名
2)更改的列表
ALTER TABLE vendors ADD vend_phone CHAR(20);//增加一个新列
ALTER TABLE vendors DROP vend_phone;//删除一个列
ALTER TABLE vendors MODIFY vend_phone VARCHAR2(15);//修改列宽
定义外键:
ALTER TABLE orderitems ADD CONSTRAINT fk_orderitems_orders FOREIGN KEY (order_num) REFERENCE orders(order_num);
CONSTRAINT fk_orderitems_orders 定义完整性约束名
FOREIGN KEY (order_num) 外键
REFERENCE orders(order_num) 参照约束
3.删除表格
DROP TABLE customers;
4.重命名表
RENAME TABLE backup_customers TO customers;
四、使用视图
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
视图不包含表中应该有的任何列或数据,它包含的是一个SQL查询。视图仅仅用来查看存储在别处数据的一种设施。视图本身不包含数据,因此它们返回的数据是从其他表中检索出来的。在添加或更改这些表中的数据时,视图将返回改变过的数据。每次使用视图时,都必须处理查询执行时所需要的任一检索。
视图不能索引,也不能有关联的触发器或默认值。
1.使用视图:
1)视图用CREATE VIEW来创建
2)使用SHOW CREATE VIEW viewname;来查看创建视图的语句
3)用DROP删除视图,其语法为DROP VIEW viewname;
- 更新视图时,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW。
举个栗子:
2.更新视图
有时,视图是可更新的(即可以对它们使用INSERT、UPDATE和DELETE),对视图增加或删除行,实际上是对其基表增加或删除行。
但是,如果视图定义中有以下操作,则不能进行更新:
1) 分组(使用GROUP BY和HAVING)
2) 联结
3) 子查询
4) 并
5) 聚集函数
6) DISTINCT
7) 导出(计算)列
五、使用存储过程
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件,虽然它们的作用不仅限于批处理。
存储过程有3个主要的好处:简单、安全、高性能。
创建过程
删除存储过程
DROP PROCEDURE productpricing;//当不存在时报错
DROP PROCEDURE productpricing IF EXISTS;//仅当存在时删除,不存在时不报错
执行存储过程
MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数。
一般,存储过程并不显示结果,而是把结果返回给你指定的变量。
变量:内存中一个特定的位置,用来临时存储数据。所有MySQL变量必须以@开始。
显示出检索的数据
SELECT @pricehigh,@pricelow,@priceaverage;
下面看一个完整过程的栗子:
检查存储过程
SHOW CREATE PROCEDURE ordertotal;
为了获得包括何时,由谁创建等详细信息的存储过程列表,使用SHOW PROCEDURE STATUS,并且可用LIKE指定一个过滤模式,例如:
SHOW PROCEDURE STATUS LIKE ‘ordertotal’;
六、使用游标
用DECLARE创建游标,eg:DECLARE ordernumbers cursor
打开/关闭游标:OPEN ordernumbers;/CLOSE ordernumbers;
使用游标数据:FETCH ordernumbers INTO o;
请看使用实例(有注释说明)
七、使用触发器
1.触发器
触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):
DELETE INSERT UPDATE
2.创建触发器
创建触发器时,需要给出4条信息:
- 唯一的触发器名;
- 触发器关联的表
- 触发器应该响应的活动(DELETE、INSERT或UPDATE)
-
触发器何时执行(处理之前或之后)
只有表可以支持触发器,视图不支持(临时表也不支持)。
这里用CREATE TRIGGER创建一个名为newproduct的新触发器。触发器可在一个操作发生之前或之后执行,这里给出了AFTER INSERT,所以触发器将在INSERT语句成功后执行。这个触发器还制定了FOR EACH ROW,因此代码对每个插入行执行。在这个例子中,文本Product added将对每个插入的行显示一次。
☆触发器按每个表每个时间每次的定义,每个表每个时间每次只能定义一个触发器,因此一个表最多支持6个触发器(INSERT,UPDATE和DELETE之前或之后)。
3.删除触发器:
DROP TRIGGER newproduct;
4.1 INSERT触发器
1)在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行;
2)在BEFORE INSERT触发器中,NEW中的值可以被更新(允许更改被插入的值)
3)对于AUTO_INCREMENT列,NEW在INSERRT执行之前包含0,在执行之后包含新的自动生成的值。
CREATE TRIGGER neworder AFTER INSERT ON orders FOR EACH ROW SELECT NEW.ORDER_num;
4.2.DELETE触发器
1)在DELETE触发器代码内,你可以引用一个名为OLD的虚拟表,访问被删除的行
2)OLD中的值全部都是只读的,不能更新。
4.3update触发器
1)可以用OLD的虚拟表访问以前的值,也可以用名为NEW的虚拟表访问新更新的值
2)在BEFFORE UPDATE触发器中,NEW中的值可能也被更新
3)OLD中的值全部都是只读的,不能更新
八、管理事务处理
事务处理可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
事务:指一组SQL语句
回退:指撤销指定SQL语句的过程
提交:指将未存储的SQL语句结果写入数据库表
保留点:值事务处理中设置的临时占位符,你可以对它发布回退。
1.控制事务处理
管理事务处理的关键在于将SQL语句组分解为逻辑块,并明确规定数据何时应该回退,何时不应该回退。
START TRANSACTION//标记是事务开始
2.使用ROLLBACK用来回退MySQL语句
3.使用COMMIT语句明确提交
eg:
4.使用保留点
简单的ROLLBACK和COMMIT语句就可以写入或撤销整个事务处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要部分提交或回退。
为了支持回退部分事务处理,必须使用保留点,可如下使用SAVEPOINR语句:
SAVEPOINT delete1;
每个保留点都表示它的唯一名字,以便回退时,MySQL知道要回退到何处。
ROLLBACK TO delete1;
- 更改默认的提交行为
为指示MySQL不自动提交更改,需要使用以下语句:
SET autocommit = 0;
九、字符集和校对顺序
CREATETABLE mytable
(
Column1 INT,
Column2 VARCHAR(0)
)DEAULT CHARACTER SET hebrew COLLATE hebrew_general_ci;
这条语句创建一个表,并且制定一个字符集和一个校对顺序
SHOW CHARACTER SET;//可以查看所支持的字符集完整列表
SHOW COLLATION; //查看所支持的校对完整列表
十、管理用户
USE mysql;
SELECT user FROM user;
Mysql数据库有一个名为user的表,它包含所有用户账号。User表有一个user列。
1.创建用户账户
为创建新用户账户,使用CREATE USER语句
CREATE USER ben IDENTIFIED BY ‘P@$$w0rd’;
创建一个用户名为ben的用户,口令为P@$$w0rd。
RENAME USER ben TO bforta;
2.删除用户账号
DROP USER bforta;
3.设置访问权限
使用GRANT设置权限,需要给出以下信息:
1)要授予的权限
2)被授予访问权限的数据库或表
3)用户名
赋予bforta在crashcourse.*拥有SELECT权限。
可以用REVOKE取消权限。
4.更改口令
更新用户口令
SET PASSWORD FOR bforta = Password(‘n3wp@$$w0rd’);
设置自己的口令
SET PASSWORD= Password(‘n3w p@$$w0rd’);
十一、数据库维护
ANALYZE TABLE:用来检查表键是否正确
CHECK TABLE:用来针对许多问题对表进行检查