一、使用MySQL数据库
1.1 查看数据库结构
分别介绍查看数据库、表结构的相关操作语句:
- 查看当前服务器中的数据库:show databases;
- 查看当前数据库中有哪些表:show tables;
- 查看表的结构:describe table_name;
注意在查看表之前,要确认自己是否在某个database中,可以使用:use database_name切换当前所在数据库的位置。
MySQL数据库的数据文件存放在mysql目录中的data目录下,mysql目录的位置则取决于自己设置的安装位置。在data目录中,每个子目录对应一个database,用于存放表数据。每个table分为三个文件,扩展名为".frm"、".MYD"、".MYI",下面分别介绍这些文件的作用:
.frm:以此为后缀名的文件存放了与表相关的元数据(meta)信息,包括表结构的定义信息等。不论什么引擎,每个表都会有这个文件。
.MYD:是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个".MYD"文件与之对应。
.MYI:是MyISAM存储引擎专用,存放M'y'ISAM表的索引相关信息。对于MyISAM存储来说,可以被缓存的内容主要来源于".MYI"文件中。
另外还有".ibd"和".ibdata"文件,这两种文件是存放Innodb数据。ibdata文件用来使用共享空间存放存储数据,多个表共同使用一个ibdata文件,idb是独享表空间存储方式来存放数据,每个表一个ibd文件。
SQL语言主要由以下几部分组成:
- DDL(Data Definition Language,数据定义语言):用来建立数据库、数据库对象和定义字段,如create、alter、drop。
- DML(Data Manipulation Language,数据操纵语言):用来插入、删除和修改数据库中的数据,如insert、update、delete。
- DQL(Data Query Language,数据查询语言):用来查询数据库中的数据,如select、show。
- DCL(Data Control Language,数据控制语言):用来控制数据库组件的存取许可、存取权限等,如commit、rollback、grant、revoke。
1.2 创建及删除数据库和表
对于数据库的操作都要在数据库操作界面执行,即在"mysql>"行输入操作命令。
1.2.1 创建新的数据库
语法:
mysql>create database 数据库名称;
创建出的数据库中没有任何表,其存储的位置在data目录下,有系统自动生成与数据库同名的文件。
1.2.2 创建新的表
在创建时需要指定创建表的表名,表中需要包含的字段的名称,字段长度(以字节为单位),也可以指定主键字段。
mysql>create table 表名(字段1名称(字段长度),字段2名称(字段长度)......,[primary key(主键名)])
例如创建一个表,里面的字段包含用户名、密码字符串的用户验证表,其中用户名不能为空,长度为16字节,密码字符串默认为空,长度为48字节,设置用户名为主键:
mysql>create table users (user_name(16) not null,user_password(48) default '',primary key(user_name));
注意,在不同的字符集中,汉字占有的字节也不同,所以对于需要填入汉字的字段,要根据字符集设置长度。
1.2.3 删除一个数据表
语法:
mysql>drop table 表名;
1.2.4 删除一个数据库
语法:
mysql>drop database 数据库名;
1.3 管理表中的数据记录
1.3.1 插入数据记录
语法:
mysql>insert into 表名(字段1,字段2......) values(字段1的值,字段2的值......)
如果要插入的数据包含表中所有字段的值,则字段部分可以省略。
1.3.2 查询数据记录
语法:
mysql>select 字段名1,字段名2,...... from 表名 [where 条件表达式]
若要显示一个表中所有字段,则可以用"*"来代替字段名,若要显示所有的数据记录,则可以省略"where 条件表达式"。例如,若要查询一个users表中用户名为"张三"的所有字段的信息,可以使用:
mysql>select * from users where user_name=‘张三’; #这里user_name为表中字段的名称
1.3.3 修改数据记录
语法:
mysql>update 表名 set 字段名1=字段值1,字段名2=字段值2...... where 条件表达式
1.3.4 删除数据记录
语法:
mysql>delete from 表名 where 条件表达式
注意,在执行update、delete语句时,通常都是带where条件,不带条件的update语句和delete语句会修改或删除所有记录的值,是非常危险的操作。
1.4 数据库高级操作
1.4.1 清空表
除了使用delete一条条删除表内的数据之外,还可以使用"truncate"来直接删除整个表,由于是整表删除,所以比delete灵活性较差。语法:
mysql>truncate table 表名;
在删除整个表时,delete和truncate不同的点在于delete在删除时会记录日志(二进制日志),可以凭日志来帮助恢复数据,且数据不会被立刻从磁盘中删除,可以使用"optimize table"命令来重建表并释放未使用的空间或使用其他的数据覆盖当前数据;而truncate不会记录日志,并且会立刻释放被删除数据占用的空间。若表中有自增长的字段,使用delete删除整张表后,后续添加的数据的字段值从原来最大的记录的位置继续自增长,而truncate会重新开始计数。此外,在权限上,使用truncate需要表的drop权限,而使用delete需要表的delete权限。
1.4.2 临时表
该类型的表主要用于保存一些临时数据,临时表只在当前连接可见,可执行增删改查等操作,但连接关闭后,临时表就会被MySQL删除。创建临时表的语法为:
mysql>create temporary table 表名(字段1名称(字段长度),字段2名称(字段长度)......,[primary key(主键名)])
1.4.3 克隆表
克隆表不是直接克隆一个表的所有数据,只是克隆表的结构,包括表的备注、索引、主键、存储引擎等。语法为:
mysql>create table 克隆出的新表名 test 被克隆表名
若要将被克隆的表中的数据再全部放到新表中,可以用"insert into ...... select"方法:
mysql>insert into 克隆出的新表名 select * from 被克隆表名
二、数据库用户授权
MySQL数据库的root用户账号拥有对所有数据库、表的全部权限,频繁使用root账号会给数据库服务器带来一定的安全风险。实际工作中,通常会建立一些低权限的用户,只负责一部分数据库、表的管理和维护操作,甚至可以对查询、修改、删除记录等各种操作做进一步的细化限制,从而将数据库的风险降至最低。
2.1 授予权限
可以使用grant语句授予指定用户指定权限,当用户不存在时,会自动创建该用户,当用户存在时,grant语句用于修改用户信息。语句格式如下:
mysql>grant 权限列表 on 数据库名.表名 to 用户名@来源地址 [identified by '密码']
在语法中,各项所代表的含义如下:
- 权限列表:用于列出授权给指定用户可使用的操作,以逗号分割,如select,insert,update。all表示所有权限。
- 数据库名.表名:用于指定授予的是哪个数据库中数据表的权限,可使用*代表是所有数据库,也可用*代表所有数据表。
- 用户名@来源地址:用于指定mysql的用户的用户名和可以访问的客户端的地址,地址可以是域名、IP、网段,还可以用“%”通配符,表示某个区域或某个网段内的地址,如:"%.fkk.com"、“193.56.55.%”。
- identified by:设置用户连接数据库时使用的密码,可以为空。
2.2 查看权限
语法:
show grants for 用户名@来源地址
不管是什么用户,都会有一个基本的usage的权限,即最低拥有可以切换要查看的数据库的权限。
2.3 撤销权限
用于撤销指定用户的操作权限,但该用户仍然可以连接到数据库。语法:
revoke 权限列表 on 数据库.表名 from 用户名@来源地址