原文再续就书接上一回,上回说的是 MySQL 的基本安装,这次正式说一下创建数据库和表了。进入 MySQL 客户端的交互模式以后,首先是创建一个名为 YGGL 数据库:
此语句还可以添加 IF NOT EXISTS 参数,以判断该数据库不存在才会执行 CREATE DATABASE 操作。除此之外,还可以添加 CHARCTER SET 和 COLLATE 两个参数,前者是设置数据库的字符编码,后者指定字符集的校对规则。随后切换到 YGGL 数据库:
看看这个数据库内有什么内容:
返回的结果是:
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
同样可以用使用ALTER和DROP修改和删除数据库:
<pre lang='SQL'>ALTER DATABASE database_name database_specification;
DROP DATABASE database_name;
database_specification 与创建数据库一样,只有 CHARCTER SET 和 COLLATE 两个参数。
欲知后事如何,且听下回分解。
原文:http://www.liangsuilong.info/?p=786
评论