MySQL(二)之MySQL基本操作
一、MySQL的客户端命令的基本使用1、配置文件基本是/etc/my.cnf,服务器配置文件和客户端配置文件写在一起,通常包含三个部分
[*] :mysql客户端配置部分,只是用来配置mysql自己的客户端
[*] :mysql客户端服务器配置段
[*] :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客户端命令,而后退出。
使用举例:
# mysql -uroot -h127.0.0.1 -predhat -e 'SHOW DATABASES;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
注意:命令是先登录到mysql服务器然后执行查询命令,显示当前mysql服务器上的数据库信息,此处-e后面跟的参数必须用单引号或双引号引起来,否则不生效。若要在shell命令行执行多个关于mysql的命令,可以写个脚本来进行执行。
[*] 批处理模式:
# cat test.sql
use mysql;SELECT User,Host,Password FROM user;
# mysql -uroot -hlocalhost -predhat < test.sql
UserHostPassword
rootlocalhost*84BB5DF4823DA319BBF86C99624479A198E6EEE9
root127.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 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: 2Duplicates: 0Warnings: 0
mysql> INSERT INTO students(name,age) VALUES('xiaoming',12),('xiaoli',32);
Query OK, 2 rows affected (0.09 sec)
Records: 2Duplicates: 0Warnings: 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: 1Changed: 1Warnings: 0
mysql> SELECT Name,Age,Gender FROM students WHERE Name='xiaoming';
+----------+------+--------+
| Name | Age| Gender |
+----------+------+--------+
| xiaoming | 22 | M |
+----------+------+--------+
1 row in set (0.00 sec)
页:
[1]