MySQL 的安装和使用

MySQL (发音为 "My Ess Que Ell")是 Tcx 公司(http://www.tcx.se)开发的一个多人使用、多执行绪的 SQL 资料库 ServerMySQL 主要的目标在快速、稳定和容易使用。 

一、MySQL的下载

  MySQL 可在此 http://www.mysql.con/ 取得。 

二、MySQL 的安装 

  本文所使用的 MySQL 版本为 mysql-3.22.27.tar.gz(原始码档),作业环境为 RedHat6.0 CLE0.8 。 

  MySQL 预设情况下会安装至 /usr/local 目录下,不过为了日后移除方便,建议将 mysql 独立安装在 /usr/local/mysql 目录。底下为安装 MySQL 的步骤: 

  取得 mysql-3.22.27.tar.gz 后, 于 /usr/local 目录下解开: 

# cd /usr/local 

# tar zxvf mysql-3.22.27.tar.gz 

# cd mysql-3.22.27 

设定 configure 安装选项,选择安装目录 (prefix)以及支持中文 Big5 码(with-charset=big5): 

# ./configure --prefix=/usr/local/mysql \ 

#--with-charset=big5 

  开始编译并安装: 

# make 

# make install 

# scripts/mysql_install_db 

  最后一个步骤是用来产生 MySQL grant tables(会建立一个 mysql 资料库和一些 tables,用来管理使用 MySQL 的授权资讯,也就是使用者有哪些使用资料库的权限)。 

三、启动、停止 MySQL 

  要启动 MySQL 的方法:(以本文将 MySQL 安装在 /usr/local/mysql 为例) 

# /usr/local/mysql/share/mysql.server start 

  注意在第一次执行前,须将 mysql.server 设成可执行(chmod 744 mysql.server),另外可将这行指令加在 /etc/rc.d/rc.local 档中,让 MySQL 在开机时自动启动。 

  要停止 MySQL 的方法: 

# /usr/local/mysql/bin/mysqladmin shutdown 

  如果你为 MySQL Administrator root 帐号(非作业系统的 root)设了密码,要停止 MySQL 则必须像下列这样做,MySQL 会询问你 root 的密码后才会执行 shutdown 的工作: 

# /usr/local/mysql/bin/mysqladmin -u root -p shutdown 

四、管理与使用 MySQL 简介 

  在你开始前 MySQL 提供了许多工具 (Client Tools)来与 MySQL 资料库 Server 连线,其中最主要的为 mysql 交谈式连线工具与 mysqladmin 公用程序,大部份时候使用者会用 mysql 来和资料库 Server 交谈。底下就以 mysql 连线工具来介绍如何维护与使用 MySQL。(以本文安装为例,mysql 工具位于 /usr/local/mysql/bin/mysql)。 

mysql 的使用语法如下: 

mysql [-u username] [-h host] [-p[password]] [dbname] 

  MySQL 资料库有自己一套使用者帐号与权限管控方法,所以这边所指定的 username 与 password 是 MySQL 的使用者与密码,而不是作业系统的使用者与密码(当然任何使用者都能执行 mysql ,然后以 MySQL 的任何帐号进入使用) 。 

  在你第一次安装好 MySQL 时,MySQL 的管理帐号为 root,没有设定密码 (非作业系统的 root)。所以在开始前,请先照下列步骤为 root 设好密码: 

  使用 mysql 与 MySQL 资料库 Server 连线: 

# /usr/local/mysql/bin/mysql -u root mysql 

Reading table information for completion of table and column names 

You can turn off this feature to get a quicker startup with -A 

Welcome to the MySQL monitor. Commands end with ; or \g. 

Your MySQL connection id is 201 to server version: 3.22.27 

Type 'help' for help. 

mysql> 

  在下了 mysql -u root mysql 指令,指定以 root 帐号并开启 mysql 系统资料库,连线至 MySQL 后,会看到一些提示讯息与 mysql 工具的提示符号,以后大部份的工作皆在此提示符号下完成。 

1)更改 MySQL系统管理者 root 密码: 

mysql> update user set password=password('新密码') where user='root'; 

Query OK, 0 rows affected (0.00 sec) 

Rows matched: 2 Changed: 0 Warnings: 0 

mysql> FLUSH PRIVILEGES; 

Query OK, 0 rows affected (0.00 sec) 

mysql> quit 

Bye 

  注意每个指令后要加上一个分号 ";" 才会让 mysql 开始执行。而第二道指令会让已载入记忆体的 mysql 系统资料库更新,最后离开 mysql 工具程序。 

在更新 root 密码后,日后要与 MySQL 连线的方法为: 

mysql -u root -p新密码 

或者是这样,让 mysql 询问 root 的密码: 

mysql -u root -p

  (2)资料库维护 

  接下来,我们以简单的通讯录资料库作为例子,来介绍如何用 mysql 工具程序来做资料库的维护(新增、授权、资料表维护等)。 

  首先,以 MySQL root 帐号连线后建立一 addbook 资料库: 

# /usr/local/mysql/bin/mysql -u root -p 

Enter password: 

Welcome to the MySQL monitor. Commands end with ; or \g. 

Your MySQL connection id is 207 to server version: 3.22.27 

Type 'help' for help. 

mysql> create databae addbook; 

Query OK, 1 row affected (0.00 sec) 

指定使用 addbook 资料库,并建立一个 friends 资料表: 

mysql> use addbook; 

Database changed 

mysql> create table friends ( 

  -> name Char(15), 

  -> telphone VarChar(20), 

  -> icq Char(10), 

  -> address VarChar(30) 

  -> ); 

Query OK, 0 rows affected (0.00 sec) 

  新增几笔资料,并查询看看: 

mysql> insert into friends values( 

  -> "maa", "29016710", "46243046", "台北县新庄市

  -> ); 

Query OK, 1 row affected (0.00 sec) 

mysql> insert into friends (name, icq, telphone, address ) Values ( 

  -> "cxlin", "39425893", "7654321", "台北县

  -> ); 

Query OK, 1 row affected (0.01 sec) 

mysql> select * from friends; 

+-------+----------+----------+--------------+ 

| name | telphone | icq | address | 

+-------+----------+----------+--------------+ 

| maa | 29016710 | 46243046 | 台北县新庄市 

| cxlin | 7654321 | 39425893 | 台北县 

+-------+----------+----------+--------------+ 

2 rows in set (0.00 sec) 

  第二个 insert 指令指定了资料栏位的插入顺序,用法较第一个为弹性,而第一个指令必须依资料表建立结构时的顺序插入资料。 

  更新、删除资料表记录: 

mysql> update friends set address = "桃园县" where name = "cxlin"; 

Query OK, 1 row affected (0.00 sec) 

Rows matched: 1 Changed: 1 Warnings: 0 

mysql> select * from friends where name = "cxlin"; 

+-------+----------+----------+---------+ 

| name | telphone | icq | address | 

+-------+----------+----------+---------+ 

| cxlin | 7654321 | 39425893 | 桃园县 

+-------+----------+----------+---------+ 

1 row in set (0.00 sec) 

mysql> delete from friends where name = "maa"; 

Query OK, 1 row affected (0.01 sec) 

mysql> select * from friends; 

+-------+----------+----------+---------+ 

| name | telphone | icq | address | 

+-------+----------+----------+---------+ 

| cxlin | 7654321 | 39425893 | 桃园县 

+-------+----------+----------+---------+ 

1 row in set (0.00 sec) 

最后,建好资料库与资料表后,把 addbook 资料库中所有资料表的使用权限(selectinsertupdatedelete)授权给 maa@localhost(再次提醒,此处的 maa 为 MySQL 的使用者帐号,而非作业系统的 maa 帐号): 

mysql> grant select, insert, update, delete 

-> on addbook.* 

-> to maa@localhost identified by '1234567'; 

Query OK, 0 rows affected (0.00 sec) 

之后,可用 maa 的身份进入 MySQL 存取 addbook 资料库: 

# /usr/local/mysql/bin/mysql -u maa -p addbook 

Enter password: 

Reading table information for completion of table and column names 

You can turn off this feature to get a quicker startup with -A 

Welcome to the MySQL monitor. Commands end with ; or \g. 

Your MySQL connection id is 211 to server version: 3.22.27 

Type 'help' for help. 

mysql> status 

-------------- 

./mysql Ver 9.36 Distrib 3.22.27, for pc-linux-gnu (i686) 

Connection id: 26 

Current database: addbook 

Current user: maa@localhost 

Server version 3.22.27 

Protocol version 10 

Connection Localhost via UNIX socket 

UNIX socket /tmp/mysql.sock 

Uptime: 2 hours 29 min 33 sec 

Threads: 11 Questions: 107 Slow queries: 0 Opens: 11 Flush tables: 1 

Open 7 

-------------- 

收回资料库使用权限的方法如下(以 MySQL root 进入): 

mysql> revoke delete on addbook.* from maa@localhost; 

Query OK, 0 rows affected (0.00 sec) 

mysql> revoke all privileges on addbook.* from maa@localhost; 

Query OK, 0 rows affected (0.00 sec) 

第二个指令用来收回全部的权限。 

五、mysqladmin 公用程序的使用 

mysqladmin 公用程序可用来维护 MySQL 比较一般性的工作(新增、删除资料库、设定使用者密码及停止 MySQL 等等),详细的说明可以使用 mysqladmin --help 来查看。(以本文的安装为例 mysqladmin 位于 /usr/local/mysql/bin/mysqladmin)。 

新增资料库 dbtest 

# /usr/local/mysql/bin/mysqladmin -u root -p create dbtest 

Enter password: 

Database "dbtest" created. 

删除资料库 

# /usr/local/mysql/bin/mysqladmin -u root -p drop dbtest 

Enter password: 

Dropping the database is potentially a very bad thing to do. 

Any data stored in the database will be destroyed. 

Do you really want to drop the 'dbtest' database [y/N] 

Database "dbtest" dropped 

  设定使用者密码(将 maa 的密码改为 7654321mysqladmin 会先询问 maa 的原密码) 

# /usr/local/mysql/bin/mysqladmin -u maa -p password 7654321 

Enter password: 

停止 MySQL 服务 

# ./mysqladmin -u root -p shutdown 

Enter password: 

注意,shutdown MySQL 后,必须由作业系统的 root 帐号执行下列指令才能启动 MySQL: 

/usr/local/mysql/share/mysql/mysql.server start 

六、结语: 

  MySQL 资料库的确是值得推广的一个产品,它的稳定性已经稳得大家的赞同,只要你曾经学习过 SQL Language(结构化查询语言),相信要摸熟 MySQL 的使用只消一两个小时的时间。如果搭配 PHP Personal HomePage Program)和 Apache Web Server,更可很轻松建构一个与资料库结合的动态 Web Site。如果再配合 phpMyAdmin 这个 Web 化的 MySQL 管理工具,建立 MySQL 的资料库和 MySQL 的管理将会更加方便。

MySQL 数据类型

   *数值类型

  *字符串类型

  *日期和时间类型

  *复合类型

  下面几节详细分析这些分类中的每一种类型。

数值类型

  MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段中的值是否有正负之分或者用零填补。

  表列出了各种数值类型以及它们的允许范围和占用的内存空间。

类型 大小 范围(有符号) 范围(无符号) 用途 

TINYINT 1 字节 (-128127) (0255) 小整数值 

SMALLINT 2 字节 (-32 76832 767) (065 535) 大整数值 

MEDIUMINT 3 字节 (-8 388 6088 388 607) (016 777 215) 大整数值 

INTINTEGER 4 字节 (-2 147 483 6482 147 483 647) (04 294 967 295) 大整数值 

BIGINT 8 字节 (-9 233 372 036 854 775 8089 223 372 036 854 775 807) (018 446 744 073 709 551 615)  极大整数值 

FLOAT 4 字节 (-3.402 823 466 E+381.175 494 351 E-38)0(1.175 494 351 E-383.402 823 466 351 E+38) 0(1.175 494 351 E-383.402 823 466 E+38) 单精度

浮点数值 

DOUBLE 8 字节 (1.797 693 134 862 315 7 E+3082.225 073 858 507 201 4 E-308)0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 0(2.225 073 858 507 201 4 E-3081.797 693 134 862 315 7 E+308) 双精度

浮点数值 

DECIMAL DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于MD的值 依赖于MD的值 小数值 

INT 类型

  在 MySQL 中支持的 个主要整数类型是 TINYINTSMALLINTMEDIUMINTINT 和 BIGINT。这些类型在很大程度上是相同的,只有它们存储的值的大小是不相同的。

  MySQL 以一个可选的显示宽度指示器的形式对 SQL 标准进行扩展,这样当从数据库检索一个值时,可以把这个值加长到指定的长度。例如,指定一个字段的类型为 INT(6),就可以保证所包含数字少于 个的值从数据库中检索出来时能够自动地用空格填充。需要注意的是,使用一个宽度指示器不会影响字段的大小和它可以存储的值的范围。

  万一我们需要对一个字段存储一个超出许可范围的数字,MySQL 会根据允许范围最接近它的一端截短后再进行存储。还有一个比较特别的地方是,MySQL 会在不合规定的值插入表前自动修改为 0

  UNSIGNED 修饰符规定字段只保存正值。因为不需要保存数字的正、负符号,可以在储时节约一个的空间。从而增大这个字段可以存储的值的范围。

  ZEROFILL 修饰符规定 0(不是空格)可以用来真补输出的值。使用这个修饰符可以阻止 MySQL 数据库存储负值。

FLOATDOUBLE 和 DECIMAL 类型

  MySQL 支持的三个浮点类型是 FLOATDOUBLE 和 DECIMAL 类型。FLOAT 数值类型用于表示单精度浮点数值,而 DOUBLE 数值类型用于表示双精度浮点数值。

  与整数一样,这些类型也带有附加参数:一个显示宽度指示器和一个小数点指示器。比如语句 FLOAT(7,3) 规定显示的值不会超过 位数字,小数点后面带有 位数字。

  对于小数点后面的位数超过允许范围的值,MySQL 会自动将它四舍五入为最接近它的值,再插入它。

  DECIMAL 数据类型用于精度要求非常高的计算中,这种类型允许指定数值的精度和计数方法作为选择参数。精度在这里指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的位数。比如语句 DECIMAL(7,3) 规定了存储的值不会超过 位数字,并且小数点后不超过 位。

  忽略 DECIMAL 数据类型的精度和计数方法修饰符将会使 MySQL 数据库把所有标识为这个数据类型的字段精度设置为 10,计算方法设置为 0

  UNSIGNED 和 ZEROFILL 修饰符也可以被 FLOATDOUBLE 和 DECIMAL 数据类型使用。并且效果与 INT 数据类型相同。

字符串类型

  MySQL 提供了 个基本的字符串类型,可以存储的范围从简单的一个字符到巨大的文本块或二进制字符串数据。

类型 大小 用途 

CHAR 0-255字节 定长字符串 

VARCHAR 0-255字节 变长字符串 

TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串  

TINYTEXT 0-255字节 短文本字符串 

BLOB 0-65 535字节 二进制形式的长文本数据 

TEXT 0-65 535字节 长文本数据 

MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据 

MEDIUMTEXT 0-16 777 215字节 中等长度文本数据 

LOGNGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据 

LONGTEXT 0-4 294 967 295字节 极大文本数据 

CHAR 和 VARCHAR 类型

  CHAR 类型用于定长字符串,并且必须在圆括号内用一个大小修饰符来定义。这个大小修饰符的范围从 0-255。比指定长度大的值将被截短,而比指定长度小的值将会用空格作填补。

  CHAR 类型可以使用 BINARY 修饰符。当用于比较运算时,这个修饰符使 CHAR 以二进制方式参于运算,而不是以传统的区分大小写的方式。

  CHAR 类型的一个变体是 VARCHAR 类型。它是一种可变长度的字符串类型,并且也必须带有一个范围在 0-255 之间的指示器。CHAR 和 VARCHGAR 不同之处在于 MuSQL 数据库处理这个指示器的方式:CHAR 把这个大小视为值的大小,不长度不足的情况下就用空格补足。而 VARCHAR 类型把它视为最大值并且只使用存储字符串实际需要的长度(增加一个额外字节来存储字符串本身的长度)来存储值。所以短于指示器长度的 VARCHAR 类型不会被空格填补,但长于指示器的值仍然会被截短。

  因为 VARCHAR 类型可以根据实际内容动态改变存储值的长度,所以在不能确定字段需要多少字符时使用 VARCHAR 类型可以大大地节约磁盘空间、提高存储效率。

  VARCHAR 类型在使用 BINARY 修饰符时与 CHAR 类型完全相同。

TEXT 和 BLOB 类型

  对于字段长度要求超过 255 个的情况下,MySQL 提供了 TEXT 和 BLOB 两种类型。根据存储数据的大小,它们都有不同的子类型。这些大型的数据用于存储文本块或图像、声音文件等二进制数据类型。

  TEXT 和 BLOB 类型在分类和比较上存在区别。BLOB 类型区分大小写,而 TEXT 不区分大小写。大小修饰符不用于各种 BLOB 和 TEXT 子类型。比指定类型支持的最大范围大的值将被自动截短。

日期和时间类型

  在处理日期和时间类型的值时,MySQL 带有 个不同的数据类型可供选择。它们可以被分成简单的日期、时间类型,和混合日期、时间类型。根据要求的精度,子类型在每个分类型中都可以使用,并且 MySQL 带有内置功能可以把多样化的输入格式变为一个标准格式。

类型 大小

(字节范围 格式 用途 

DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值 

TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间 

YEAR 1 1901/2155 YYYY 年份值 

DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59  YYYY-MM-DD HH:MM:SS  混合日期和时间值 

TIMESTAMP 8 1970-01-01 00:00:00/2037 年某时  YYYYMMDD HHMMSS  混合日期和时间值,时间戳 

DATE、TIME 和 TEAR 类型

  MySQL 用 DATE 和 TEAR 类型存储简单的日期值,使用 TIME 类型存储时间值。这些类型可以描述为字符串或不带分隔符的整数序列。如果描述为字符串,DATE 类型的值应该使用连字号作为分隔符分开,而 TIME 类型的值应该使用冒号作为分隔符分开。

  需要注意的是,没有冒号分隔符的 TIME 类型值,将会被 MySQL 理解为持续的时间,而不是时间戳。

  MySQL 还对日期的年份中的两个数字的值,或是 SQL 语句中为 TEAR 类型输入的两个数字进行最大限度的通译。因为所有 TEAR 类型的值必须用 个数字存储。MySQL 试图将 个数字的年份转换为 个数字的值。把在 00-69 范围内的值转换到 2000-2069 范围内。把 70-99 范围内的值转换到 1970-1979 之内。如果 MySQL 自动转换后的值并不符合我们的需要,请输入 个数字表示的年份。

DATEYIME 和 TIMESTAMP 类型

   除了日期和时间数据类型,MySQL 还支持 DATEYIME 和 TIMESTAMP 这两种混合类型。它们可以把日期和时间作为单个的值进行存储。这两种类型通常用于自动存储包含当前日期和时间的时间戳,并可在需要执行大量数据库事务和需要建立一个调试和审查用途的审计跟踪的应用程序中发挥良好作用。

  如果我们对 TIMESTAMP 类型的字段没有明确赋值,或是被赋与了 null 值。MySQL 会自动使用系统当前的日期和时间来填充它。

复合类型

  MySQL 还支持两种复合数据类型 ENUM 和 SET,它们扩展了 SQL 规范。虽然这些类型在技术上是字符串类型,但是可以被视为不同的数据类型。一个 ENUM 类型只允许从一个集合中取得一个值;而 SET 类型允许从一个集合中取得任意多个值。

ENUM 类型

  ENUM 类型因为只允许在集合中取得一个值,有点类似于单选项。在处理相互排拆的数据时容易让人理解,比如人类的性别。ENUM 类型字段可以从集合中取得一个值或使用 null 值,除此之外的输入将会使 MySQL 在这个字段中插入一个空字符串。另外如果插入值的大小写与集合中值的大小写不匹配,MySQL 会自动使用插入值的大小写转换成与集合中大小写一致的值。

   ENUM 类型在系统内部可以存储为数字,并且从 开始用数字做索引。一个 ENUM 类型最多可以包含 65536 个元素,其中一个元素被 MySQL 保留,用来存储错误信息,这个错误值用索引 或者一个空字符串表示。

  MySQL 认为 ENUM 类型集合中出现的值是合法输入,除此之外其它任何输入都将失败。这说明通过搜索包含空字符串或对应数字索引为 的行就可以很容易地找到错误记录的位置。 

SET 类型

  SET 类型与 ENUM 类型相似但不相同。SET 类型可以从预定义的集合中取得任意数量的值。并且与 ENUM 类型相同的是任何试图在 SET 类型字段中插入非预定义的值都会使 MySQL 插入一个空字符串。如果插入一个即有合法的元素又有非法的元素的记录,MySQL 将会保留合法的元素,除去非法的元素。

  一个 SET 类型最多可以包含 64 项元素。在 SET 元素中值被存储为一个分离的序列,这些表示与它相对应的元素。是创建有序元素集合的一种简单而有效的方式。并且它还去除了重复的元素,所以 SET 类型中不可能包含两个相同的元素。

  希望从 SET 类型字段中找出非法的记录只需查找包含空字符串或二进制值为 的行。

MySQL 常用命令

   一、连接 MYSQL

  格式: mysql -h 主机地址 -u 用户名 -用户密码 

  1、例1:连接到本机上的 MYSQL

  首先在打开 DOS 窗口,然后进入目录 mysqlbin,再键入命令 mysql -uroot -p,回车后提示你输密码,如果刚安装好 MYSQL,超级用户 root 是没有密码的,故直接回车即可进入到 MYSQL 中了,MYSQL 的提示符是

  mysql> 

  2、例2:连接到远程主机上的 MYSQL。假设远程主机的IP为:110.110.110.110,用户名为 root,密码为abcd123。则键入以下命令:

  mysql -h110.110.110.110 -uroot -pabcd123 

  (注:u 与 root 可以不用加空格,其它也一样) 

  3、退出 MYSQL 命令: exit (回车) 

  二、修改密码。

  格式:mysqladmin -u 用户名 -p 旧密码 password 新密码 

  1、例1:给 root 加个密码 ab12。首先在 DOS 下进入目录 mysqlbin,然后键入以下命令 

  mysqladmin -uroot -password ab12 

  注:因为开始时 root 没有密码,所以 -p 旧密码一项就可以省略了。 

  2、例2:再将 root 的密码改为 djg345。 

  mysqladmin -uroot -pab12 password djg345 

  三、增加新用户。(注意:和上面不同,下面的因为是MYSQL环境中的命令,所以后面都带一个分号作为命令结束符) 

  格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\" 

  例1、增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以 root 用户连入 MYSQL,然后键入以下命令: 

  grant select,insert,update,delete on *.* to test1@\"%\" Identified by \"abc\"; 

  但例1增加的用户是十分危险的,你想如某个人知道 test1 的密码,那么他就可以在 internet 上的任何一台电脑上登录你的 mysql 数据库并对你的数据可以为所欲为了,解决办法见例2

  例2、增加一个用户 test2 密码为 abc,让他只可以在 localhost上 登录,并可以对数据库 mydb 进行查询、插入、修改、删除的操作(localhost 指本地主机,即 MYSQL 数据库所在的那台主机),这样用户即使用知道 test2 的密码,他也无法从 internet 上直接访问数据库,只能通过 MYSQL 主机上的 web 页来访问了。 

  grant select,insert,update,delete on mydb.* to test2@localhost identified by \"abc\"; 

  如果你不想 test2 有密码,可以再打一个命令将密码消掉。

  grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\"; 

  在上篇我们讲了登录、增加用户、密码更改等问题。下篇我们来看看 MYSQL 中有关数据库方面的操作。注意:你必须首先登录到 MYSQL 中,以下操作都是在 MYSQL 的提示符下进行的,而且每个命令以分号结束。 

  一、操作技巧 

  1、如果你打命令时,回车后发现忘记加分号,你无须重打一遍命令,只要打个分号回车就可以了。也就是说你可以把一个完整的命令分成几行来打,完后用分号作结束标志就 OK。 

  2、你可以使用光标上下键调出以前的命令。但以前我用过的一个 MYSQL 旧版本不支持。我现在用的是mysql-3.23.27-beta-win。 

  二、显示命令 

  1、显示数据库列表。 

  show databases; 

  刚开始时才两个数据库:mysql 和 testmysql 库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。 

  2、显示库中的数据表: 

  use mysql; //打开库,学过 FOXBASE 的一定不会陌生吧 

  show tables; 

  3、显示数据表的结构: 

  describe 表名

  4、建库: 

  create database 库名

  5、建表: 

  use 库名; 

  create table 表名 (字段设定列表)

  6、删库和删表

  drop database 库名

  drop table 表名; 

  7、将表中记录清空: 

  delete from 表名

  8、显示表中的记录: 

  select * from 表名

  三、一个建库和建表以及插入数据的实例 

  drop database if exists school; //如果存在 SCHOOL 则删除 

  create database school; //建立库 SCHOOL 

  use school; //打开库 SCHOOL 

  create table teacher //建立表 TEACHER 

  ( id int(3) auto_increment not null primary key, 

  name char(10) not null, 

  address varchar(50) default '深圳', 

  year date); //建表结束 

  //以下为插入字段 

  insert into teacher values('','glchengang','深圳一中','1976-10-10'); 

  insert into teacher values('','jack','深圳一中','1975-12-23'); 

  注:在建表中(1)将ID 设为长度为 的数字字段:int(3) 并让它每个记录自动加一:auto_increment 并不能为空:not null 而且让他成为主字段 primary key2)将 NAME 设为长度为10的字符字段(3)将ADDRESS 设为长度 50 的字符字段,而且缺省值为深圳。(4)将YEAR 设为日期字段。 

  如果你在 mysql 提示符键入上面的命令也可以,但不方便调试。你可以将以上命令原样写入一个文本文件中假设为 school.sql,然后复制到 c:\\ 下,并在 DOS 状态进入目录 \\mysql\\bin,然后键入以下命令: 

  mysql -uroot -p密码 < c:\\school.sql 

  如果成功,空出一行无任何显示;如有错误,会有提示。(以上命令已经调试,你只要将 // 的注释去掉即可使用)。 

  四、将文本数据转到数据库中 

  1、文本数据应符合的格式:字段数据之间用 tab 键隔开,null 值用 \\n 来代替

  例: 

  3 rose 深圳二中 1976-10-10 

  4 mike 深圳一中 1975-12-23 

  2、数据传入命令 load data local infile \"文件名\" into table 表名

  注意:你最好将文件复制到 \\mysql\\bin 目录下,并且要先用use命令打表所在的库。 

  五、备份数据库:(命令在 DOS 的 \\mysql\\bin 目录下执行) 

  mysqldump --opt school>school.bbb 

  注释:将数据库 school 备份到 school.bbb 文件,school.bbb 是一个文本文件,文件名任取,打开看看你会有新发现。 

  后记:其实 MYSQL 的对数据库的操作与其它的 SQL 类数据库大同小异,您最好找本将 SQL 的书看看。我在这里只介绍一些基本的,其实我也就只懂这些了,呵呵。最好的 MYSQL 教程还是"晏子"译的"MYSQL 中文参考手册"不仅免费每个相关网站都有下载,而且它是最权威的。可惜不是象\"PHP4 中文手册 \"那样是 chm 的格式,在查找函数命令的时候不太方便。

Mysql 语法参考

 

  一、资料定义 DDLdata definition language)

  资料定语言是指对资料的格式和形态下定义的语言,他是每个资料库要建立时候时首先要面对的,举凡资料分哪些表格关系、表格内的有什么栏位主键、表格和表格之间互相参考的关系等等,都是在开始的时候所必须规划好的。 

  [1]、建表格: 

  create table table_name( 

  column1 datatype [not null] [not null primary key], 

  column2 datatype [not null],...)

  说明:  

  datatype --是资料的格式,详见表。 

  nut null --可不可以允许资料有空的(尚未有资料填入)。 

  primary key --是本表的主键。 

  [2]、更改表格  

  alter table table_name 

  add column column_name datatype 

  说明:增加一个栏位(没有删除某个栏位的语法。 

  alter table table_name 

  add primary key (column_name) 

  说明:更改表得的定义把某个栏位设为主键。 

  alter table table_name 

  drop primary key (column_name) 

  说明:把主键的定义删除。 

  [3]、建立索引  

  create index index_name on table_name (column_name) 

  说明:对某个表格的栏位建立索引以增加查询时的速度。 

  [4]、删除  

  drop table_name 

  drop index_name 

  二、的资料形态 datatypes 

  smallint16 位的整数。 

  interger32 位的整数。 

  decimal(p,s)精确值和 大小的十进位整数,精确值p是指全部有几个数(digits)大小值,s是指小数点后有几位数。如果没有特别指定,则系统会设为 p=5; s=0 

  float32位的实数。 

  double64位的实数。 

  char(n)长度的字符串,n不能超过 254。 

  varchar(n) 长度不固定且其最大长度为 的字符串,n不能超过 4000

  graphic(n) 和 char(n) 一样,不过其单位是两个字符 double-bytes, n不能超过127。这个形态是为 

了支持两个字符长度的字体,例如中文字。 

  vargraphic(n) 可变长度且其最大长度为 的双字符字符串,n不能超过 2000。 

  date 包含了 年份、月份、日期。 

  time 包含了 小时、分钟、秒。 

  timestamp 包含了 年、月、日、时、分、秒、千分之一秒。 

  三、资料操作 dml (data manipulation language) 

  资料定义好之后接下来的就是资料的操作。资料的操作不外乎增加资料(insert)、查询资料(query)、更改资料(update) 、删除资料(delete)四种模式,以下分 别介绍他们的语法: 

  [1]、增加资料: 

  insert into table_name (column1,column2,...) values ( value1,value2, ...) 

  说明: 

  1.若没有指定column 系统则会按表格内的栏位顺序填入资料。 

  2.栏位的资料形态和所填入的资料必须吻合。 

  3.table_name 也可以是景观 view_name。 

  insert into table_name (column1,column2,...) 

  select columnx,columny,... from another_table 

  说明:也可以经过一个子查询(subquery)把别的表格的资料填入。 

  [2]、查询资料: 

  基本查询 

  select column1,columns2,... 

  from table_name 

  说明:把table_name 的特定栏位资料全部列出来 

  select * from table_name where column1 = xxx [and column2 > yyy] [or column3 <> zzz] 

  说明: 

  1.'*'表示全部的栏位都列出来。 

  2.where 之后是接条件式,把符合条件的资料列出来。 

  select column1,column2 from table_name order by column2 [desc]

  说明:order by 是指定以某个栏位做排序,[desc]是指从大到小排列,若没有指明,则是从小到大排列 

  组合查询 

  组合查询是指所查询得资料来源并不只有单一的表格,而是联合一个以上的 

  表格才能够得到结果的。 

  select *

  from table1,table2 where table1.colum1=table2.column1 

  说明: 

  1.查询两个表格中其中 column1 值相同的资料。 

  2.当然两个表格相互比较的栏位,其资料形态必须相同。 

  3.一个复杂的查询其动用到的表格可能会很多个。 

  整合性的查询: 

  select count (*) from table_name where column_name = xxx 

  说明: 

  查询符合条件的资料共有几笔。 

  select sum(column1) from table_name 

  说明: 

  1.计算出总和,所选的栏位必须是可数的数字形态。 

  2.除此以外还有 avg() 是计算平均、max()min()计算最大最小值的整合性查询。 

  select column1,avg(column2) from table_name group by column1 having avg(column2) > xxx 

  说明: 

  1.group by: column1 为一组计算 column2 的平均值必须和 avgsum等整合性查询的关键字一起使用。 

  2.having : 必须和 group by 一起使用作为整合性的限制。 

  复合性的查询 

  select * from table_name1 where exists ( select * from table_name2 where conditions ) 

  说明: 

  1.where 的 conditions 可以是另外一个的 query。 

  2.exists 在此是指存在与否。 

  select * from table_name1 where column1 in ( select column1 from table_name2 where conditions ) 

  说明:  

  1. in 后面接的是一个集合,表示column1 存在集合里面。 

  2. select 出来的资料形态必须符合 column1。 

  其它查询 

  select * from table_name1 where column1 like 'x%' 

  说明:like 必须和后面的'x%' 相呼应表示以 x为开头的字符串。

MySQL 创建、删除和选择数据库

   MySQL提供了三条数据库级的语句,它们分别是: CREATE DATABASE 用于创建数据库,DROP DATABASE 用于删除数据库,USE 用于选择缺省数据库。

  1. CREATE DATABASE 语句

  创建一个数据库很容易;只要在 CREATE DATABASE 语句中给出其名称即可。其中限制条件是该数据库的名称必须是合法的,该数据库必须不存在,并且您必须有足够的权限来创建它。

  2. DROP DATABASE 语句

  删除数据库就像创建它一样容易,假如有权限,执行下列语句即可。请注意,不要乱用 DROP DATABASE 语句,它将会删除数据库及其所有的表。在删除了一个数据库后,该数据库就永远没有了。换句话说,不要仅为了看看这条语句如何工作就试着执行该语句。如果管理员已经正常完成了数据库备份,那么删除的数据库可能还可以恢复。

  请注意,数据库是由数据目录中的一个目录表示的。如果在该目录中放置了一些非表的数据文件,它们是不会被 DROP DATABASE 语句删除的。此时,该数据库目录自身也不被删除。

  3. USE 语句

  USE 语句选择一个数据库,使其成为服务器的给定连接的缺省(当前)数据库。必须对数据库具有某种访问权限,否则不能使用它。为了使用数据库中的表而选择该数据库实际上不是必须的,因为可以利用db_name.tbl_name 形式来引用它的表。但是,不必指定数据库限定词引用表要方便得多。选择一个缺省数据库并不代表在连接的持续时间内它都必须是缺省的。可发布任意数目的 USE 语句在数据库之间进行任意地切换,只要具有使用它们的权限即可。选择一个数据库也不限制您只使用该数据库中的表。您仍然可以通过用数据库名限定表名的方法,引用其它数据库中的表。

在服务器的连接终止时,服务器关于缺省数据库的所有记忆都消失了。即,如果您再次连接到该服务器,它不会记住以前您所选择的数据库。事实上,假定 MySQL是多线程的,可通过一个用户处理多个连接,用户可以按任何顺序连接或断开,让服务器对缺省数据库进行记忆的想法也是没有意义的。在这个环境中, 以前选择的数据库这句话指什么并不清楚。

Driver: com.mysql.jdbc.Driver

URL: jdbc:mysql://192.168.2.43:3306/mysql

<?xml version='1.0' encoding='UTF-8'?>

<!DOCTYPE hibernate-configuration PUBLIC

          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

  "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. -->

<hibernate-configuration>

<session-factory>

  <property name="connection.username">root</property>

<property name="connection.url">

jdbc:mysql://localhost:3306/test

</property>

<property name="dialect">

org.hibernate.dialect.MySQLDialect

</property>

<property name="connection.useUnicode">true</property>

<property name="connection.characterEncoding">utf-8</property>

<property name="myeclipse.connection.profile">mysql</property>

<property name="connection.password"></property>

<property name="connection.driver_class">

com.mysql.jdbc.Driver

</property>

<mapping resource="crm/pojo/Customer.hbm.xml" />

</session-factory>

</hibernate-configuration>

名称 

长度 

用法 

TINYINT(M) 

BIT,BOOL,BOOLEAN 

 

如果为无符号数,可以存储从0到255的数; 

 否则可以存储从-128到127的数。 

SMALLINT(M) 

如果为无符号数,可以存储从0到65535的数; 否则可以存储从-32768到32767的数。 

MEDIUMINT(M) 

 

 

如果为无符号数,可以存储从0到16777215的数;否则可以存储从-8388608到8388607的数 

INT(M) 

INTEGER(M) 

 

 

如果为无符号数,可以存储从0到4294967295的数,否则可以存储从-2147483648到2147483647的数。 

BIGINT(M) 

 

 

如果为无符号数,可以存储从0到18446744073709551615的数,否则可以存储从-9223372036854775808到9223372036854775807的数。 

FLOAT(precision) 

4或8 

这里的precision是可以直达53的整数。如果precision<=24则转换为FLOAT,如果precision>24并且precision<=53则转换为DOUBLE。 

FLOAT(M,D) 

单精度浮点数。 

DOUBLE(M,D), 

DOUBLE PRECISION, 

REAL 

 

双精度浮点。 

 

DECIMAL(M,D), 

 

DEC,NUMERIC,FIXED 

M+1或M+2 

未打包的浮点数。 

 

DATE 

以YYYY-MM-DD的格式显示。 

DATETIME 

HH:MM:SS 

以YYYY-MM-DD的格式显示。 

TIMESTAMP 

以YYYY-MM-DD的格式显示。 

TIME 

以HH:MM:SS的格式显示。 

YEAR 

以YYYY的格式显示。 

CHAR(M) 

定长字符串。 

VARCHAR(M) 

最大M 

变长字符串。M<=255. 

TINYBLOB, 

TINYTEXT 

最大255 

TINYBLOB为大小写敏感,而TINYTEXT不是大小写敏感的。 

BLOB, 

TEXT 

最大64K 

BLOB为大小敏感的,而TEXT不是大小写敏感的。 

MEDIUMBLOB, 

MEDIUMTEXT 

最大16M 

MEDIUMBLOB为大小写敏感的,而MEDIUMTEXT不是大小敏感的。 

LONGBLOB, 

LONGTEXT 

最大4G 

LONGBLOB为大小敏感的,而LONGTEXT不是大小敏感的。 

ENUM(VALUE1,….) 

1或2 

最大可达65535个不同的值。 

SET(VALUE1,….) 

可达8 

最大可达64个不同的值。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值