鲁琴Handout #2网络数据库技术2013-03-04网络数据库技术—创建数据库和表学会了如何键入命令后,就可以学习如何访问数据库了。
这部分的主要内容:◆命令行方式创建数据库和表◆界面创建数据库和表◆有关表结构◆MySQL的数据类型1.命令行方式创建数据库这部分主要介绍如何使用MySQL命令行客户端创建及使用一个简单的数据库。
假设要处理学生相关的信息,可以通过创建表来保存数据,以及从表中检索数据。
在这部分,我们将学习如何执行下面的操作:◆创建数据库◆创建表我们可以使用SHOW命令来显示当前服务器上存在的所有数据库。
mysql> SHOW DATABASES;Mysql数据库描述了用户的访问权限;test 数据库通常作为示例,做用户的工作空间。
不同的机器显示出的数据库是不同的;如果没有SHOW DATABASES权限的话,用这个命令是不能显示出数据库的。
如果存在test数据库,我们来访问它。
mysql> USE testDatabase changed注意:USE命令,同QUIT命令一样, 后面不需要分号(;)(当然了,如果加上;也没有关系)。
另外,USE 命令有一点是特别的:它必须写在一行上。
你可以使用test数据库(如果你可以访问它)来试验下面的命令,但是你做的任何操作都可能被同样可以访问这个数据库的其他用户改变。
所以你应该请求MySQL管理员允许你使用自己的数据库。
假设你自己的数据库名字为xscj,管理员需要执行下面的命令:mysql> GRANT ALL ON xscj.* TO 'your_mysql_name'@'your_client_host';这里,your_mysql_name 是MySQL 用户的名字,your_client_host是你现在正在工作的连接到服务器的主机的名字。
1.1 创建数据库1.1.1 创建数据库xscjmysql> CREATE DATABASE xscj;在Unix操作系统下,数据库名字区分大小写(这不同于SQL关键字),表名也区分大小写。
在Windows操作系统下,数据库名及表名不区分大小写(尽管在同一个查询语句中大小写应一致),但是在使用过程中最好使用与创建时一致的大小写。
注意:当创建数据库时,显示如下错误提示:ERROR 1044 (42000): Access denied for user 'monty'@'localhost' to database 'menagerie'这表示你的用户账号没有创建数据库的权限,我们在“MySQL访问权限”一节中再讨论这个问题。
1.1.2 选择数据库xscj创建一个数据库后,并不能直接使用这个数据库。
必须用USE命令将这个数据库变成当前活动的数据库:mysql> USE xscjDatabase changed同一个数据库只能创建一次,但是每次使用它时都要用USE命令。
另外,可以在连接mysql服务器时,用连接参数指定当前活动的数据库。
shell> mysql -h host -u user -p xscjEnter password: ********1.1.3 查询当前活动数据库的命令:SELECT DATABASE();1.1.4 创建数据库命令的完整语法格式:CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name[create_specification [, create_specification] ...]其中create_specification:[DEFAULT] CHARACTER SET charset_name| [DEFAULT] COLLATE collation_name说明:语句中“[ ]”内为可选项。
提示:关于“字符集与校对规则”,请参看教材P373 附录D1.2 修改数据库数据库创建后,如果需要修改数据库的参数,可以使用ALTER DATABASE命令。
语法格式:ALTER {DATABASE | SCHEMA} [db_name]alter_specification [, alter_specification] ...其中alter_specification:[DEFAULT] CHARACTER SET charset_name| [DEFAULT] COLLATE collation_name说明:ALTER DATABASE用于更改数据库的全局特性,这些特性储存在数据库目录中的db.opt文件中。
用户必须有对数据库进行修改的权限,才可以使用ALTER DATABASE。
修改数据库的选项与创建数据库相同,功能不再重复说明。
如果语句中数据库名称忽略,则修改当前(默认)数据库。
【例】修改数据库xscj的默认字符集和校对规则。
ALTER DATABASE xscjDEFAULT CHARACTER SET gb2312DEFAULT COLLATE gb2312_chinese_ci;1.3 删除数据库已经创建的数据库需要删除,使用DROP DATABASE命令。
语法格式:DROP DATABASE [IF EXISTS] db_name其中:db_name是要删除的数据库名。
可以使用IF EXISTS子句以避免删除不存在的数据库时出现的MySQL错误信息。
注意:这个命令必须小心使用,因为它将删除指定的整个数据库,该数据库的所有表(包括其中的数据)也将永久删除。
2.命令行方式创建表2.1 创建表创建数据库很容易,但此时数据库是空的。
用SHOW TABLES命令可以看出来:mysql> SHOW TABLES;Empty set (0.00 sec)难的是确定数据库的结构:数据库中有哪些表及每个表中有哪些列。
首先要创建一个表包含每个学生的基本信息,这个表我们将其命名为xsqk,它应该包含学号,姓名,性别,出生日期,专业,联系电话。
mysql> CREATE TABLE xsqk (xh CHAR(10),xm VARCHAR(10), xbCHAR(1),csrq DATE,zy VARCHAR(30),lxdh VARCHAR(20));说明:VARCHAR (可变长度字符串)类型对于xm(姓名)列,zy(专业)列和lxdh(联系电话)列是一种好的选择,这些列的取值的长度不固定。
如果在这里类型定义不合理,MySQL 提供了一条ALTER TABLE命令来更改.xb(性别)列的取值只有两个'm'(男)and 'f'(女).csrq(出生日期)列定义为DATE(日期)型。
此时,可以用SHOW TABLES命令查看当前表的情况:可以使用DESCRIBE命令显示一下表的结构。
创建表命令的完整语法格式:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [ ( [column_definition] , ... | [index_definition] ) ][table_option] [select_statement];其中:列定义column_definition格式如下:col_name type[NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY][COMMENT 'string'] [reference_definition]例:CREATE TABLE xsqk (xh CHAR(10) NOT NULL PRIMARY KEY,xm VARCHAR(10) NOT NULL,xb CHAR(1) NOT NULL DEFAULT 'M',csrq DATE NOT NULL,zy VARCHAR(30) NOT NULL,lxdh VARCHAR(20)) ENGINE=InnoDB;说明:在上面的例子里,每个字段都包含附加约束或修饰符,这些可以用来增加对所输入数据的约束。
“PRIMARY KEY”表示将“xh”字段定义为主键。
“DEFAULT 'M’”表示“xb”的默认值为'M’。
“ENGINE=InnoDB”表示采用的存储引擎是InnoDB,InnoDB是MySQL在Windows平台默认的存储引擎,所以“ENGINE=InnoDB”可以省略。
提示:关于“存储引擎”,请参看教材P375 附录E2.2 修改表如果创建表时,表结构定义不合理(如列类型等),MySQL 提供了一条ALTER TABLE命令来更改。
ALTER TABLE用于更改原有表的结构。
例如,可以增加或删减列,创建或取消索引,更改原有列的类型,重新命名列或表,还可以更改表的评注和表的类型。
语法格式:ALTER [IGNORE] TABLE tbl_namealter_specification [, alter_specification] ...其中alter_specification:ADD [COLUMN] column_definition [FIRST | AFTER col_name ]/*添加列*/ | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}/*修改默认值*/ | CHANGE [COLUMN] old_col_name column_definition[FIRST|AFTER col_name]/*对列重命名*/| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]/*修改列类型*/ | DROP [COLUMN] col_name/*删除列*/| RENAME [TO] new_tbl_name/*重命名该表*/| ORDER BY col_name /*排序*/| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]/*将字符集转换为二进制*/| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]/*修改默认字符集*/| table_options| 列或表中索引项的增、删、改(见第5章索引部分)说明:可以在一个ALTER TABLE命令中写入多个ADD、ALTER、DROP和CHANGE子句,中间用逗号分开。