1 使用MySQL 数据库
1.1 查看数据库结构
MyS Q L 是一套数据库管理系统, 在每台MySQ L 服务器中, 均支持运行多个数据库,每个数据库相当千一个容器, 其中存放着许多表, 如图所示。
1 . 查看当前服务器中的数据库
SHOW DATABASES 语句: 用千查看当前MySQL 服务器中包含的数据库, MySQL 的每一条操作语句都是以分号(;)结束的。
经初始化后的MySQL 服务器, 默认建立了四个数据库:test 、mysql 、informati on_schema 和performance_schema (其中mysql是MySQ L 服务正常运行所需的数据库, 其中包含了用户认证相关的表) , 执行以下操作可以进行查看。
mysql>SHOW DATABASES;
+--------------------+
I Database I
+--------------------+I
I i nto「mation_schemal
I mysql I
I perfo「mance_schemal
I test I
+…………………+
4 rows in set (0.00 sec)
2. 查看当前数据库中有哪些表
SHOW TABLES 语句: 用于查看当前所在的数据库中包含的表。在操作之,需要先使用USE 语句切换到所使用的数据库。例如, 执行以下操作可以显示mysql 数据库中包含的所有表。
mysql>USE mysql;
Database changed
mysql>SHOW TABLES;
+---------------------------+
I Tables_in_mysql I
+---------------------------+
I columns_priv I
I db I
I event I
.... .. I/省略部分内容
I user I
+---------------------------+
28 rows in set (0.01 sec)
MySQ L 数据库的数据文件存放在/usr/loca l/mysq l/data 目录下, 每个数据库对应一个子目录, 用于存储数据表文件。每个数据表对应为三个文件, 扩展名分别为" .frm” 、" .MYD”和".MYI” 。
" .frm " 文件是与表相关的元数据( meta ) 信息都存放在“ .frm " 文件中, 包括表结构的定义信息等。不论是什么存储引擎, 每一个表都会有一个以表名命名的“ frm " 文件。所有的“ frm " 文件都存放在所属数据库的文件夹下面。
".MYD “ 文件是MylSAM 存储引擎专用, 存放MylSAM 表的数据。每一个MylSAM 表都会有一个“MYD" 文件与之对应, 同样存放千所属数据库的文件夹下, 和“ frm " 文件在一起。
3. 查看表的结构
DESCRIBE 语句: 用于显示表的结构, 即组成表的各字段(列) 的信息。需要指定“数据库名表名”作为参数; 若只指定表名参数, 则需先通过USE 语句切换到目标数据库。例如, 执行以下操作可以查看mysql 数据库中的user 表的结构,与直接执行“ DESCRIB Emysql. use「;“语句的效果相同。
mysql>USE mysql;
Database changed
mysql>DESCRIBE user;+……………………+……………………+……+……+…………+……+
I Field I Type I Null I Key I Defa ult I Extra I
+……………………+……………………+……+……+…………+……+I Host I char(60) I NO I PRI I I I
I User I char(16) I NO I PRI I I I
I Password I char(41) I NO | I I I
I Select_priv I enum('N','Y') I NO | IN I I……//省略部分内容
+……………………+……………………+……+……+…………+……+
43 rows in set (0.00 sec)
数据库目前标准的指令集是SQL 。SQL 是Structured Query Language 的缩写, 即结构化查询语言。它是1 974 年由Boyce 和Chambe rl in 提出来的, 1 975~ 1 979 年IBM 公司研制的关系数据库管理系统原型Syste m R 实现了这种语言。经过多年的发展, SQL 语言得到了广泛的应用。
SQ L 语言主要由以下几部分组成。
- DDL ( Data Definition Language , 数据定义语言) : 用来建立数据库、数据库对象和定义字段, 如C REATE 、ALTER 、DROP 。
- DML ( Data Manipulation La ng uage , 数据操纵语言) :用来插入、删除和修改数据库中的数据, 如IN S ERT、UPDATE 、DELETE 。
- DQL ( Data Query Language , 数据查询语言) : 用来查询数据库中的数据, 如SELECT 。
- DCL ( Data Control Lang uage , 数据控制语言) : 用来控制数据库组件的存取许可、存取权限等, 如COMM IT 、ROLLBACK 、GRANT、REVOKE 。
1.2 创建及删除数据库和表
1 . 创建新的数据库
CREATE DATABAS E 语句: 用千创建一个新的数据库, 需指定数据库名称作为参数。例如, 执行以下操作可以创建一个名为auth 的数据库。
mysql>CREATE DATABASE auth;
Query OK, 1 row affected (0.01 sec)
刚创建的数据库是空的,其中不包含任何表,在/usr/local/mysq l/data 目录下会自动生成一个与新建的数据库名相同的文件夹。
2 . 创建新的表
CREATE TABLE 语句: 用千在当前数据库中创建新的表, 需指定数据表名称作为参数,并定该表格所使用的各字段, 基本格式如下所示。
CREATE TABLE 表名(字段1 名称类型字段2 名称类型…, PRIMARY KEY (主键名))
可以在auth 数据库中按如下操作创建users 表。其中, 字段定义部分的DEFAULT 语句用于设置默认的密码字串, PRIMARY 语句用于设置主键字段名。
mysql> create table users (user_name char(20) not null,user_passwd char(48) default '', primary key(user_name));
3. 删除一个数据表
DROP TABLE 语句: 用于删除数据库中的表, 需要指定数据库名表名”作为参数; 若只指定表名参数,则需先通过执行“USE”语句切换到目标数据库。例如,执行以下操作可以删除auth 数据库中的users 表。
mysql>DROP TABLE auth.users;
4 . 删除一个数据库
DROP DATABASE 语句: 用千删除指定的数据库, 需要指定数据库名作为参数。例如,执行以下操作可以删除名为auth 的数据库。
mysql>DROP DATABASE auth;
1.3:管理表中的数据记录
1:插入数据记录
INSERT INTO 语句: 用于向表中插入新的数据记录, 语句格式如下所示。
INSERT INTO 表名(字段1 , 字段2,...) VALUES(字段1 的值, 字段2 的值,…)
执行以下操作将会向auth 数据库中的users 表插入一条记录: 用户名为“zhangsan",对应的密码为“ 123456" 。需注意的是, VALUES 部分的值应与前面指定的各字段逐一对应。
mysql> insert into users(user_name,user_passwd) values ('zhangsan','123456');
在插入新的数据记录时, 如果这条记录完整包括表中所有字段的值, 则插入语句中指定字段的部分可以省略
mysql> insert into users values ('lisi',password('123456'));
2. 查询数据记录
SELECT 语句: 用千从指定的表中查找符合条件的数据记录。MySQL 数据库支持标准的SQL 查询语句, 语句格式如下所示。
SELECT 字段名1 ,字段名2,… FROM 表名 WHERE 条件表达式
表示所有字段时, 可以使用通配符"*” , 若要显示所有的数据记录, 则可以省略WHERE条件子句。例如, 执行以下操作可以查看auth 数据库中users 表内的所有数据记录
mysql> select * from users;
mysql> select * from users where user_name='zhangsan';
3. 修改数据记录
UPDATE 语句: 用千修改、更新表中的数据记录。语句格式如下所示。
UPDATE 表名 SET 字段名1 =字段值1 [,字段名2=字段值2] WHERE 条件表达式
执行以下操作可以修改users 表中用户名为“zhangsan" 的记录,更改密码。
mysql> update users set user_passwd=password('pwd123') where user_name='zhangsan';
以下操作可以将数据库用户root 的密码设为“ 123457", 当再次使用'mysql -u root -p"访问M ySQ L 数据库服务器时, 必须使用此密码进行验证。
mysql> update user set authentication_string=password('pwd123') where user='root';
mysql> flush privileges; //刷新用户授权信息
若是在Linux 命令行环境中执行, 还可以使用mysqladmin 工具来设置密码。命令格式为“mysql admi n -u root -p'旧密码'password'新密码'"。例如, 执行以下操作可将数据库用户root 的密码设置为“ 123456” 。
[root@www~]# mysqladmin -u root-p'123457' password'123456'
Warning: Using a password on the command line interface can be inserure.
4 . 删除数据记录
DELETE 语句: 用千删除表中指定的数据记录, 语句格式如下所示。
DELETE FROM 表名 WHERE 条件表达式
执行以下操作可以删除users 表中用户名为“zhangsan"的数据记录
mysql> delete from users where user_name='zhangsan';
1.4:数据库高级操作
1 . 清空表
清空一个数据表就是删除这个表内的所有数据。除此之外还可以使用TRUNCATE TABLE 语句实现清空表内记录。DELETE FROM 语句可以使用WHERE 子句对删除的结果集进行过滤选择,这样更方便、更灵活。TRUNCATE TABLE 语句是删除表中所有记录数据, 没法定制, 灵活性上稍差
DELETE 在不加WHERE 子句的时候, 跟TRUNCATE 是一样的效果, 清空整个表。在清空表的时候有一点不同, 看他们返回的结果, DELETE 返回的结果内有删除的记录条目, 而TRUNCATE 并没有返回被删除的条目。
TRUNCATE 工作时是将表结构按原样重新建立, 而DELETE 工作时是一行一行的删除记录数据的, 在速度上TRUNCATE 会快很多, 尤其在数据屈比较大的时候, 表现更为明显。另外如果一个表中有自增字段时, 使用DELETE FROM 删除所有记录后, 再次新添加的记录会从原来最大的记录ID 后面继续自增写入记录。使用TRUNCATE TABLE 清空表内数据后, ID会从1开始重新记录
2. 临时表
MySQL 的临时表, 顾名思义, 就是临时建立的表, 并不会长期存在, 主要用千保存一些临时数据。临时表有个特性, 就是只在当前连接可见,当前连接下可执行增删改查等操作,当连接被关闭后, 临时表就会被MyS Q L 删除,相关的资源也会被释放。
临时表创建成功之后, 使用SHOW TAB LES 命令是看不到创建的临时表的,临时表会在连接退出后被销毁。如果在退出连接之前, 也可以手动直接删除, 使用DROP TABLE 语句
3. 克隆表
方法一: 通过LI KE 方式克隆表
首先, 通过在创建表时使用LIKE 方法, 完整复制表结构。LIKE 方法可以将源表完全一样的复制生成一个新表, 包括表的备注、索引、主键、存储引擎等, 但是不会复制源表内数据记录。
其次, 在通过INSERT INTO... SELECT 方法, 将源表内的数据写入新表内。
mysql>create table test like mytmp; //通过LIKE方法,复制mytmp表生成test表
mysql>show create table test\G
mysql>select * from test; //LIKE方法复制表结构, 不复制数据
mysql>insert into test select * from mytmp; //将mytmp表的数据写入test表
方法二: 通过创建表的方式克隆表
首先, 使用SHOW CREATE TABLE 命令来获取源表的表结构、索引等信息。
其次, 复制源表结构并修改表名为目标名字, 然后执行创建新表的语句。通过这步操作,就可以获得一个和源表结构一样的克隆表了。
最后, 执行INSERT INTO... SELECT 语句, 从源表复制数据到新表内。
mysql>show create table mytmp\G
mysql>CREATE TABLE · test'(//改名后创建新表
->'id ' int(10) NOT NULLAUTO_INCREMENT,
->' NAME'varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
->' lever int(10) NOT NULL,
->PRIMARY KEY (id)
->) ENGINE=lnnoDB DEFAULT CHARSET=utf8;
mysql> insert into test select * from mytmp; //导入原表数据
2 数据库用户授权
1 . 授予权限
GRANT 语句: 专门用来设置数据库用户的访问权限。当指定的用户名不存在时,GRANT 语句将会创建新的用户; 当指定的用户名存在时, GRANT语句用于修改用户信息。语句格式如下所示。
GRANT 权限列表ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY '密码']
使用GRANT 语句时, 需要注意的事项如下。
- 权限列表: 用千列出授权使用的各种数据库操作, 以逗号进行分隔, 如“select. insert.update”。使用'all”表示所有权限, 可授权执行任何操作。
- 数据库名表名: 用千指定授权操作的数据库和表的名称,其中可以使用通配符”*” 。例如, 使用'auth .*”表示授权操作的对象为auth 数据库中的所有表。
- 用户名@来源地址: 用于指定用户名称和允许访问的客户机地址, 即谁能连接、能从哪里连接。来源地址可以是域名、IP 地址, 还可以使用“%“通配符, 表示某个区域或网段内的所有地址, 如'% bdq n .co m"'' 192 . 168 . 1 %”等。
- IDENTIFIED BY : 用千设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略' IDENTIFIED BY”部分,则用户的密码将为空。
mysql> GRANT select ON auth.* TO 'xiaoqi'@'localhost' IDENTIFIED BY'123456';
2. 查看权限
SHOW GRANTS 语句: 专门用来查看数据库用户的授权信息, 通过FOR 子句可指定查看的用户对象(必须与授权时使用的对象名称一致) , 语句格式如下所示。
SHOW GRANTS FOR 用户名@来源地址
执行以下操作可以查看用户dbuser 从主机192.168 .4 .19 访问数据库时的授权信息。
mysql>SHOW GRANTS FOR 'dbuser'@'192.168.4.19';
3. 撤销权限
REVOKE 语句: 用千撤销指定用户的数据库权限, 撤销权限后的用户仍然可以连接到MySQL 服务器, 但将被禁止执行对应的数据库操作, 语句格式如下所示。
REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
执行以下操作可以撤销用户xiaoqi 从本机访问数据库auth 的所有权限。
mysql>REVOKE all ON auth.* FROM 'xiaoqi'@'localhost';
mysql>SHOW GRANTS FOR 'xiaoqi'@'localhost'; //确认已撤销对auth库的权限