上一篇我们已经在Linux系统装好了MySQL,现在我们来熟悉一下MySQL及它的操作语句。
设计模型:
- E-R设计模型【E表示Entry,实体】、【R表示Relationship,关系】。
- 一个实体转换为数据库中的一个表
- 关系描述两个实体之间对应规则,包括一对一、一对多、多对多
- 关系转换为数据表中的一个列*在关系型数据库中一行就是一个对象
三范式(Thread Normal Form):
- 第一范式(1NF):列不可拆分
- 第二范式(2NF):唯一标示
- 第三范式(3NF):引用主键
说明:后一个范式都是在前一个范式的基础上建立的,在数据库中一行的术语叫做记录,一列叫做字段,记录和字段在分别对应关系数据库中的属性和元组
登录MySQL
bear@Bear-PC:~$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.7.21-1 (Debian)
Copyright (c) 2000, 2018, 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> select version(); /*!查看当前版本*/
+-----------+
| version() |
+-----------+
| 5.7.21-1 |
+-----------+
1 row in set (0.16 sec)
mysql> select now(); /*!显示当前时间*/
+---------------------+
| now() |
+---------------------+
| 2018-11-17 23:27:00 |
+---------------------+
1 row in set (0.10 sec)
mysql>
数据库操作:
查询数据库编码信息: Show variables like ‘character%’;
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
临时更改客户端和服务器结果集的编码:
Set charactersetclient=gbk;
Set charactersetresults=gbk;
查看所有数据库:show databases;
创建数据库:create database 数据库名 charset=utf8;
进入数据库:use 数据库名;
查看当前所在数据库:select database();
删除数据库:drop database 数据库名;
例:
mysql> show databases; /*!显示所有数据库*/
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydata |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.01 sec)
mysql> create database python charset=utf8; /*!创建名为:python的数据库*/
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydata |
| mysql |
| performance_schema |
| python | --------> 刚刚创建的python数据库
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> use python; /*!使用python数据库*/
Database changed
mysql> select database(); /*!查看当前所在数据库*/
+------------+
| database() |
+------------+
| python |
+------------+
1 row in set (0.00 sec)
mysql> drop database python; /*!删除python数据库*/
Query OK, 0 rows affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydata |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
mysql>
表操作:
创建表:
创建表的基本格式 ------------- create table 表名(列及类型)
列及类型包括:
字段名 数据类型(范围) 是否允许空 主键 默认值 约束
查看当前数据库中的表:show tables;
查看表结构:desc 表名;
更改表名称:rename table 原表名 to 新表名;
- alter 方法:alter table 表名 rename to 新表名
查看表的创建语句:show table create 表名;
删除表:drop table 表名;
修改表:
- 增加字段:alter table 表名 add column 列名 类型 /*!此处的column可以不写*/
- 指定位置加入字段:alter table 表名 add column 字段名 字段类型 after 某字段
- 删除字段:alter table 表名 drop 字段名
- 修改字段名称/类型:alter table 表名 change 旧字段名 新字段名 新字段类型
- 一次性清空表中所有数据(该方法也会是id从1开始):truncate table 表名
例:
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | NO | | b'1' | |
+--------+-------------+------+-----+---------+----------------+
其中:auto_increment 表示自动增长。
例:
mysql> create table student( /*!创建student表*/
-> id int auto_increment primary key,
-> name varchar(10) not null,
-> birthday datetime(6) not null,
-> gender bit(1) default 1 not null);
Query OK, 0 rows affected (0.63 sec)
mysql> create table students( /*!创建students表*/
-> id int auto_increment primary key,
-> name varchar(10) not null,
-> gender bit(1) default 1 not null);
Query OK, 0 rows affected (0.27 sec)
mysql> show tables; /*!显示所有表*/
+------------------+
| Tables_in_Python |
+------------------+
| student |
| students |
+------------------+
2 rows in set (0.00 sec)
mysql> desc student; /*!查看表结构*/
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| birthday | datetime(6) | NO | | NULL | |
| gender | bit(1) | NO | | b'1' | |
+----------+-------------+------+-----+---------+----------------+
mysql> desc students;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| gender | bit(1) | NO | | b'1' | |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
mysql> rename table student to student_info; /*!将student改为student_info*/
Query OK, 0 rows affected (0.82 sec)
mysql> show tables;
+------------------+
| Tables_in_Python |
+------------------+
| student_info |
| students |
+------------------+
2 rows in set (0.00 sec)
mysql> show create table students; /*!查看表的创建语句*/
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| students | CREATE TABLE `students` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) NOT NULL,
`gender` bit(1) NOT NULL DEFAULT b'1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> drop table students; /*!删除students表*/
Query OK, 0 rows affected (0.24 sec)
mysql> show tables;
+------------------+
| Tables_in_Python |
+------------------+
| student_info |
+------------------+
1 row in set (0.00 sec)
mysql> alter table student_info add MathCsore int(10); /*!增加MathScore列 类型int 长度10*/
Query OK, 0 rows affected (0.92 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc student_info;
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| birthday | datetime(6) | NO | | NULL | |
| gender | bit(1) | NO | | b'1' | |
| MathCsore | int(10) | YES | | NULL | | -------->增加的
+-----------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)
mysql>
备份与恢复
备份(导出)
1、用户切换为超级管理员
指定库备份:
#mysqldump -uroot -p 库名 > 备份文件路径(‘ ~/ ’在linux终端下可用,时直接切换到用户目录的;windows的cmd下用不了)
mysqldump -uroot -p Python > ~/Desktop/backup.sql
多个库备份:
#mysqldump -uroot -p --databases 库名 > 备份文件路径
mysqldump -uroot -p databases Python mydata > ~/Desktop/dump.sql
恢复(导入)
(1):系统命令方式:
mysql -uroot -p < 备份文件路径
(2):mysql命令行方法:
mysql> source 备份文件路径
具体数据操见下篇。。。