本篇Himi简单介绍一些MySQL数据库的基础操作;
注:mysql 语句对大小写不敏感,语句以分号“;”标识语句结束;
1. 首先使用两个简单的查询语句;
查询当前版本:select version();
查询当前日期:select current_date;
查询当前时间:select now();
两句合并: select version() , current_date , now();
显示结果如下:
- mysql> select version() , current_date , now();
- +-----------+--------------+---------------------+
- | version() | current_date | now() |
- +-----------+--------------+---------------------+
- | 5.5.23 | 2012-04-17 | 2012-04-17 14:34:53 |
- +-----------+--------------+---------------------+
- 1 row in set (0.00 sec)
2. SQL语句可分多行来写:
- mysql> select version(),
- -> current_date,
- -> now(),
- -> user();
- +-----------+--------------+---------------------+----------------+
- | version() | current_date | now() | user() |
- +-----------+--------------+---------------------+----------------+
- | 5.5.23 | 2012-04-17 | 2012-04-17 14:38:42 | root@localhost |
- +-----------+--------------+---------------------+----------------+
- 1 row in set (0.00 sec)
3. 使用查询语句来作为计算器,让mysql 为我们计算结果,如下:
- mysql> select 1*1,2*2,3*3;
- +-----+-----+-----+
- | 1*1 | 2*2 | 3*3 |
- +-----+-----+-----+
- | 1 | 4 | 9 |
- +-----+-----+-----+
- 1 row in set (0.00 sec)
4. 使用 \c 取消SQL语句的输入;先看下MySQL的一些提示符:
提示符 | 含义 |
mysql> | 准备好接受新命令。 |
-> | 等待多行命令的下一行。 |
‘> | 等待下一行,等待以单引号(“’”)开始的字符串的结束。 |
“> | 等待下一行,等待以双引号(“””)开始的字符串的结束。 |
`> | 等待下一行,等待以反斜点(‘`’)开始的识别符的结束。 |
/*> | 等待下一行,等待以/*开始的注释的结束。 |
输入\c以后,它切换回到mysql>,提供反馈以表明mysql准备接受一个新命令。
4. 创建使用数据库:
4.1 查询当前已存在的数据库:
- mysql> show databases;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | test |
- +--------------------+
- 4 rows in set (0.17 sec)
4.2 使用已有的数据库;例如使用已存在的 test 数据库;
mysql> use testDatabase changed
4.3 假设你在test 该数据库创建的任何东西可以被访问它的其它人删除,因此,你应该询问MySQL管理员许可你使用自己的一个数据库。假定你想要调用你的menagerie,管理员需要执行这样一条命令:
mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';
这里your_mysql_name是分配给你的MySQL用户名,your_client_host是所连接的服务器所在的主机。
4.4 创建并选择新的数据库;
- mysql> create database himiDB
- -> ;
- Query OK, 1 row affected (0.06 sec)
- mysql> use himidb
- Database changed
- mysql>
5. 创建使用表;
5.1 新创建的数据库中是没有任何表的,如上面我新建的himiDB,如下我使用 show tables; 显示:
- mysql> show databases
- -> ;
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | himiDB |
- | mysql |
- | performance_schema |
- | test |
- +--------------------+
- 5 rows in set (0.00 sec)
- mysql> use himidb
- Database changed
- mysql> show tables
- -> ;
- Empty set (0.00 sec)
而关于表的创建比较麻烦,需要设计,较难的部分是决定你的数据库结构应该是什么:你需要什么数据库表,各数据库表中有什么样的列。你将需要一个包含你每个宠物的记录的表。它可称为pet表,并且它应该包含,最少,每个动物的名字。因为名字本身不是很有趣,表应该包含另外的信息。例如,如果在你豢养宠物的家庭有超过一个人,你可能想要列出每个动物的主人。你可能也想要记录例如种类和性别的一些基本的描述信息。
年龄呢?那可能有趣,但是存储到一个数据库中不是一件好事情。年龄随着时间流逝而变化,这意味着你将要不断地更新你的记录。相反, 存储一个固定值例如生日比较好,那么,无论何时你需要年龄,可以以当前日期和出生日期之间的差来计算它。MySQL提供了日期运算函数,因此这并不困难。存储出生日期而非年龄还有其它优点:· 你可以使用数据库完成这样的任务,例如生成即将到来的宠物生日的提示。(如果你认为这类查询有点蠢,注意,这与从商务数据库来识别出不久要发给生日祝贺的客户是同一个问题,因为计算机帮助私人联络。)· 你可以相对于日期而不止是当前日期来计算年龄。例如,如果你在数据库存储死亡日期,你能很容易地计算出一只宠物死时有多大。
这里假设我们创建一个people 的表,其中包含人的 名字、名族(h/m 来表示汉族/满族)、城市,性别(m/w man/woman)、出生和死亡日期。
- mysql> create table people (
- -> name varchar(20),
- -> mz varchar(1),
- -> city varchar(10),
- -> sex varchar(1),
- -> birthday varchar(20),
- -> deathday varchar(20));
- Query OK, 0 rows affected (0.37 sec)
创建表规则: create table xx(table Name) ( item的名字 item的类型 );
这里 varchar 字符,varchar()小括号内的表示字符大小,根据情况自己定义,范围是:1到65535的任何长度(如果选择得不合适,后来证明你需要一个更长的字段,MySQL提供一个ALTER TABLE语句。)
OK,我们来查看这个新创建的表中的类目(具体每个记录的查看使用 select *from 语句):
- mysql> show tables;
- +------------------+
- | Tables_in_himidb |
- +------------------+
- | people |
- +------------------+
- 1 row in set (0.00 sec)
- mysql> describe people;
- +----------+-------------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +----------+-------------+------+-----+---------+-------+
- | name | varchar(20) | YES | | NULL | |
- | mz | varchar(1) | YES | | NULL | |
- | city | varchar(10) | YES | | NULL | |
- | sex | varchar(1) | YES | | NULL | |
- | birthday | varchar(20) | YES | | NULL | |
- | deathday | varchar(20) | YES | | NULL | |
- +----------+-------------+------+-----+---------+-------+
- 6 rows in set (0.14 sec)
5.2 往表中插入数据:
5.2.1. 第一种使用读取本地txt插入到表中,txt的每个value之间以tab空开,然后采用如下语句插入:
load data local infile ‘xxx路径’ into table people;
如下:
- mysql> load data local infile '/Users/Himi/Desktop/people.txt' into table people;
- Query OK, 1 row affected (0.08 sec)
- Records: 1 Deleted: 0 Skipped: 0 Warnings: 0
- mysql> SELECT * FROM people;
- +------+------+---------+------+-----------+----------+
- | name | mz | city | sex | birthday | deathday |
- +------+------+---------+------+-----------+----------+
- | himi | h | beijing | m | 1989-9-23 | NULL |
- +------+------+---------+------+-----------+----------+
- 1 row in set (0.03 sec)
OK,没有问题,txt每一行对应表单的每一行,如果需要插入多行可以直接回车就OK啦。
注意:
mysql> LOAD DATA LOCAL INFILE ‘/path/people.txt’ INTO TABLE people;
请注意如果用Windows中的编辑器(使用\r\n做为行的结束符)创建文件,应使用:
mysql> LOAD DATA LOCAL INFILE ‘/path/people.txt’ INTO TABLE people -> LINES TERMINATED BY ‘\r\n’;
(在运行OS X的Apple机上,应使用行结束符’\r’。)
如果你愿意,你也能明确地在LOAD DATA语句中指出列值的分隔符和行尾标记,但是默认标记是定位符和换行符。
5.2.2. 使用INSERT语句手动直接插入
- mysql> insert into people
- -> values('insertHimi','h','Anhui','m','1989-9-23',NULL);
- Query OK, 1 row affected (0.10 sec)
- mysql> select *from people;
- +------------+------+---------+------+-----------+----------+
- | name | mz | city | sex | birthday | deathday |
- +------------+------+---------+------+-----------+----------+
- | himi | h | beijing | m | 1989-9-23 | NULL |
- | himi | h | beijing | m | 1989-9-23 | NULL |
- | himi3 | h | beijing | m | 1989-9-23 | NULL |
- | insertHimi | h | Anhui | m | 1989-9-23 | NULL |
- +------------+------+---------+------+-----------+----------+
- 4 rows in set (0.01 sec)