天天看点

MySQL(二)之MySQL基本操作

一、MySQL的客户端命令的基本使用

1、配置文件基本是/etc/my.cnf,服务器配置文件和客户端配置文件写在一起,通常包含三个部分

  • [mysql] :mysql客户端配置部分,只是用来配置mysql自己的客户端  
  • [mysqld]:mysql客户端服务器配置段 
  • [client]:mysql的所有客户端,包括其他的客户端

2、mysql命令常用选项

  • 交互式模式:

      -u –user    指定用户名,例如:-u root,-uroot,–user=root

      -h –host    指定主机名称,例如:-h localhost,-hlocalhost,–host=localhost

      -p –password  指定密码

      –port       //当–protocol=tcp时指定使用的端口号

      –socket     //相当于–protocol=socket

      -e    在shell命令行模式下执行mysql客户端命令,而后退出。

使用举例:

[[email protected] data]# mysql -uroot -h127.0.0.1 -predhat -e 'SHOW DATABASES;'
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+      

   注意:命令是先登录到mysql服务器然后执行查询命令,显示当前mysql服务器上的数据库信息,此处-e后面跟的参数必须用单引号或双引号引起来,否则不生效。若要在shell命令行执行多个关于mysql的命令,可以写个脚本来进行执行。

  • 批处理模式:
[[email protected] ~]# cat test.sql 
use mysql;SELECT User,Host,Password FROM user;
[[email protected] ~]# mysql -uroot -hlocalhost -predhat < test.sql
User	Host	Password
root	localhost	*84BB5DF4823DA319BBF86C99624479A198E6EEE9
root	127.0.0.1	*84BB5DF4823DA319BBF86C99624479A198E6EEE9      

3、命令行编辑功能

         Ctrl+a //快速移动光标至行首

         Ctrl+e //快速移动光标至行尾

         Ctrl+w //删除光标之前的单词

         Ctrl+u //删除行首至光标处的所有内容

         Ctrl+y //粘贴使用Ctrl+w或Ctrl+u删除的内容

4、mysql的命令 

  • 常用客户端命令及特点  

   首先,在客户端可以自动执行的命令,不需要语句终止符。关于客户端命令可以在基于mysql的交互式接口中键入help或者?,均能得到客户端的命令,下面就列举写常用的客户端命令。

    quit    (\q)退出 交互式命令行;

    ?          (\?)  获取帮助 ;

    go       (\g) 直接将命令送到服务器端执行 ;

    ego     (\G) 不再显示为表格显示,而是以列的方式显示 ;

    clear    (\c) 取消命令的执行

    status  (\s) 查询运行状态 

    use      (\u) 设定默认库

    source (\.) 批处理执行mysql脚本,相同于shell接口的批处理模式

  • 服务器端命令 

  服务端命令比较多,比如DDL、DCL、DML基本上都属于服务端命令,虽然在mysql中命令不区分大小写,但是一般为区分还是会在使用服务端命令时使用大写字母表示,同时在语句的最后需要语句终止符,通常默认为分号(;),若被别人修改可以直接在语句最后用\g。

SELECT命令使用举例:

mysql> SELECT current_time();    //执行mysql内建的函数。
+----------------+
| current_time() |
+----------------+
| 22:33:07       |
+----------------+
1 row in set (0.13 sec)
mysql> SELECT User,Host,Password FROM user;     //从表中挑选指定的列的数据
+------+-----------+-------------------------------------------+
| User | Host      | Password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| root | 127.0.0.1 | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
+------+-----------+-------------------------------------------+
2 rows in set (0.03 sec)      

SHOW命令使用:

mysql> SHOW DATABASES; //显示所以的数据库
mysql> use mysql     //指定mysql表为默认库
mysql> SHOW TABLES;   //显示默认库的所有表      

CREATE命令的使用:

mysql> CREATE DATABASE testdb;    //创建库      

说明:在创建表时需要先创建表的结构,然后才能插入数据。

DROP命令的使用:

mysql> DROP DATABASE testdb;       //删除库时一定要注意在库里的表的数据有备份。      

   注意:命令本身不区分字符大小写,但与文件系统相关的部分则根据OS的不同,可能区分大小写,关于命令可以使用help加相关命令,来进行查询命令帮助信息。这里只是介绍几种,剩下的还有很多,下面讲到新的命令在进行举例。

5、MySQL服务器的几个重要概念

约束(constraint): 某一个字段取值的范围

  • 主键约束 :只要某些字段被定为主键,则填入数据时不能重复,另外不能为NULL 值;
  • 外键约束:通过另一张表的取值范围来约束当前表; 
  • 唯一键约束:与主键相同,但是可以为空,主键只能有一个,唯一键只能多个; 
  • 检查式约束: 用户自定义的取值范围,通常为布尔表达式,符合条件才能填;  
  • 非空约束 : 不能为空; 

键(key)

  • 主键:能惟一标识表中每一个记录的字段或字段的组合; 
  • 候选键 : 可以作为主键使用的字段或字段组合,不一定只有一种; 
  • 唯一键 : 唯一标示,但可以为空,数据不能重复出现;
  • 外键  :是另一表的主键, 外键可以有重复的,可以是空值;

表创建需要定义

  • 需要定义的内容:字段名, 约束,字段类型,下面介绍mysql的字段类型。 
  • 字符类型:  

char(#): 不区分大小写,保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。

varchar(#):不区分大小写,保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

binary(n):区分大小写,固定长度的二进制数据。

varbinary(n):区分大小写,可变长度的二进制数据。

text(不区分大小写):存储指针,指向对象,可变长度的字符串。

blob(区分大小写): 二进制大对象,只存储指针,指向对象

  • 数值型: 

    整型

tinyint(m)       1个字节  范围(-128~127)
smallint(m)     2个字节  范围(-32768~32767)
mediumint(m) 3个字节  范围(-8388608~8388607)
int(m)   4个字节  范围(-2147483648~2147483647)
bigint(m)    8个字节  范围(+-9.22*10的18次方)

   注意:取值范围如果加了unsigned,则最大值翻倍,如tinyint unsigned的取值范围为(0~256)。 int(m)里的m是表示SELECT查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个m有什么用。

    浮点型

float(m,d)      单精度浮点型    8位精度(4字节)     m总个数,d小数位
double(m,d)  双精度浮点型    16位精度(8字节)    m总个数,d小数位

   注意:设一个字段定义为float(5,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位。

   定点数

     浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。 decimal(m,d) 参数m<65 是总个数,d<30且 d<m 是小数位。

  • 日期时间型
date 日期 '2008-12-2'  (3字节)
time 时间 '12:25:36' (3字节)
datetime 日期时间 '2008-12-2 22:06:44' (8字节)
timestamp 自动存储记录修改时间即时间戳。
  • NULL
  • 内置类型

     ENUM(枚举类型)限定特定的取值范围,只能挑一个;

     SET (集合类型)可以组合集合内的任意元素,但集合以外的不能组合使用,可以挑N个组合。

6、创建表

  • 语法
CREATE TABLE tb_name(coll_name coll_type,......);      
  • 应用举例

   关于创建下面表结构说明:NOT NULL 表示不能为空,NULL表示可以为空, UNSIGNED 表示无符号,DEDAULT表示若不输入就是其后默认值,注意,字符要加引号,数字不能加引号。AUTO_INCREMENT 表示自动增长类型的字段必须为主键或唯一键。PRIMARY KEY表示定义主键,若是UNIQ KEY则表示唯一键。

mysql> use test
mysql> CREATE TABLE students(StuID int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(30) NOT NULL,Age tinyint UNSIGNED,Gender ENUM('F','M') DEFAULT 'M');
Query OK, 0 rows affected (0.09 sec)
mysql> DESC students;
+--------+---------------------+------+-----+---------+----------------+
| Field  | Type                | Null | Key | Default | Extra          |
+--------+---------------------+------+-----+---------+----------------+
| StuID  | int(10) unsigned    | NO   | PRI | NULL    | auto_increment |
| Name   | varchar(30)         | NO   |     | NULL    |                |
| Age    | tinyint(3) unsigned | YES  |     | NULL    |                |
| Gender | enum('F','M')       | YES  |     | M       |                |
+--------+---------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)      
  • 表中插入数据

语法:

   INSERT INTO tb_name (col1,col2...) VALUE|VALUES (val1,val2.....)
   INSERT INTO tb_name VALUES(val1,val2....),给所有字段插入值
   INSERT INTO tb_name VALUES(val1,val2....),(val1,val2....) 批量插入      
mysql> INSERT INTO students(name,age,gender) VALUES('bols',23,'F');
Query OK, 1 row affected (0.07 sec)
mysql> INSERT INTO students(name,age,gender) VALUES('longls',25,'F'),('cangls',30,'F');
Query OK, 2 rows affected (0.08 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> INSERT INTO students(name,age) VALUES('xiaoming',12),('xiaoli',32);
Query OK, 2 rows affected (0.09 sec)
Records: 2  Duplicates: 0  Warnings: 0      
  • 查询表中的数据

   在查找数据中WHERE后所跟的表达式可以是=、<、>、<=、>=,还可以使用组合条件即:and、or、not。还可以使用LIKE关键字进行匹配查询,LIKE后可以跟通配符:“%”任意长度的任意字符、“ _”匹配任意单个字符,也可以使用基于正则表达式的关键字RLIKE。

mysql> SELECT * FROM students;
+-------+----------+------+--------+
| StuID | Name     | Age  | Gender |
+-------+----------+------+--------+
|     1 | bols     |   23 | F      |
|     2 | longls   |   25 | F      |
|     3 | cangls   |   30 | F      |
|     4 | xiaoming |   12 | M      |
|     5 | xiaoli   |   32 | M      |
+-------+----------+------+--------+
5 rows in set (0.00 sec)
mysql> SELECT Name,Age FROM students WHERE Age > 25;
+--------+------+
| Name   | Age  |
+--------+------+
| cangls |   30 |
| xiaoli |   32 |
+--------+------+
2 rows in set (0.12 sec)
mysql> SELECT Name,Age,Gender FROM students WHERE Gender = 'F' and Age > 25;
+--------+------+--------+
| Name   | Age  | Gender |
+--------+------+--------+
| cangls |   30 | F      |
+--------+------+--------+
1 row in set (0.17 sec)      
  • 删除表中的数据
DELETE FROM tb_name WHERE clause;      

举例:

mysql> DELETE FROM students WHERE Name LIKE 'c%';
Query OK, 1 row affected (0.11 sec)
mysql> SELECT * FROM students;
+-------+----------+------+--------+
| StuID | Name     | Age  | Gender |
+-------+----------+------+--------+
|     1 | bols     |   23 | F      |
|     2 | longls   |   25 | F      |
|     4 | xiaoming |   12 | M      |
|     5 | xiaoli   |   32 | M      |
+-------+----------+------+--------+
4 rows in set (0.00 sec)      
UPDATE tb_name set col1 = value where clause;      
mysql> UPDATE students SET Age=22 WHERE Name='xiaoming';
Query OK, 1 row affected (0.09 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> SELECT Name,Age,Gender FROM students WHERE Name='xiaoming';
+----------+------+--------+
| Name     | Age  | Gender |
+----------+------+--------+
| xiaoming |   22 | M      |
+----------+------+--------+
1 row in set (0.00 sec)