如果你没有 MySQL 的基础,建议可以看看以下书籍:
成都创新互联公司成立于2013年,是专业互联网技术服务公司,拥有项目网站设计、成都网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元阳江做网站,已为上家服务,为阳江各地企业和个人服务,联系电话:18982081108
《MySQL 必知必会》:主要讲 SQL 的写法
《深入浅出 MySQL》:比较全面的讲解了 MySQL 的基础知识,也涉及了一些优化。
如果已经对 MySQL 比较熟悉了,可以看下面的书籍:
《高性能 MySQL》:里面讲了很多 MySQL 优化技巧。
《MySQL 技术内幕》:讲解了很多 MySQL 原理,强力推荐给想深入学习 MySQL 的同学。
《MySQL 内核:InnoDB 存储引擎》:想深入研究 MySQL 内核及原理的可以看看。
《MySQL 运维内参》:对 MySQL 源码感兴趣,可以入手。
《MySQL Internals Manual》
《MySQL 5.7 Reference Manual》
UPDATE worker_view4 SET name='hi';
ERROR............The target table worker_view4 of the UPDATE is not updatable.
(4)视图中的SELECT中包含子查询。
CREATE VIEW worker_view5(name)
AS SELECT (SELECT name FROM worker);
UPDATE worker_view5 SET name = '刘佳';
该视图中包含了子查询,因此也是不能更新的。
(5)由不可更新的视图导出的视图。
CREATE VIEW worker_view6
AS SELECT * FROM worker_view5;
UPDATE worker_view6 SET name = '王仔';
因为worker_view6是不可更新的视图,所以worker_view6也不可以更新的视图。使用UPDATE语句更新时,会出现系统报错。
(6)创建视图时,ALGORITHM为TEMPTABLE类型。
CREATE ALGORITHM=TEMPTABLE
VIEW worker_view7
AS SELECT * FROM worker;
UPDATE worker_view7 SET name = '王仔';
因为该视图ALGORITHM为TEMPTABLE类型,所以worker_view7不可以更新的视图。TEMPTABLE类型就是临时表类型。系统默认临时表是不能更新的。
(7)视图对应的表上存在没有默认值的列,而且该列没有包含在视图里。例如,表中包含的name字段没有默认值,但是视图中不包含该字段。那么这个视图是不能更新的。因为,在更新视图时,这个没有默认值的记录将没有值插入,也没有NULL值插入。数据库系统是不会允许这样的情况出现的,数据库系统将会阻止这个视图更新。
注意:视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图来更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,可能会造成数据更新失败。
除了上述条件不能更新视图以外,WITH[CASCADED|LOCAL]CHECK OPTION也将决定视图能否更新。"LOCAL"参数表示更新视图时要满足该视图本身的定义的条件即可;
8.6 删除视图
删除视图是指删除数据库中已经存在的视图。删除视图时,只能删除视图的定义,不会删除数据。MYSQL中,使用DROP VIEW语句来删除视图,不会删除数据。MySQL中,使用DROP VIEW语句来删除视图。但是,用户必须拥有DROP权限。
DROP VIEW[IF EXISTS] 视图名列表 [RESTRICT|CASCADE]
实例一:
SELECT Drop_priv
FROM mysql.user
WHERE user='root';
CREATE VIEW worker_view_del1
AS SELECT * FROM worker;
CREATE VIEW worker_view_del2
AS SELECT * FROM worker;
CREATE VIEW worker_view_del3
AS SELECT * FROM worker;
DROP VIEW IF EXISTS worker_view_del2, worker_view_del3;
8.7 本章实例
在test数据库中work_info表上进行视图操作。
1. 在test数据库中work_info表
2. 插入记录
3. 创建视图info_view
4. 查看视图info_view的基本结构和详细结构
5. 查看视图info_view的所有记录
6. 修改视图info_view
7. 更新视图
8. 删除视图
work_info表的结构
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
id 编号 INT(10) 是 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
gender 姓别 VARCHAR(4) 否 否 是 否 否
age 年龄 INT(5) 否 否 否 否 否
address 家庭住址 VARCHAR(50) 否 否 否 否 否
tel 电话号码 VARCHAR(20) 否 否 否 否 否
work_info表中的内容
id name gender age address tel
1 张三 M 18 北市市海淀区 01-155151
2 李四 M 22 北京市昌平区 01-215151
3 王五 F 17 湖南省永州市 025-545845
4 赵六 F 25 辽宁省阜新市 0625-514545
(1) 创建work_info表
USE test;
CREATE TABLE IF NOT EXISTS work_info (
id INT(10) NOT NULL UNIQUE PRIMARY KEY,
name VARCHAR(20) NOT NULL,
gender VARCHAR(4) NOT NULL,
age INT(5),
address VARCHAR(50),
tel VARCHAR(20)
) DEFAULT CHARSET=utf8;
(2)向work_info表中插入几条记录。
INSERT INTO work_info VALUES
(1, '张三', 'M', 18, '北市市海淀区','01-155151'),
(2,'李四', 'M', 22, '北京市昌平区', '01-215151'),
(3,'王五','F',17,'湖南省永州市','025-545845'),
(4,'赵六','F',25,'辽宁省阜新市','0625-514545');
(3) 创建视图info_view。从work_info表中选出age20的记录来创建视图。视图的字段包括id、name、gender和address。ALGORITHM设置为MERGE类型。加上WITH LOCAL CHECK OPTION条件。
CREATE ALGORITHM=MERGE
VIEW info_view(id, name, gender, address)
AS SELECT id, name, gender, address
FROM work_info
WHERE age20
WITH LOCAL CHECK OPTION;
(4)查看视图info_view的基本结构和详细结构。
SHOW CREATE VIEW info_view \G
(5)查看视图info_view的所有记录。
SELECT * FROM info_view;
(6)修改视图info_view,使其显示age20的信息,其他条件不变。
ALTER ALGORITHM=MERGE
VIEW info_view(id, name, gender, address)
AS SELECT id, name, gender, address
FROM work_info
WHERE age20
WITH LOCAL CHECK OPTION;
(7)更新视图,将id为3的记录进行更新。设置其gender为M。
UPDATE info_view SET gender='M' WHERE id=3;
(8)删除视图。
DROP VIEW info_view;
8.8 上机实践
题目要求:
(1)在数据库example下创建college表。
(2)在college表上创建视图college_view。视图的字段包括student_num、student_name、student_age和department。ALGORITHM设置为UNDEFINED类型。加上WITH LOCAL CHECK OPTION条件。
(3)查看视图college_view的详细结构。
(4)更新视图。向视图中插入三条记录。
(5)修改视图,使其显示专业为"计算机"的信息,其他条件不变。
(6)删除视图college_view。
college表的结构
字段名 字段描述 数据类型 主键 外键 非空 唯一 自增
number 学号 INT(10) 是 否 是 是 否
name 姓名 VARCHAR(20) 否 否 是 否 否
major 专业 VARCHAR(20) 否 否 是 否 否
age 年龄 INT(5) 否 否 否 否 否
college_view表的内容
student_num student_name student_age department
0901 张三 20 外语
0902 李四 22 计算机
0903 王五 19 计算机
USE example;
CREATE TABLE college(
number INT(10) NOT NULL UNIQUE PRIMARY KEY,
name VARCHAR(20) NOT NULL,
major VARCHAR(20) NOT NULL,
age TINYINT(3)
) DEFAULT CHARSET=utf8;
CREATE ALGORITHM=UNDEFINED
VIEW college_view(student_num, student_name, student_age, department)
AS SELECT number, name, age, major
FROM college
WITH LOCAL CHECK OPTION;
SHOW CREATE VIEW college_view \G
INSERT INTO college_view VALUES
(0901, '张三', 20, '外语'),
(0902, '李四', 22, '计算机'),
(0903, '王五', 19, '计算机');
CREATE OR REPLACE ALGORITHM=UNDEFINED
VIEW college_view(student_num, student_name, student_age, department)
AS SELECT number, name, age, major
FROM college
WHERE major='计算机'
WITH LOCAL CHECK OPTION;
有很多朋友虽然安装好了mysql但却不知如何使用它 在这篇文章中我们就从连接MYSQL 修改密码 增加用户等方面来学习一些MYSQL的常用命令 一 连接MYSQL 格式 mysql h主机地址 u用户名-p用户密码 例 连接到本机上的MYSQL 首先在打开DOS窗口 然后进入目录 mysqlbin 再键入命令mysql uroot p 回车后提示你输密码 如果刚安装好MYSQL 超级用户root是没有密码的 故直接回车即可进入到MYSQL中了 MYSQL的提示符是 mysql 例 连接到远程主机上的MYSQL 假设远程主机的IP为 用户名为root 密码为abcd 则键入以下命令 mysql h uroot pabcd 退出MYSQL命令 exit (回车) 二 修改密码 格式 mysqladmin u用户名 p旧密码 password 新密码 例 给root加个密码ab 首先在DOS下进入目录mysqlbin 然后键入以下命令mysqladmin uroot password ab 注 因为开始时root没有密码 所以 p旧密码一项就可以省略了 例 再将root的密码改为djg mysqladmin uroot pab password djg 三 增加新用户 (注意 和上面不同 下面的因为是MYSQL环境中的命令 所以后面都带一个分号作为命令结束符)格式 grant select on 数据库 * to 用户名@登录主机 identified by 密码 例 增加一个用户test 密码为abc 让他可以在任何主机上登录 并对所有数据库有查询 插入 修改 删除的权限 首先用以root用户连入MYSQL 然后键入以下命令 grant select insert update delete on * * to test @ % Identified by abc ;但例 增加的用户是十分危险的 你想如某个人知道test 的密码 那么他就可以在internet上的任何一台计算机上登录你的mysql数据库并对你的资料可以为所欲为了 解决办法见例 例 增加一个用户test 密码为abc 让他只可以在localhost上登录 并可以对数据库mydb进行查询 插入 修改 删除的操作(localhost指本地主机 即MYSQL数据库所在的那台主机) 这样用户即使用知道test 的密码 他也无法从internet上直接访问数据库 只能通过MYSQL主机上的web页来访问了 grant select insert update delete on mydb * to test @localhost identified by abc ;如果你不想test 有密码 可以再打一个命令将密码消掉 grant select insert update delete on mydb * to test @localhost identified by ;注意 你必须首先登录到MYSQL中 以下操作都是在MYSQL的提示符下进行的 而且每个命令以分号结束 四一 操作技巧 如果你打命令时 回车后发现忘记加分号 你无须重打一遍命令 只要打个分号回车就可以了 也就是说你可以把一个完整的命令分成几行来打 完后用分号作结束标志就OK 你可以使用光标上下键调出以前的命令 但以前我用过的一个MYSQL旧版本不支持 我现在用的是 mysql beta win 五 显示命令 显示数据库列表 show databases;刚开始时才两个数据库 mysql和test mysql库很重要它里面有MYSQL的系统信息 我们改密码和新增用户 实际上就是用这个库进行操作 显示库中的资料表 use mysql //打开库 学过FOXBASE的一定不会陌生吧show tables; 显示资料表的结构 describe 表名; 建库 create database 库名; 建表 use 库名 create table 表名 (字段设定列表) 删库和删表:drop database 库名;drop table 表名 将表中记录清空 delete from 表名; 显示表中的记录 select * from 表名; 六 一个建库和建表以及插入数据的实例 drop database if exists school; //如果存在SCHOOL则删除create database school; //建立库SCHOOLuse school; //打开库SCHOOLcreate table teacher //建立表TEACHER(id int( ) auto_increment not null primary key name char( ) not null address varchar( ) default 深圳 year date); //建表结束//以下为插入字段insert into teacher valuess( glchengang 深圳一中 );insert into teacher valuess( jack 深圳一中 );注 在建表中( )将ID设为长度为 的数字字段:int( )并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key( )将NAME设为长度为 的字符字段( )将ADDRESS设为长度 的字符字段 而且缺省值为深圳 varchar和char有什么区别呢 只有等以后的文章再说了 ( )将YEAR设为日期字段 如果你在mysql提示符键入上面的命令也可以 但不方便调试 你可以将以上命令原样写入一个文本文件中假设为school sql 然后复制到c:下 并在DOS状态进入目录mysqlbin 然后键入以下命令 mysql uroot p密码 c:school sql如果成功 空出一行无任何显示 如有错误 会有提示 (以上命令已经调试 你只要将//的注释去掉即可使用) 七 将文本资料转到数据库中 文本资料应符合的格式 字段资料之间用tab键隔开 null值用n来代替 例 rose 深圳二中 mike 深圳一中 数据传入命令 load data local infile 文件名 into table 表名;注意 你最好将文件复制到mysqlbin目录下 并且要先用use命令打表所在的库 八 备份数据库 (命令在DOS的mysqlbin目录下执行)mysqldump opt schoolschool bbb注释:将数据库school备份到school bbb文件 school bbb是一个文本文件 文件名任取 打开看看你会有新发现 后记 其实MYSQL的对数据库的操作与其它的SQL类数据库大同小异 您最好找本将SQL的书看看 我在这里只介绍一些基本的 其实我也就只懂这些了 呵呵 最好的MYSQL教程还是 晏子 译的 MYSQL中文参考手册 不仅免费每个相关网站都有下载 而且它是最权威的 可惜不是象 PHP 中文手册 那样是chm的格式 在查找函数命令的时候不太方便 lishixinzhi/Article/program/MySQL/201311/29306