文章目录
- 一、数据库基本操作
- 1.登录Mysql服务器
- 2.访问MySQL操作语句
- 3.退出MySQL数据库
- 二、使用MySQL数据库
- 1.查看当前数据库中的库
- 2.查看当前使用库中包含的表
- 3.查看表结构
- 三、SQL语句概述
- 1.SQL语言
- 2.SQL分类
- 3.DDL——数据定义语言
- 3.1 创建新库
- 3.2 创建新表
- 3.3 给表中加入新字段
- 3.4 删除数据库
- 3.5 删除数据表
- 4.DML——数据操纵语言
- 4.1 插入数据记录
- 4.2 修改数据记录
- 4.3 删除数据记录
- 5.DQL——数据查询语言
- 6.DCL——数据控制语言
- 6.1 设置用户权限
- 6.2 查看用户权限
- 6.3 撤销用户权限
一、数据库基本操作
1.登录Mysql服务器
MySQL数据库的默认管理员是root用户,以root用户登录本机的MySQL数据库,可执行以下操作
[root@server1 ~]# mysql -u root -p #用root用户登录
Enter password: #输入mysql的登录密码
2.访问MySQL操作语句
mysql> show databases; #查看数据库信息
3.退出MySQL数据库
mysql> exit
Bye
二、使用MySQL数据库
1.查看当前数据库中的库
show databases 语句:用于查看当前MySQL服务器中包含的库。初始化后的MySQL服务器,默认建立了四个库:sys、mysql、information_schema和performance_schema(其中mysql库中包含了用户认证相关的表)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2.查看当前使用库中包含的表
SHOW TABLES 语句:用于查看当前所在的库中包含的表。在此操作之前,需要先使用USE语句切换到所使用的库。
mysql> use mysql #切换到这个库
Database changed
mysql> show tables; ##查看当前库中包含的表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
........ ##以下省略 ..........
| user |
+---------------------------+
MySQL数据库文件存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。每一个数据对应三个文件,后缀名分别为,".frm",“myd”,".myi"。当然也有少数以opt、csm、csv、ibd结尾的。
3.查看表结构
DESCRIBE 语句:用于显示表的结构,即组成表的个字段(列)的信息。需要制定"库名.表名"作为参数;若只指定表明参数,则需要通过USE语句切换到指定目标库。
执行以下操作可以查看mysql库中的user表的结构,与直接执行“DESCRIBE mysql.user;”语句效果相同
mysql> use mysql
Database changed
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec) ## 中间省略
三、SQL语句概述
1.SQL语言
- Structured Query Language的缩写,即结构化查询语言
- 关系型数据库的标准语言
- 用于维护管理数据库
- 包括数据库查询、数据更新、访问控制、对象管理等功能
2.SQL分类
- DDL:数据定义语言
- DML:数据操纵语言
- DQL:数据查询语言
- DCL:数据控制语言
3.DDL——数据定义语言
DDL(数据定义语言):用来建立数据库、数据库对象和定义字段,如CREATE、ALTER、DROP
3.1 创建新库
CREATE DAREBASE 语句:用于创建一个新的库,需要指定数据库名称作为参数,如下:
mysql> create database a; #创建a库
Query OK, 1 row affected (0.00 sec)
刚创建的数据库时空的,其中不包含任何表,在/usr/local/mysql/data目录下会自动生产一个与新建的库名相同的文件夹
3.2 创建新表
CREATE TABLE语句:用于在当前库中创建新的表,需要指定数据表名作为参数,并定义该表格所使用的各字段。
mysql> use a; # 跳转到a库
mysql> create table a (user_name char(16) NOT NULL,user_passwd char(48) DEFAULT '',PRIMARY KEY(user_name)); #添加a数据表
mysql> describe a; #查看a表中的值
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name | char(16) | NO | PRI | NULL | |
| user_passwd | char(48) | YES | | | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.02 sec)
a表中值表示,“用户名”为不超过16个字符的字符串,且不能为空;
“密码”为不超过48个字符的字符串(插入记录时使用MySQL的函数加密),默认值为空字串,PRIMARY 语句设置主键字段名。
3.3 给表中加入新字段
mysql> use a; #进入a库
mysql> create table nb (id int(10) auto_increment primary key, age int(3) not null, name varchar(128) not null, vlaue decimal(10)); #向nb表中添加字段
Query OK, 0 rows affected (0.01 sec)
mysql> desc nb;
+-------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(128) | NO | | NULL | |
| vlaue | decimal(10,0) | YES | | NULL | |
+-------+---------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> alter table nb add column number int(3); #向nb表中添加字段
mysql> desc nb;
+--------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| age | int(3) | NO | | NULL | |
| name | varchar(128) | NO | | NULL | |
| vlaue | decimal(10,0) | YES | | NULL | |
| number | int(3) | YES | | NULL | |
+--------+---------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
3.4 删除数据库
DROP DATABASE 语句:用于删除指定的库,需要指定库名作为参数。如:执行以下操作,可删除名为abc的库
mysql> drop database a; #删除a库
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; #查看库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
3.5 删除数据表
DROP TABLE 语句:用于删除库中的表,需要指定“库名.表名”作为参数;若只指定表名参数,则需要通过执行USE语句切换到目标库。如:执行以下操作可以删除名为zbc的数据表
mysql> drop table nb; #删除a库中的nb数据表
Query OK, 0 rows affected (0.00 sec)
4.DML——数据操纵语言
DML(数据操纵语言):用来插入、删除和修改数据库中的数据,如INSERT、UPDATE、DELETE
4.1 插入数据记录
INSERT INTO语句:用于向表中插入新的数据记录
mysql> create database kk; #创建数据库kk
mysql> use kk; #进入kk数据库
mysql> create table fa (user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT '',PRIMARY KEY(user_name)); #创建fa数据表
#在表中插入数据,按记录指定插入,加了password(),显示的就是密文
mysql> insert into fa(user_name,user_passwd)values('lisi',PASSWORD('123456'));
#在表中插入数据 ,按顺序插入,加了password(),显示的就是密文
mysql> insert into fa values('zhangsan',PASSWORD('123321'));
#在表中插入数据,不加password(),显示的是明文
mysql> insert into fa(user_name,user_passwd)values('qy','123456');
4.2 修改数据记录
UPDATE 语句:用于修改、更新表中的数据记录。
语句格式如下:
- UPDATE 表明 SET 字段名 1=字段值 1[,字段名 2=字段值 2] WHERE 条件表达式
结果:
- 修改 fa表中用户名为“lisi”的记录,将密码字串设为空值。验证记录内容可以发现lisi用户的密码串值以便为空白
mysql> update fa set user_passwd='' where user_name='lisi';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from fa;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | |
| qy | 123456 |
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
4.3 删除数据记录
DELETE语句: 用于删除表中指定的数据记录。
语句格式:
- DELETE FROM 表明 WHERE 条件表达式
结果:
- 删除fa表中用户名为“lisi”的数据记录,验证记录内容可以发现“lisi”用户的数据记录已经消失
mysql> delete from fa where user_name='lisi';
Query OK, 1 row affected (0.00 sec)
mysql> select * from fa;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| qy | 123456 |
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
5.DQL——数据查询语言
DQL(数据查询语言):用来查询数据库中的数据,如SELECT
表示所有字段时,可以使用通配符 * ,若要显示所有的数据记录则可以省略where条件子句。
如:执行以下操作会显示表中所有记录,但因加了PASSWORD(),密码字符串已加密,因此不会直接显示出实际的密码内容
mysql> select * from fa; 查看fa数据表
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| qy | 123456 |
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
当需要特定的的条件查找记录时,where条件子句则是必不可少的。如:查找 lisi 的记录,显示用户名和密码字段的信息,可做以下操作
mysql> select * from fa where user_name='lisi';
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
6.DCL——数据控制语言
DCL(数据控制语言):用来控制数据库组件的存取许可、存取权限等,如COMMIT、ROLLBACK、GRANT、REVOKE
DCL语句设置用户权限(用户不存在时,则新建用户)
格式:
GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [IDENTIFIEDBY‘密码’]
6.1 设置用户权限
#给xiao用户授权可以查看kk库中的表,当xiao用户不存在时,就自动新建用户,设置密码为123456
mysql> grant select on kk.* to 'xiao'@'localhost' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges; #刷新
Query OK, 0 rows affected (0.00 sec)
mysql> exit #退出
Bye
[root@server1 ~]# mysql -u xiao -p #使用xiao用户登录数据库
Enter password: #输入刚刚设置的密码 '123456'
mysql> select * from kk.fa; #查看kk数据库中的fa数据表信息
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| qy | 123456 |
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
若想设置用户(或新建用户)获得所有权限可以改为all
#把select 改成 all,这样此用户就可获得对kk库的所有权限
mysql> grant all on kk.* to 'xiao'@'localhost' identified by '123456';
6.2 查看用户权限
格式:
SHOW GRANTS for 用户名@来源地址;
mysql> show grants for xiao@localhost;
+----------------------------------------------+
| Grants for xiao@localhost |
+----------------------------------------------+
| GRANT USAGE ON *.* TO 'xiao'@'localhost' |
| GRANT SELECT ON "kk".* TO 'xiao'@'localhost' |
+----------------------------------------------+
2 rows in set (0.00 sec)
6.3 撤销用户权限
格式:
REMOVE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
注:撤销用户权限必须是使用root最高权限登录才可以撤销
mysql> revoke select on kk.* from xiao@localhost; #撤销xiao用户的权限
mysql> show grants for xiao@localhost; #查看被撤销xiao用户的权限
+--------------------------------------------+
| Grants for xiao@localhost |
+--------------------------------------------+
| GRANT USAGE ON *.* TO 'xiao'@'localhost' |
+--------------------------------------------+
1 row in set (0.01 sec)