查看所有数据库信息
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| bdqn |
| mysql |
| performance_schema |
| sys |
| zzt |
+--------------------+
7 rows in set (0.00 sec)
查看数据库中的表的信息
#首先进入mysql数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
| users |
+---------------------------+
32 rows in set (0.00 sec)
查看数据库表的结构
mysql> describe users;
+-------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| user_name | char(16) | NO | PRI | NULL | |
| user_passwd | char(48) | YES | | | |
+-------------+----------+------+-----+---------+-------+
2 rows in set (0.00 sec)
SQL语言
●Structured Query Language的缩写,即结构化查询语言
●关系型数据库的标准语言
●用于维护管理数据库
包括数据查询、数据更新、访问控制、对象管理等功能
SQL分类
●DDL:数据定义语言
●DML:数据操纵语言
●DQL:数据查询语言
●DCL:数据控制语言
●可以用于创建数据库对象(如库,表,索引等)
●使用DDL语言新建库,表
创建数据库
mysql> create database auth;
Query OK, 1 row affected (0.00 sec)
创建数据表
mysql> use auth;
Database changed
mysql> create table users(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',PRIMARY KEY (user_name));
Query OK, 0 rows affected (0.02 sec)
删除指定的数据表
mysql> drop table auth.users;
Query OK, 0 rows affected (0.01 sec)
删除指定的数据库
mysql> drop database auth;
Query OK, 0 rows affected (0.00 sec)
DML语句用于对表中的数据进行管理
●INSERT:插入新数据
●UPDATE:更新原有数据
●DELETE:删除不需要的数据
(1)向数据库表中插入新的数据记录
首先我们创建auth库,再创建users表
mysql> create database auth;
Query OK, 1 row affected (0.00 sec)
mysql> use auth;
Database changed
mysql> create table users(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',PRIMARY KEY (user_name));
Query OK, 0 rows affected (0.01 sec)
接下来插入新的数据记录
insert into 表名 (字段1,字段2,…) values (字段1的值,字段2的值,…)
##第一种方法
mysql> insert into users(user_name,user_passwd) values('zhangsan',password('123456'));
Query OK, 1 row affected, 1 warning (0.00 sec)
#第二种方法
mysql> insert into users values('zhangsan',password('123456'));
#注释:如果这条记录包含表中所有字段的值,则插入语句中的指定字段可以省略
(2)修改更新数据表中的数据记录
update 表名 set 字段名1=值1,字段名2=值2 where 条件表达式
#将auth库中users表里lisi的user_password改成123321
mysql> update auth.users set user_passwd=password('123321') where user_name='zhangsan';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql>flush privileges; ####刷新下
(3)MYSQL 5.7版本修改root的命令
mysql>update mysql.user set authentication_string=PASSWORD('password') where User= 'root';
Query OK, 1 row affected, 1 warning(0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql>flush privileges; ####刷新下
(4)在数据表中删除指定数据记录
delete from 表名 where 条件表达式
##在users表中插入数据lisi
mysql> insert into users(user_name,user_passwd) values('lisi',password('123456'));
Query OK, 1 row affected, 1 warning (0.01 sec)
#删除lisi数据
mysql> delete from auth.users where user_name='lisi'
-> ;
Query OK, 1 row affected (0.01 sec)
DQL是数据查询语句,只有SELECT
用于从数据表中查找符合条件的数据记录
查询时可不指定条件
SELECT 字段名1,字段名2… FROM 表名
##查看数据库auth中users表中所有的数据,这边用通配符*表示所有
mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
(1)从数据表中查找符合条件的数据记录
#查看数据库auth的users表中zhangsan数据
mysql> select user_name,user_passwd from auth.users where user_name='zhangsan';
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
DCL语句设置用户权限(用户不存在时,则新建用户)
GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY ‘密码’ ]
(1)给小齐授权可查看auth库的所有内容,登录密码为123456
mysql> grant select on auth.* to 'xiaoqi'@'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@localhost ~]# mysql -u xiaoqi -p
Enter password:
Welcome to the MySQL monitor.
mysql> use auth
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> select * from auth.users
-> ;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *437F1809645E0A92DAB553503D2FE21DB91270FD |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
可以看到
接下来使用未授权的删除试试
mysql> mysql> delete from auth.users where user_name='zhangsan';
ERROR 1142 (42000): DELETE command denied to user 'xiaoqi'@'localhost' for table 'users'
#可以看到系统提示没有权限
(2)用root登录,创建qhdx数据库,授权20.0.0.1的主机连接,用户名为qq,密码为123456,并允许在qhdx库中做任何操作
mysql> create database qhdx;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on qhdx.* to 'qq'@'20.0.0.1' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
查看用户授权
mysql> show grants for 'qq'@'20.0.0.1';
+-----------------------------------------------------+
| Grants for qq@20.0.0.1 |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO 'qq'@'20.0.0.1' |
| GRANT ALL PRIVILEGES ON "qhdx".* TO 'qq'@'20.0.0.1' |
+-----------------------------------------------------+
2 rows in set (0.00 sec)
(3)撤销用户的权限
revoke 权限列表 on 数据库名.表名 from 用户名@来源地址
mysql> revoke all on qhdx.* from 'qq'@'20.0.0.1';
Query OK, 0 rows affected (0.01 sec)
mysql> show grants for 'qq'@'20.0.0.1'; 查看用户的权限
+---------------------------------------+
| Grants for qq@20.0.0.1 |
+---------------------------------------+
| GRANT USAGE ON *.* TO 'qq'@'20.0.0.1' |
+---------------------------------------+
1 row in set (0.00 sec)
#这里我们看到没有权限操作了
●清空一个数据表就是删除这个表内的所有数据。前面的小节已经学习过DELETE FROM语句,可以删除表内的数据,
●除此之外还可以使用TRUNCATE TABLE语句实现清空表内记录。DELETE FROM语句可以使用WHERE子句对删除的结果集进行过滤选择,这样更方便、更灵活。TRUNCATE TABLE 语句是删除表中所有记录数据,没法定制,灵活性上稍差
首先准备以下操作需要用的表
#首先进入qhdx库中建立一个ky表
mysql> use qhdx
mysql> create table ky(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT'',level CHAR(16) NOT NULL,PRIMARY KEY(user_name));
Query OK, 0 rows affected (0.01 sec)
#然后在ky表中写入数据
mysql> insert into ky values('lisi', password('123456'),10);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> insert into ky values('lisi2', password('123456'),20);
Query OK, 1 row affected, 1 warning (0.01 sec)
mysql> insert into ky values('lisi3', password('123456'),46);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into ky values('lisi4', password('123456'),45);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into ky values('lisi5', password('123456'),49);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into ky values('lisi6', password('123456'),72);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into ky values('lisi7', password('123456'),83);
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> insert into ky values('lisi8', password('123456'),99);
(1)使用DELETE FROM语句过滤删除
mysql> delete from qhdx.ky where level>=45;
Query OK, 5 rows affected (0.01 sec)
mysql> select * from qhdx.ky; 查看ky的数据
+-----------+-------------------------------------------+-------+
| user_name | user_passwd | level |
+-----------+-------------------------------------------+-------+
| lisi | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10 |
| lisi2 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 20 |
+-----------+-------------------------------------------+-------+
2 rows in set (0.00 sec)
#这里看到level大于等于45的数据全都被删除了
(2)TRUNCATE TABLE语句实现清空表内记录
mysql> truncate table ky;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from qhdx.ky;
Empty set (0.00 sec) ###信息提示无数据
●MySQL的临时表,顾名思义,就是临时建立的表,并不会长期存在,主要用于保存一些临时数据。临时表有个特性,
就是只在当前连接可见,当前连接下可执行增删改查等操作,当连接被关闭后,临时表就会被MySQL删除,相关的资源也会被释放。
下面创建临时表mytmp,然后插入数据,之后断开当前连接,最后重新连到MySQL查看临时是否还存在
(1)创建临时表mytmp,插入数据,之后退出数据库,重新登录,查看一下是否存在
#查看你一下你要创建的表是否存在
mysql> select * from mytmp;
ERROR 1146 (42S02): Table 'qhdx.mytmp' doesn't exist
#这里显示不存在,接下来我们开始创建
#创建表的结构
mysql> CREATE TEMPORARY TABLE `mytmp` (
-> `id` int(10) NOT NULL AUTO_INCREMENT,
-> `NAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
-> `level` int(10) NOT NULL,
-> PRIMARY KEY (id))
-> ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)
##############解释############
AUTO_INCREMENT:自增 比如1 2 3
varchar(32) :32指的是给32个空间
NOT NULL :不能为空
PRIMARY KEY :主键连接指id
ENGINE=InnoDB :使用InnoDB引擎
####################################
#往表中写入数据
mysql> insert into mytmp(name,level) values('aa',10);
Query OK, 1 row affected (0.00 sec)
#查看表的数据,看到已经写入了
mysql> select * from mytmp;
+----+------+-------+
| id | NAME | level |
+----+------+-------+
| 1 | aa | 10 |
+----+------+-------+
1 row in set (0.01 sec)
接下来退出重新登录查看
mysql> exit
Bye
[root@localhost ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.
mysql> use qhdx;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_qhdx |
+----------------+
| ky |
+----------------+
1 row in set (0.00 sec)
我们创建的mytmp表消失了,实验结束
●在MYSQL开发和维护过程中,经常会有原样拷贝某个数据表的需求,怎样能快速完整的拷贝数据呢?
(1)使用like克隆
like可以一摸一样复制,包括表备注,索引,存储,引擎等,但不会复制源表内数据记录
#首先我们查看源表数据与结构
mysql> use qhdx
#先查看表信息
mysql> show tables;
+----------------+
| Tables_in_qhdx |
+----------------+
| ky |
| tmp |
| zz |
+----------------+
3 rows in set (0.00 sec)
#查看我们要克隆表的数据
mysql> select * from zz;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
#查看我们要克隆表的结构
mysql> show create table zz \G;
*************************** 1. row ***************************
Table: zz
Create Table: CREATE TABLE "zz" (
"user_name" char(16) NOT NULL,
"user_passwd" char(48) DEFAULT '',
PRIMARY KEY ("user_name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ERROR:
No query specified
接下来开始克隆
#用like,复制zz表生成test表
mysql> create table test like zz;
Query OK, 0 rows affected (0.01 sec)
#生成后查看test表结构,与zz表对比,一摸一样
mysql> show create table test \G;
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE "test" (
"user_name" char(16) NOT NULL,
"user_passwd" char(48) DEFAULT '',
PRIMARY KEY ("user_name")
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
#查看一下test表数据为空
mysql> select * from test;
Empty set (0.00 sec)
#这条命令相对与管道符号,查看zz表数据,添加给test表
mysql> insert into test select * from zz;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0
#添加完后再查看test表数据,一摸一样都过来了
mysql> select * from test;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)