学习《MySQL必知必会》笔记四(19章-30章)

一、用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;

  1. 更新视图时,可以先用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条信息:

  1. 唯一的触发器名;
  2. 触发器关联的表
  3. 触发器应该响应的活动(DELETE、INSERT或UPDATE)
  4. 触发器何时执行(处理之前或之后)
    只有表可以支持触发器,视图不支持(临时表也不支持)。




    这里用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;

  1. 更改默认的提交行为
    为指示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:用来针对许多问题对表进行检查

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,227评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,755评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,899评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,257评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,617评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,757评论 1 221
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,982评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,715评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,454评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,666评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,148评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,512评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,156评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,112评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,896评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,809评论 2 279
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,691评论 2 272

推荐阅读更多精彩内容