Post Tagged with: "database"

MySQL手记: 视图的使用

很多时候不少人像我一样不明白既然有了强大的表查询工具视图就没有用处了。

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其它数据库的一个或多个表,或者其它视图。通过视图进行查询没有任何限制,通过它们进行数据修改时的限制也很少。

视图是存储在数据库中的查询的 SQL 语句,它主要出于两种原因:安全原因, 视图可以隐藏一些数据,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,另一原因是可使复杂的查询易于理解和使用。

视图本质上还是一个基本表,创建一个视图就像创建一个表一样:

CREATE VIEW DS_VIEW AS SELECT * FROM Departments;

DS_VIEW是视图的名称。以下又是另外一个例子:

CREATE VIEW Employee_view(EmployeeID, Name,RealIncome) AS SELECT Employees, EmployeeID, Name, Income-Outcome FROM Employees, Salary WHERE Employees.EmployeeID=Salary.EmployeeID WITH CHECK OPTION;

WITH CHECK POINT 的意思就是要在更新视图时要符合创建视图所设定的条件。CREATE VIEW 还有一个 ALGORITHM 子句,此子句是 MySQL 对 SQL 标准的扩展,规定了MySQL的算法,而算法影响 MySQL 处理视图的方式。默认是 UNDEFINED。若是 MERGE,视图的行需要和基表的行一一对应。ALGORITHM=TEMPTABLE 则是视图置于临时表之上。。

查询视图,则和查询表一样使用SELECT语句:

SELECT DepartmentName FROM DS_VIEW WHERE Department='3';

更新视图也是 INSERT 和 UPDATE,删除数据显然少不了 DELETE:

INSERT INTO DS_VIEW VALUE('6','广告部','广告业务');
UPDATE DS_VIEW SET DepartmentName='生产车间' WHERE DepartmentID='5';
DELETE FROM DS_VIEW WHERE DepartmentID='1';

最后就是删除视图,就一个语句可以了:

DROP VIEW DS_VIEW;

MySQL 手记: 创建数据库与表

原文再续就书接上一回,上回说的是 MySQL 的基本安装,这次正式说一下创建数据库和表了。进入 MySQL 客户端的交互模式以后,首先是创建一个名为 YGGL 数据库:

CREATE DATABASE YGGL;

此语句还可以添加 IF NOT EXISTS 参数,以判断该数据库不存在才会执行 CREATE DATABASE 操作。除此之外,还可以添加 CHARCTER SET 和 COLLATE 两个参数,前者是设置数据库的字符编码,后者指定字符集的校对规则。随后切换到 YGGL 数据库:

USE YGGL

看看这个数据库内有什么内容:

SHOW TABLES;

返回的结果是:

Empty Set (0.00 sec)

可以看到,数据库是空无一物。所以我们需要创建一个表,取名字叫 Employees:

CREATE TABLE Employees
(
EmployeeID CHAR(6) NOT NULL,
Name CHAR(10) NOT NULL,
Education CHAR(4) NOT NULL,
Birthday datetime NOT NULL,
Sex CHAR(2) NOT NULL DEFAULT '1',
WorkYear tinyint(1),
Address VARCHAR(20),
PhoneNumber CHAR(12),
DepartmentID CHAR(3) NOT NULL,
PRIMARY KEY (EmployeeID)
) ENGINE=InnoDB;

CREATE TABLE Employees 后面带了一个括号,括号内都是表内的列名及其属性。第一个是列名。一般不超过 64 个字符。空格后面的是列的数据类型,MySQL 支持的数据类型如下:

整数型:BIGINT, INT, SMALLINT, MEDIUMINT, TINYINT
精确数值型:DECIMAL, NUMERIC
浮点型:FLOAT, REAL, DOUBLE
位型:BIT, BOOL, BOOLEAN
字符型:CHAR, VARCHAR LONG, VARCHAR LONGTEXT
Unicode字型:NCHAR, MVARCHAR
BLOB类型:BINARY, VARBINARY, LONG VARBINARY
文本型:TEXT, TINYTEXT
二进制型:BINARY, VARBINARY
日期时间类型:DATA, TIME, DATATIME, TIMESTAMP, YEAR

某些数据类型后还需要添加括号,以表示该列允许输入字符的个数。数据类型之后就是列的属性,一般有以下几个:

AUTO_INCREMENT:自增属性,每一个表只能允许一个自增列,且必须被索引。
NOT NULL|NULL:指定该列是否非空,不指定默认是NULL。
DEFAULT:指定默认值。默认值必须是常数。TEXT类型不能指定默认值

括号内最后一个参数是 PRIMARY KEY,这个与 UNIQUE KEY 一样都是指定主键。两者的区别在于:作为 PRIMAYR KEY 的域/域组不能为 NULL。而 UNIQUE KEY 可以;在一个表中只能有一个 PRIMARY KEY,而多个 UNIQUE KEY 可以同时存在。

括号外还有一个 ENGINE=InnoDB 的参数,这里指定的是该表使用了 InnoDB 存储引擎,表选项还有如下:

{TYPE|ENGINE}=engine_name //存储引擎
AUTO_INCREMENT=value //初始值
AVG_ROW_LENGTH=value //标的平均行长度
CHARACTER SET charset_name //默认字符集
COLLATE collation_name //字符集校验
CHECKSUM={0|1} //设置为1表示求校验和
COMMENT=’string’ //注释
CONNECTION=‘connect_string’ //连接字符串
MAX_ROWS=value //行的最大数
MIN_ROWS=value //列的最小数
PACK_KEYS={0|1|DEFAULT}
PASSWORD=’string’ //对.frm文件加密
DELAY_KEY_WRITE={0|1} //对关键字的更新
ROW_FORMAT={DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} //定义各行应如何存储
UNION=(table1_name,table2name…) //表示哪几个表应该合并
INSERT_METHOD={NO|FIRST|LAST} //是否执行INSERT语句
DATA DIRECTORY=’absolute path to directory’ //数据文件的路径
INDEX DIRECTORY=’absolute path to directory’ //索引的路径

当表的属性和列需要修改的时候,可以运用ALTER语句:

ALTER TABLE TABLE_NAME alter_specification

alter_specification参数如下:

ADD column_name //添加列
CHANGE old_column_name new_column_name //对列重命名
MODIFY column_definition //修改列类型
DROP colnumn_name //删除列
RENAME new_table_name //重命名改表
ORDER BY column_name //排序
CONVERT TO CHARACTER SET charset_name //将字符集转换为二进制
CHARACTER SET charset_name //修改默认字符集

举例:

ALTER TABLE t1 CHANGE a b INTEGER;

把在t1表里的一个 INTEGER 列的名称从 a改到 b。

重命名表还有其他的办法:

RENAME TABLE old_table_name TO new_table_name;

复制表,都是通过 CREATE TABLE 实现的。但是这里包含了 LIKE 和 AS 两个关键字。前者只会建立旧表结构相同的表,但是表的内容是不会复制的;后者会复制表的内容,但所以和完整性约束是不会被复制的。AS 可以通过 SELECT 语句选择表的哪些内容。

CREATE DATABASE new_table_name LIKE old_table_name;
CREATE DATABASE new_table_name AS (SELECT * FROM old_table_name);

删除表:

DROP DATABASE TABLE_NAME;v
同样可以用使用ALTERDROP修改和删除数据库:
<pre lang='SQL'>ALTER DATABASE database_name database_specification;
DROP DATABASE database_name;

database_specification 与创建数据库一样,只有 CHARCTER SET 和 COLLATE 两个参数。

欲知后事如何,且听下回分解。

原文:http://www.liangsuilong.info/?p=786

MySQL入门手记:安装与基本使用

MySQL是一款十分热门的数据库,很多大型网站都会用它构建服务框架。早前看了一本 MySQL 入门的书,觉得挺有用,于是开始做点记录方便以后用,这是第一篇。

安装 MySQL 十分方便。MySQL 提供了多个平台的预制二进制软件包,Linux 发行版也提供了 MySQL 的二进制软件包,比如在Ubuntu/Debian,可以直接输入以下命令安装:

sudo apt-get install mysql mysql-server

当安装结束以后,终端就会出现一个设置MySQL的终端界面,只要跟着指引设置即可。使用新立德软件包管理器安装会有一个图形界面的向导,设置更加方便。

在 Fedora/CentOS,可以输入以下命令安装:

sudo yum install mysql mysql-server

与 Ubuntu/Debian 不同的是,在 Fedora/CentOS 上安装的 MySQL 数据库 root 用户的密码为空,此时用户自行运行一次设置帐号对其设置。

sudo mysql_secure_installation

同样跟着字符向导就能完成设置工作。

学习 MySQL 基本使用,首先要学会怎么登录。一般情况下,考虑到数据库的安全性,MySQL 默认是不允许从本机以外的电脑登录的。当然用户可以额外设置,或者使用第三方工具进行管理。打开终端,键入以下命令即可登录使用 MySQL 数据库:

mysql -u xxx -h hostname/IP -p

-u 后面是登录的用户名,-h 是 MySQL 服务器的主机名或者IP,- p是需要密码登录。回车后,终端会提示输入密码。登录完成后,终端会切换到 mysql> 的提示符,此时可以使用 SQL 语言对 MySQL 进行操作。

MySQL 是兼容标准的 SQL 语句,同样也有自己的额外语法加入,首先看看数据库内有哪几个数据库:

SHOW DATABASES;</blockquote>
使用 MySQL 默认的数据库,名字叫 mysql:
<pre lang='SQL'>USE mysql

USE命令同时可以用来切换数据库。

显示当前使用的数据库有哪几个表:

SHOW TABLES;

尝试一条查询命令:

SELECT USER FROM USER;

提醒一下,mysql 这个数据库是 MySQL 的系统数据库,存储的是 MySQL 的用户名等重要资料,修改前需要十分慎重,否则有可能修改后无法登录。或者使用 mysqladmin 添加用户和设置权限。

MySQL 支持多种数据库存储引擎,既可以是内建式也可以插件式,以下命令是查看当前数据库能够支持哪几款存储引擎:

SHOW ENGINES;

用户可以自定义数据表使用哪一种存储引擎。至于哪一种好,则是需要根据实际情况而定。

MySQL Workbench 5.2.25 GA 发布

MySQL Workbench 一直以来被认为替代 MySQL Administrator tools 的首选工具。今天,MySQL Workbench 团队发布了 5.2.25 版本。此版本与早前的 RC 版本不同,在于其是 GA 版本,是正式版本。

MySQL Workbench 5.2 GA 主要提供以下功能:

  • 数据建模
  • 数据查询 (替换老旧的 old MySQL Query Browser)
  • 数据库管理 (替换老旧的 MySQL Administrator)

此版本主要是修复早前 RC 版本的 Bug,完整的 Changelog 可以参考此处

MySQL Workbench 提供了 Windows、Linux、Mac OS X 和源代码包下载,还提供了 Fedora、Ubuntu、SUSE、RHEL/OEL 的二进制安装包。

下载地址

转自 LinuxTOY