一、SQL 语句概述
SQL 语言是(Structured Query Language 的缩写,即结构化查询语言),是关系型数据库 的标准语言,用于维护管理数据库,如数据查询、数据更新、访问控制、对象管理等功能。
SQL 分类:
- DDL:数据定义语言,用于增删改数据库的对象,如库、表、索引等
- DML:数据操纵语言,用于对表中的数据进行增删改
- DQL:数据查询语言,用于数据查询
- DCL:数据控制语言
语言 | 中文名称 | 作用 | 主要命令 |
DDL | 数据定义语言 | 增删改–>库、表、索引 | create,drop |
DML | 数据操纵语言 | 增删改–>数据 | insert、update、delete |
DQL | 数据查询语言 | 查询数据 | select |
DCL | 数据控制语言 |
二、MySQL 数据库表的管理操作
注:大部分命令不区分大小写
1、查看数据库结构
查看数据库列表信息
格式:show databases;
示例:
[root@mysql-master ~]# netstat -utpln |grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 13123/mysqld
[root@mysql-master ~]# mysql -u root -p
Enter password:123123
mysql>show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.01 sec)
查看数据库中的数据表信息
格式:
use 数据库名;
show tables;
示例:
mysql> use mysql;
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
......
显示数据表的结构(字段)
格式:
describe [数据库.]表名;
示例:
mysql> describe mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
.....
mysql> use mysql;
Database changed
mysql> describe user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(16) | NO | PRI | | |
2、DDL 语句操作
数据定义语言,用于增删改数据库的对象,如库、表、索引等
create 创建新库、创建新表
格式:
create database 数据库名;
create table 表名 (定义字段);
示例:
mysql> create database auth; //新建一个名为auth的数据库
Query OK, 1 row affected (0.01 sec)
mysql> use auth; //使用auth这个数据库
Database changed
mysql> create table users (user_name char(20) not null,user_passwd char(30) default '',primary key(user_name)); //在auth库中,创建名为users的表,表内俩个字段为(user_name 最多20个字节 不能为空,user_passwd 最多为30个字节 默认为空,索引关键字 user_name)
Query OK, 0 rows affected (0.05 sec)
drop 删除库、删除表
格式:
drop table [数据库名.]表名;
drop database 数据库名;
注意:删除时先删表,再删库
示例:
mysql> drop table auth.users; //删除auth库中的users表
Query OK, 0 rows affected (0.00 sec)
mysql> drop database auth; //删除auth数据库
Query OK, 0 rows affected (0.00 sec)
3、DML 语句操作
数据操纵语言,用于对表中的数据进行增删改
insert 插入新数据
格式:
insert into 表名(字段 1,字段 2,……) values(‘字段 1 的值’,’字段 2 的值’……);
示例:
mysql> use auth;
Database changed
mysql> desc users;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name | char(20) | NO | PRI | NULL | |
| user_passwd | char(30) | YES | | | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into users(user_name,user_passwd) values ('zhangsan',password('123123')); //在users表的(字段user_name,字段user_passwd)中添加('zhangsan',调用函数password(‘123123’));
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> insert into users values ('lisi',password('123456')); //字段内容可省略
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> select * from users;
+-----------+--------------------------------+
| user_name | user_passwd |
+-----------+--------------------------------+
| lisi | *6BB4837EB74329105EE4568DDA7DC |
| zhangsan | *E56A114692FE0DE073F9A1DD68A00 |
+-----------+--------------------------------+
2 rows in set (0.00 sec)
update 更改原有数据
格式:
update 表名 set 字段名 1=值 1 [,字段 2=值 2] where 条件表达式;
示例:
mysql> update auth.users set user_passwd=password('') where user_name='lisi'; //清空lisi的密码
Query OK, 0 rows affected (0.52 sec)
Rows matched: 1 Changed: 0 Warnings: 0
mysql> select * from users;
+-----------+--------------------------------+
| user_name | user_passwd |
+-----------+--------------------------------+
| lisi | |
| zhangsan | *E56A114692FE0DE073F9A1DD68A00 |
+-----------+--------------------------------+
2 rows in set (0.00 sec)
mysql> update mysql.user set password=password('123123') where user='root'; //修改mysql登录root用户密码为123123
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4 Changed: 0 Warnings: 0
mysql> flush privileges; //刷新权限
Query OK, 0 rows affected (0.00 sec)
delete 删除不需要的数据
格式:
delete from 表名 where 条件表达式;
示例:
mysql> delete from auth.users where user_name='lisi'; //在auth库中的users表中,删除用户名为lisi的记录
Query OK, 1 row affected (0.01 sec)
mysql> select * from users;
+-----------+--------------------------------+
| user_name | user_passwd |
+-----------+--------------------------------+
| zhangsan | *E56A114692FE0DE073F9A1DD68A00 |
+-----------+--------------------------------+
1 row in set (0.00 sec)
mysql> delete from mysql.user where user=''; //在mysql库中的user表中,删除空的用户名的记录
Query OK, 2 rows affected (0.00 sec)
4、DQL 语句操作
数据查询语言,用于数据查询
select 查询语句
格式: select 字段名 1,字段名 2,……from 表名;
select 字段名 1,字段名 2,……from 表名 where 条件表达式;
示例:
mysql> select * from auth.users;
+-----------+--------------------------------+
| user_name | user_passwd |
+-----------+--------------------------------+
| zhangsan | *E56A114692FE0DE073F9A1DD68A00 |
+-----------+--------------------------------+
1 row in set (0.00 sec)
mysql> select user_name from auth.users;
+-----------+
| user_name |
+-----------+
| zhangsan |
+-----------+
1 row in set (0.00 sec)
mysql> select * from auth.users where user_name='zhangsan';
+-----------+--------------------------------+
| user_name | user_passwd |
+-----------+--------------------------------+
| zhangsan | *E56A114692FE0DE073F9A1DD68A00 |
+-----------+--------------------------------+
1 row in set (0.00 sec)
三、案例:建立公司 IT 运营部工资数据表
需求描述:为公司建立员工工资数据库 imployee_salary,在 imployee_salary 数据库中,建立IT_salary数据表,以保存 IT 运营部员工的工资信息,如下表所示:
岗位类别 | 姓名 | 年龄 | 员工ID | 学历 | 年限 | 薪资 |
网络工程师 | 孙空武 | 27 | 011 | 本科 | 3 | 4800 |
Windows工程师 | 蓝凌 | 19 | 012 | 中专 | 2 | 3500 |
Linux工程师 | 姜纹 | 32 | 013 | 本科 | 8 | 15000 |
Java软件工程师 | 关园 | 38 | 014 | 大专 | 10 | 16000 |
硬件驱动工程师 | 罗中昆 | 29 | 015 | 大专 | 9 | 16500 |
建立数据库imployee_salary
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
mysql> create database imployee_salary;
Query OK, 1 row affected (0.00 sec)
mysql> use imployee_salary;
Database changed
建立数据表
mysql> create table IT_salary (岗位类别 char(20) not null,姓名 char(20) not null,年龄 int,员工ID int not null,学历 char(6),年限 int,薪资 int not null, primary key (员工ID));
#int 数字类型、char 字符串类型、not null 不能为空、char()指定最多字节个数、primary key()指定索引字段
Query OK, 0 rows affected (0.13 sec)
mysql> desc IT_salary;
+--------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+---------+-------+
| 岗位类别 | char(20) | NO | | NULL | |
| 姓名 | char(20) | NO | | NULL | |
| 年龄 | int(11) | YES | | NULL | |
| 员工ID | int(11) | NO | PRI | NULL | |
| 学历 | char(6) | YES | | NULL | |
| 年限 | int(11) | YES | | NULL | |
| 薪资 | int(11) | NO | | NULL | |
+--------------+----------+------+-----+---------+-------+
7 rows in set (0.00 sec)
将 IT 运营部的员工工资信息插入到
mysql> insert into IT_salary (岗位类别,姓名,年龄,员工ID,学历,年限,薪资) values ('网络工程师','孙空武',27,011,'本科',3,4800);
Query OK, 1 row affected (0.01 sec)
mysql> insert into IT_salary(岗位类别,姓名,年龄,员工ID,学历,年限,薪资) values('Windows 工程师','蓝 凌 ',19,012,'中专',2,3500);
Query OK, 1 row affected (0.00 sec)
mysql> insert into IT_salary(岗位类别,姓名,年龄,员工ID,学历,年限,薪资) values('Linux 工程师','姜纹 ',32,013,'本科',8,15000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into IT_salary(岗位类别,姓名,年龄,员工ID,学历,年限,薪资) values('Java 软件工程师','关园', 38,014,'大专',10,16000);
Query OK, 1 row affected (0.00 sec)
mysql> insert into IT_salary(岗位类别,姓名,年龄,员工ID,学历,年限,薪资) values('硬件驱动工程师','罗 中 昆',29,015,'大专',9,16500);
Query OK, 1 row affected (0.01 sec)
注意:创建表时,字段不加 ‘’ 号,插入数据 values值时,字符串加 ‘’ ,数字不加 ‘’号
查看核对信息
mysql> select * from IT_salary;
+-----------------------+------------+--------+----------+--------+--------+--------+
| 岗位类别 | 姓名 | 年龄 | 员工ID | 学历 | 年限 | 薪资 |
+-----------------------+------------+--------+----------+--------+--------+--------+
| 网络工程师 | 孙空武 | 27 | 11 | 本科 | 3 | 4800 |
| Windows 工程师 | 蓝 凌 | 19 | 12 | 中专 | 2 | 3500 |
| Linux 工程师 | 姜纹 | 32 | 13 | 本科 | 8 | 15000 |
| Java 软件工程师 | 关 园 | 38 | 14 | 大专 | 10 | 16000 |
| 硬件驱动工程师 | 罗 中昆 | 29 | 15 | 大专 | 9 | 16500 |
+-----------------------+------------+--------+----------+--------+--------+--------+
5 rows in set (0.00 sec)
四、用户权限设置
1、设置用户权限(用户不存在时,则新建用户)
mysql> grant all on *.* to 'root'@'192.168.1.%' identified by '123456';
all: 所有权限
*.*:所有库所有表
Query OK, 0 rows affected (0.00 sec)
mysql> grant select on imployee_salary.* to 'linuxyao'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@mysql-master ~]# mysql -ulinuxyao -p123456
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.20-log Source distribution
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> delete from imployee_salary.IT_salary where 姓名='关园';
ERROR 1142 (42000): DELETE command denied to user 'linuxyao'@'localhost' for table 'IT_salary'
mysql> select * from imployee_salary.IT_salary;
+-----------------------+------------+--------+----------+--------+--------+--------+
| 岗位类别 | 姓名 | 年龄 | 员工ID | 学历 | 年限 | 薪资 |
+-----------------------+------------+--------+----------+--------+--------+--------+
| 网络工程师 | 孙空武 | 27 | 11 | 本科 | 3 | 4800 |
| Windows 工程师 | 蓝 凌 | 19 | 12 | 中专 | 2 | 3500 |
| Linux 工程师 | 姜纹 | 32 | 13 | 本科 | 8 | 15000 |
| Java 软件工程师 | 关 园 | 38 | 14 | 大专 | 10 | 16000 |
| 硬件驱动工程师 | 罗 中昆 | 29 | 15 | 大专 | 9 | 16500 |
+-----------------------+------------+--------+----------+--------+--------+--------+
5 rows in set (0.00 sec)
2、查看用户权限
mysql> show grants;
mysql> show grants for 'linuxyao'@'localhost';
mysql> show grants for 'linuxyao'@'192.168.0.85';
3、撤销用户权限
mysql> revoke select on imployee_salary.* from 'linuxyao'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
远程登录
mysql> grant all on *.* to 'linuxyao'@'%' identified by '123123';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
若宿主机连接报错,查看权限设置是否正确,可尝试如下命令:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'amber'@'%' IDENTIFIED BY '123123' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;