2009-05-31——06-02 MySQL学习笔记04

1。数据库名

在文件系统中,MySQL的数据存储区以目录方式表示MySQL数据库,所以数据库名必须与目录名一致。包含特殊字符或者全部由数字或保留字组成的数据库名必须用符号”“引起来。

MySQL>创建数据库“…”,
查询好了,1行影响(0.01秒)

MySQL>创建数据库‘123456’;
查询好了,1行影响(0.01秒)

MySQL>创建数据库的数据库;
查询好了,1行影响(0.02秒)

MySQL>显示数据库;
+ - - - - - - - - - - - - - - - - - - - - - -数据库+
| |
+ - - - - - - - - - - - - - - - - - - - - - - +
| information_schema |
| 123456 |
|…数据库| |
|
|本身|
| mysql |
|测试|
+ - - - - - - - - - - - - - - - - - - - - - - +
7行组(0.00秒)

[@more@] mysql>使用……
数据库mysql改变
选择数据库();
+ - - - - - - - - - - - - +数据库()
| |
+ - - - - - - - - - - - - +
|…|
+ - - - - - - - - - - - - +
1行组(0.00秒)

mysql> 123456
数据库使用了
mysql>选择数据库();
+ - - - - - - - - - - - - +数据库()
| |
+ - - - - - - - - - - - - +
| 123456 |
+ - - - - - - - - - - - - +
1行组(0.00秒)

mysql数据库
使用mysql数据库改变
选择数据库();
+ - - - - - - - - - - - - +数据库()
| |
+ - - - - - - - - - - - -数据库+
| |
+ - - - - - - - - - - - - +
1行组(0.00秒)

mysql>删除数据库“…”,
查询好,0行影响(0.00秒)

mysql>删除数据库‘123456’;
查询好,0行影响(0.00秒)

mysql>删除数据库的数据库;
查询好,0行影响(0.00秒)


2。关于NULL和空值的补充说明

在MySQL中,空值与NULL不同,它不受NOT NULL约束的限制。

mysql> create table namelist
-> (
-> fname varchar(15) not null,
-> lname varchar(15) default 'Li',
-> tel smallint(11) unsigned not null
-> );
Query OK, 0 rows affected (0.18 sec)

mysql> desc namelist;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| fname | varchar(15) | NO | | NULL | |
| lname | varchar(15) | YES | | Li | |
| tel | smallint(11) unsigned | NO | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
3 rows in set (0.01 sec)

mysql> insert into namelist (fname) values ('Ning');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> select * from namelist;
+-------+-------+-----+
| fname | lname | tel |
+-------+-------+-----+
| Ning | Li | 0 |
+-------+-------+-----+
1 row in set (0.00 sec)

mysql> insert into namelist (fname) values (NUll);
ERROR 1048 (23000): Column 'fname' cannot be null

但这里说的空值是指插入记录时不值定任何值,用“''”指定的空字符串则不属于这种情况。

mysql> insert into namelist values ('', '', '');
Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> select * from namelist;
+-------+-------+-----+
| fname | lname | tel |
+-------+-------+-----+
| Ning | Li | 0 |
| | | 0 |
+-------+-------+-----+
2 rows in set (0.00 sec)

如果一个字段没有指定DEFAULT修饰符,MySQL会根据这个字段是NULL还是NOT NULL自动设置默认值。如果字段可以为NULL,默认值为NULL;如果字段指定指定了NOT NULL,MySQL对于数值类型插入0(如前面例子中的tel列),字符串类型插入空字符串,时间戳类型插入当前的日期和时间,ENUM类型插入允许值集合的第一个值。
从下面的例子可以看到,MySQL为NOT NULL的varchar列fname插入了空字符串,这和用“''”指定的空字符串相同:

mysql> insert into namelist (lname, tel) values ('', '');
Query OK, 1 row affected, 2 warnings (0.44 sec)

mysql> select * from namelist;
+-------+-------+-----+
| fname | lname | tel |
+-------+-------+-----+
| Ning | Li | 0 |
| | | 0 |
| | | 0 |
+-------+-------+-----+
3 rows in set (0.00 sec)

mysql> select * from namelist where fname='';
+-------+-------+-----+
| fname | lname | tel |
+-------+-------+-----+
| | | 0 |
| | | 0 |
+-------+-------+-----+
2 rows in set (0.41 sec)


3.全文索引

全文索引用于全文检索。可以为一或两个纯文本字符串列(称为资料库)添加该索引,索引列可以是CHAR、VARCHAR或文本类型,但不能为BLOB类型,对索引列进行查询时返回含有与搜索字符串相似的部分的记录.FULLTEXT索引仅可用于MyISAM表,而创建表的默认类型为InnoDB,所以要用类型明确指定。

2009-05-31——06-02 MySQL学习笔记04