mysql笔记(一)

一、mysql服务器连接

假设你已经在自己的机器上安装了mysql,并且mysql服务器已经开始运行,则可以使用如下命令连接mysql服务器

shell>mysql -h localhost -u user -p
Enter password:*********


其中参数h制定需要连接的服务器所在的机器的地址,本机为localhost,u参数制定用户名,p用于制定用户密码,在输入正确的密码后会提示连接成功,并出现mysql shell提示符,提示输入mysql sql指令,如下所示:

shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25338 to server version: 5.1.2-alpha-standard
 
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
 
mysql>


成功地连接后,可以在mysql>提示下输入QUIT (或\q)随时退出:

mysql> QUIT
Bye


一些MySQL安装允许用户以匿名(未命名)用户连接到本地主机上运行的服务器。如果你的机器是这种情况,你应该能不带任何选项地调用mysql与该服务器连接:

shell> mysql


二、创建并使用数据库

首先使用SHOW语句找出服务器上当前存在的数据库:

mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
| tmp      |
+----------+


你的机器上的数据可能不同,但是mysql和test数据库通常是必须的,mysql存储用户访问权限,test数据库经常用于用户学习的工作区。当然要看到这些信息需要数据库显示权限。

如果所需的数据库存在则在访问其中的表格前需要先选择它:

mysql> USE test
Database changed


USE语句可以不使用‘;’,并且需要在一行上给出。

对于特定数据库特定用户的权限的设置可以执行这样一条命令:

mysql> GRANT ALL ON menagerie.* TO 'your_mysql_name'@'your_client_host';


其中grant命令用来修改用户权限,menagerie为制定的数据库,其后的‘.’可以制定固定的表格,*表示所以表格,your_mysql_name是需要修改权限的用户名,your_client_host为mysql服务器所在机器地址。

以上我们选择了需要的数据库,但如果所需的数据库不存在呢?我们需要先创建它:

mysql> CREATE DATABASE menagerie;


此命令将创建数据库menagerie,然后用USE语句选择使用此数据库。数据库只需创建一次,但在每次连接数据库时都需要选择它才可以使用,可以用如下命令在连接数据库时直接制定需要使用的数据库:

shell> mysql -h host -u user -p menagerie
Enter password: ********

三、创建表

创建数据库是很容易的部分,但是在这时它是空的,正如SHOW TABLES将告诉你的:

mysql> SHOW TABLES;
Empty set (0.00 sec)


要输入数据必须先创建表格,可以使用CREATE TABLE语句制定你的数据库的布局,并且创建表格:

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
    -> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);


以上语句创建了一个表格,表格命为pet,其中定义了name,owner,species,sex,birth,death字段,字段类型也如语句中定义。

我们再用SHOW语句则产生了不同的输入

mysql> SHOW TABLES;
+---------------------+
| Tables in menagerie |
+---------------------+
| pet                 |
+---------------------+


为了签证pet是否如我们所愿的正确创建,可以使用DESCRIBE语句

mysql> DESCRIBE pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+


DESCRIBE可以随时使用。

四、向表格中插入数据

可以使用LOAD和INSERT语句完成插入数据的目的。

假设我们有如下一组数据

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04

 

Claws

Gwen

cat

m

1994-03-17

 

要将这些数据插入数据表,可以使用INSERT语句

mysql> INSERT INTO pet
    -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

如果要用LOAD语句,则需要创建一个pet.txt文件,每行包含一行数据,用定位符(TAB)把值分开,并且值要与TABLE中的个字段相对应,对于丢失的值可以用NULL值,然后就可以用LOAD语句

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

对于用windows下的编辑器创建的文件,需要使用

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet
    -> LINES TERMINATED BY '\r\n';

因为windows下的编辑器使用\r\n作为行的结束符。

五、检索信息

SELECT 语句的一般格式是:

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;

what_to_select用于指定要选择的内容,*表示所有列。which_table指出你想要从哪个表中检索数据。WHARE子句是可选项,如果选择该项,conditions_to_satisfy为每行需要满足的条件。

还是用以上示例,我们展示各种情况的用法:

1、选择所有数据

mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL       |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | NULL       |
| Buffy    | Harold | dog     | f    | 1989-05-13 | NULL       |
| Fang     | Benny  | dog     | m    | 1990-08-27 | NULL       |
| Bowser   | Diane  | dog     | m    | 1979-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL       |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | NULL       |
| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL       |
| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       |
+----------+--------+---------+------+------------+------------+

2、选择特殊行

mysql> SELECT * FROM pet WHERE name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name   | owner | species | sex  | birth      | death      |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+

WHERE字段规定选择的每行的name应该都为Bowser。在mysql中大小写不敏感。

还可以有如下示例:

mysql> SELECT * FROM pet WHERE birth > '1998-1-1';
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
| Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
+----------+-------+---------+------+------------+-------+
mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
| Whistler | Gwen  | bird    | NULL | 1997-12-09 | NULL  |
| Slim     | Benny | snake   | m    | 1996-04-29 | NULL  |
+----------+-------+---------+------+------------+-------+
mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
    -> OR (species = 'dog' AND sex = 'f');
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

以上语句中AND,OR是逻辑操作符。

3、选择特殊列

如果你不想看到表中的所有行,就命名你感兴趣的列,用逗号分开。例如,如果你想要知道你的动物什么时候出生的,选择name

mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+

可以看出输出结果中有出现重复字段,如果想要只检索出每一个唯一的数据记录可以使用DISTNCT语句

mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+

也可以使用WHERE子句结合行选择和列选择。

 4、分类行

ORDER子句用于对行进行排序

mysql> SELECT name, species, birth FROM pet
    -> ORDER BY species, birth DESC;
+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Chirpy   | bird    | 1998-09-11 |
| Whistler | bird    | 1997-12-09 |
| Claws    | cat     | 1994-03-17 |
| Fluffy   | cat     | 1993-02-04 |
| Fang     | dog     | 1990-08-27 |
| Bowser   | dog     | 1989-08-31 |
| Buffy    | dog     | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim     | snake   | 1996-04-29 |
+----------+---------+------------+

其中ORDER BY用于制定排序的字段,默认排序为升序,也可以用DESC指定为降序排列。注意DESC关键字仅适用于在它前面的列名(birth);不影响species列的排序顺序。

5、日期计算

CURDATE()获取当前如期,YEAR()取DATE中的年份,RIGHT()去DATE中的右面的N个字符。如DATE为YYYY-MM-DD,则RIGHT(Date,5)获取了日月。

mysql> SELECT name, birth, CURDATE(),
    -> (YEAR(CURDATE())-YEAR(birth))
    -> - (RIGHT(CURDATE(),5)<RIGHT(birth,5))
    -> AS age
    -> FROM pet ORDER BY age;
+----------+------------+------------+------+
| name     | birth      | CURDATE()  | age  |
+----------+------------+------------+------+
| Chirpy   | 1998-09-11 | 2003-08-19 |    4 |
| Puffball | 1999-03-30 | 2003-08-19 |    4 |
| Whistler | 1997-12-09 | 2003-08-19 |    5 |
| Slim     | 1996-04-29 | 2003-08-19 |    7 |
| Claws    | 1994-03-17 | 2003-08-19 |    9 |
| Fluffy   | 1993-02-04 | 2003-08-19 |   10 |
| Fang     | 1990-08-27 | 2003-08-19 |   12 |
| Bowser   | 1989-08-31 | 2003-08-19 |   13 |
| Buffy    | 1989-05-13 | 2003-08-19 |   14 |
+----------+------------+------------+------+

AS用于指定别名。

6、NULL值操作

不能关系运算符判断是否值为NULL,而应该用IS NULL, IS NOT NULL。

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

请注意在MySQL中,0或 NULL意味着假而其它值意味着真。布尔运算的默认真值是1

GROUP BY中,两个NULL值视为相同

执行ORDER BY时,如果运行 ORDER BY ... ASCNULL值出现在最前面,若运行ORDER BY ... DESC,则NULL值出现在最后面

NULL操作的常见错误是不能在定义为NOT NULL的列内插入0或空字符串,但事实并非如此。在NULL表示"没有数值"的地方有数值。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值