目录
一、访问Mysql数据库
二、查看数据库结构
1、查看当前MySQL服务器的所有数据库
2、查看当前数据库中包含的表
3、查看表的结构
3.1、查看表的基本结构
3.2、获取数据表的结构、索引等信息
4、SQL语言分类
5、创建及删除库和表
5.1、创建新的库
5.2、常用的数据类型
5.3、创建新的表
5.4、删除一个数据表
5.5、删除一个库
6、插入数据记录
7、查询数据记录
8、修改数据记录
9、删除数据记录
10、克隆数据表
三、忘记root密码,操作方法
一、访问Mysql数据库
方法一:可直接登录,不需要交互,但是密码明文,不安全
[root@zwb ~]# mysql -u root -p123123 或者 mysql -uroot -p123123
................
mysql> quit或者exit ### 退出
Bye
方法二:交互形式完成登录,密码不可见
[root@zwb ~]# mysql -u root -p
Enter password: ## 输入密码
................
mysql> quit或者exit
注:每一条MYSQL操作语句以分号“;”表示结束,输入时可以不区分大小写,但习惯上MYSQL语句中的关键字使用大写。
二、查看数据库结构
1、查看当前MySQL服务器的所有数据库
show databases; 语句:查看当前MySQL服务器中的数据库。初始化的mysql服务器有四个默认数据库。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2、查看当前数据库中包含的表
①use 数据库名; 先确定查询的数据库
②show tables; 查看当前数据库中包含的表。
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 |
+---------------------------+
31 rows in set (0.00 sec)
编译安装的mysql数据库的数据文件都存放在/usr/local/mysql/data目录下,每个数据库对应一个子目录,用于存储数据表文件。
3、查看表的结构
3.1、查看表的基本结构
describe语句:用于显示表的结构,即组成表的各字段(列)的信息。
①先使用(use 数据库名;)再使用(describe 表名;)来进行查看表的结构
②直接使用(describe 数据库.表名 )来进行查询表结构
方法一:
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
mysql> describe user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
方法二:
mysql> describe mysql.user;
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
3.2、获取数据表的结构、索引等信息
show create table 表名; 语句:获取数据表的结构、索引等详细信息
mysql> show create table member;
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| member | CREATE TABLE "member" (
"id" int(10) DEFAULT NULL,
"name" varchar(10) DEFAULT NULL,
"cardid" varchar(18) DEFAULT NULL,
"phone" varchar(11) DEFAULT NULL,
"address" varchar(50) DEFAULT NULL,
"remark" text
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4、SQL语言分类
DDL:数据定义语言,用于创建数据库对象,如库、表、索引等。如:create、alter、drop
DML:数据操纵语言,用于对表中的数据进行管理。如:insert、update、delete
DQL:数据查询语言,用于从数据表中查找符合条件的数据记录。如:select
DCL:数据控制语言,用于设置或者更改数据库用户或角色权限。如:commit、rollback、grant
5、创建及删除库和表
5.1、创建新的库
create database 库名;语句:用于创建一个新的库
mysql> create database AAA; ### 创建数据库AAA
mysql> use AAA ### 使用AAA数据库
Database changed
mysql> SHOW tables; ### 查看数据库内的表
Empty set (0.00 sec) ### 新创建的库为空的。无表
5.2、常用的数据类型
1、int : 整型(定义整数类型的数据 )
2、float :单精度浮点4字节32位 准确表示到小数点后六位
3、double:双精度浮点8字节64位 双精度支持存储的数字小数位更多
4、char:固定长度的字符类型(定义字符类型数据 )
例如:char(4) 0001,char(10)如果存入数据的实际长度比指定长度要小,会补空格至指定长度,如果存入的数据的实际长度大于指定长度,低版本会被截取,高版本会报错
截取2和截断2区别:
原数据:.688 .691
截取: .69 .69 进行四舍五入
截断: .68 .69 不进行四舍五入
5、varchar:可变长度的字符类型 varchar(设置上限)
6、text:文本
7、image:图片
8、decimal(5,2):表示5个有效长度数字,小数点后面有2位
5.3、创建新的表
create table 表名;语句:用于在当前的数据库创建新的表。
语法格式:create table 表名(字段1 名称 类型,字段2 名称 类型,······,primary key(主键名))
需求:创建一张表,名为tongxunlu。包含:序号、姓名、手机号及设置主键
mysql> use AAA; ## 使用数据库AAA
Database changed
mysql> create table tongxunlu(序号 int(3) primary key,姓名 varchar(20),手机号 int(15));
注释:
create table tongxunlu ### 创建表
序号 int(3) primary key ### 字段1为“序号”,类型为“int”,长度为“3”,设置为主键
(primary key)
姓名 varchar(20) ### 字段2为姓名 类型为“varchar”,长度为“20”
.....................
mysql> describe tongxunlu;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| 序号 | int(3) | NO | PRI | NULL | |
| 姓名 | varchar(20) | YES | | NULL | |
| 手机号 | int(15) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
5.4、删除一个数据表
drop 表名;语句:用于删除数据库中的表,需要指定“数据库名.表名”作为参数;若只指定表名最为参数,则先用通过use切换到目标数据库。
mysql> show tables; ## 查看表
+---------------+
| Tables_in_AAA |
+---------------+
| lili |
| tongxunlu |
+---------------+
2 rows in set (0.00 sec)
mysql> drop table AAA.lili; ## 删除表,指定数据库.表名作为参数
Query OK, 0 rows affected (0.00 sec)
mysql> show tables; ## 检验结果
+---------------+
| Tables_in_AAA |
+---------------+
| tongxunlu |
+---------------+
1 row in set (0.00 sec)
5.5、删除一个库
drop database 数据库名;语句:用于删除指定的数据库。
mysql> show databases; ### 查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| AAA |
| bbb |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> drop database bbb; ### 删除数据库bbb
Query OK, 0 rows affected (0.00 sec)
mysql> show databases; ### 查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| AAA |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
6、插入数据记录
语法格式:
INSERT INTO 表名(字段1,字段2[,...]) VALUES (字段1的值,字段2的值,...);
mysql> use AAA; ## 切换到数据库AAA
Database changed
mysql> SHOW tables; ## 查看库中的表
+---------------+
| Tables_in_AAA |
+---------------+
| tongxunlu |
+---------------+
1 row in set (0.00 sec)
mysql> desc tongxunlu; ## 查看表的结构
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| 序号 | int(3) | NO | PRI | NULL | |
| 姓名 | varchar(20) | YES | | NULL | |
| 手机号 | int(15) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
mysql> insert into tongxunlu values(1,'张一','188888888'); ## 向表中插入内容
Query OK, 1 row affected (0.00 sec)
mysql> insert into tongxunlu values(2,'张二','1888888888');
Query OK, 1 row affected (0.01 sec)
mysql> select * from tongxunlu; ## 查看表中的内容
+--------+--------+------------+
| 序号 | 姓名 | 手机号 |
+--------+--------+------------+
| 1 | 张一 | 188888888 |
| 2 | 张二 | 1888888888 |
+--------+--------+------------+
2 rows in set (0.00 sec)
7、查询数据记录
语法格式:
SELECT 字段名1,字段名2[,...] FROM 表名[WHERE 条件表达式];
mysql> select * from tongxunlu;
+--------+--------+------------+
| 序号 | 姓名 | 手机号 |
+--------+--------+------------+
| 1 | 张一 | 188888888 |
| 2 | 张二 | 1888888888 |
+--------+--------+------------+
2 rows in set (0.00 sec)
8、修改数据记录
update语句:用于修改、更新表中的数据记录。
语法格式:update 表名 set 字段名1=字段值1[,字段名2=字段值2] where 条件表达式
mysql> show databases; ## 查看MySQL服务器上所以数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| AAA |
| class |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> use AAA; ## 切换到数据库AAA
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; ## 查看数据库AAA内的所有表
+---------------+
| Tables_in_AAA |
+---------------+
| tongxunlu |
+---------------+
1 row in set (0.00 sec)
mysql> select * from tongxunlu; ## 查询tongxunlu这张表的内容
+--------+--------+------------+
| 序号 | 姓名 | 手机号 |
+--------+--------+------------+
| 1 | 张一 | 188888888 |
| 2 | 张二 | 1888888888 |
+--------+--------+------------+
2 rows in set (0.00 sec)
mysql> update tongxunlu set 姓名='张三' where 序号=1; ##把序号为1的那行姓名修改为张三(字
段名不需要加单引号,字段值需要加)
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from tongxunlu; ## 查看,验证操作
+--------+--------+------------+
| 序号 | 姓名 | 手机号 |
+--------+--------+------------+
| 1 | 张三 | 188888888 |
| 2 | 张二 | 1888888888 |
+--------+--------+------------+
2 rows in set (0.00 sec)
9、删除数据记录
delete 语句:用于删除表中指定的数据记录(也就是行),
语法格式:
DELETE FROM 表名 [WHERE 条件表达式];
mysql> select * from member;
+------+---------+---------+--------+----------+----------------+
| id | name | cardid | phone | address | remark |
+------+---------+---------+--------+----------+----------------+
| 1 | zhangsi | 111 | 1111 | hf | this is vip |
| 4 | lisi | 1234 | 444444 | nanjing | this is normal |
| 2 | wangwu | 12345 | 222222 | benjing | this is normal |
| 5 | zhaoliu | 123456 | 555555 | nanjing | this is vip |
| 3 | qianqi | 1234567 | 333333 | shanghai | this is vip |
| 6 | liuyi | 123456 | 666666 | nanjing | this is vip |
| 7 | laoba | 1234567 | 888888 | shanghai | this is vip |
+------+---------+---------+--------+----------+----------------+
7 rows in set (0.00 sec)
mysql> delete from class.member where id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from member;
+------+---------+---------+--------+----------+----------------+
| id | name | cardid | phone | address | remark |
+------+---------+---------+--------+----------+----------------+
| 4 | lisi | 1234 | 444444 | nanjing | this is normal |
| 2 | wangwu | 12345 | 222222 | benjing | this is normal |
| 5 | zhaoliu | 123456 | 555555 | nanjing | this is vip |
| 3 | qianqi | 1234567 | 333333 | shanghai | this is vip |
| 6 | liuyi | 123456 | 666666 | nanjing | this is vip |
| 7 | laoba | 1234567 | 888888 | shanghai | this is vip |
+------+---------+---------+--------+----------+----------------+
6 rows in set (0.00 sec)
10、克隆数据表
①克隆,只复制格式,
create table AAA1 like AAA; #复制格式,通过LIKE方法,复制yyy表结构生成yyy2表
②克隆表,将数据表的数据记录生成到新的表中
CREATE TABLE test02 (SELECT * from test); #复制test 表数据到test02中
三、忘记root密码,操作方法
1、忘记root密码
修改/etc/my.cnf 配置文件,免密登陆mysql
在[mysqld]内
添加:skip-grant-tables #添加,使登录mysql不使用授权表
[root@zwb_mysql ~]# cat /etc/my.cnf
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
skip-grant-tables # 添加此字段,免密码登录
....................................
[root@zwb_mysql ~]# systemctl restart mysqld ## 重启mysql
[root@zwb_mysql ~]# mysql ## 免密登录
Welcome to the MySQL monitor. Commands end with ; or \g.
....................................
mysql>
#然后使用SQL语句修改密码
mysql> show databases; ## 查询有几个库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use mysql ## 使用mysql库
Database changed
mysql> show tables; ## 查询mysql中有几张表
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
.............................................
| user | ## 用户信息(账户、密码)存储的表
+---------------------------+
31 rows in set (0.00 sec)
## 修改root密码
mysql> update mysql.user set authentication_string = PASSWORD('123123') where user='root'; ## 修改 mysql库user表中的authentication_string字段为 123123《使用PASSWORD()
表示加密 ,where定位用户名》
mysql> flush privileges ##刷新user 表
mysql> quit ## 退出 也可使用exit
Bye
验证:
[root@zwb_mysql ~]# mysql -uroot -p123123
.................
mysql> 登录成功,删除/etc/my.cnf添加的字段