美文网首页
MySQL数据库基本操作(一)

MySQL数据库基本操作(一)

作者: 泡泡龙吐泡泡 | 来源:发表于2018-09-11 21:06 被阅读9次

1.1 今日目标

  1. 了解数据库的发展史
  2. 了解什么是SQL语句
  3. 了解启动和停止MySQL服务器
  4. 能够连接MySQL数据库
  5. 能够关闭数据库连接
  6. 能够创建数据库
  7. 能够查看所有数据库
  8. 能够修改数据库的字符编码
  9. 能够删除数据库
  10. 能够选择数据库
  11. 能够创建表
  12. 能够查看当前数据库中的所有表
  13. 能够查看表结构
  14. 能够查看创建表的SQL语句
  15. 能够能够复制表
  16. 能够给表添加字段
  17. 能够给表删除字段
  18. 能够修改表字段
  19. 能够修改表引擎
  20. 能够修改表名
  21. 能够向表中添加数据
  22. 能够修改表中的数据
  23. 能够删除表中的数据

1.2 数据库的作用

数据库是存放数据的仓库

数据库:数据库中存放的是表,一个数据库中可以存放多个表

表:表是用来存放数据的。

1.3 数据库的发展史

1.3.1 萌芽阶段:文件系统

最初始的数据库是用磁盘来存储数据的。文件就是最早的数据库。

1.3.2 第一代数据库:层次模型、网状模型

1.3.2.1 层次模型

层次模型.png

缺点:

1、 查找不同类的数据效率低了(导航的结构的缺点)

2、 数据不完整(不能区分到底是一个李白还是两个李白)

1.3.2.2 网状模型

网状模型解决了层次数据的数据不完整的问题,但是没有解决层次模型的导航问题。


网状模型.png

1.3.3 第二代数据库:关系型数据库

特点:

  1. 每个表都是独立的

  2. 表与表之间通过公共字段来建立关系

image.png

优点:解决了导航问题,并且数据完整性得到解决

缺点:多表查询效率低了

提示:我们现在用的主流的数据库都是关系模型的。

多学一招:NoSQL(非关系型数据库)解决关系型数据库多表查询效率的问题,常见的非关系型数据库有:Redis、mongodb。数据库中存储格式是键值对。

1.4 SQL介绍

1.4.1 SQL是什么

Structured Query Language(结构化查询语言),是用来操作关系型数据库的一门语言。这是一个关系型数据库的通用操作语言,也成为标准SQL,也叫SQL-92。

多学一招:数据库的生产厂商为了占有市场份额,都会在标准SQL的基础上扩展一些自己的东西以吸引用户。

1.4.2 常见的关系型数据库

关系型数据库 开发公司 使用语言
SQL Server 微软公司 T-SQL
Oracle 甲骨文公司 PL/SQL
MySQL MySQL AB 公司开发——甲骨文公司收购 MySQL

思考:已知标准SQL可以在所有的关系型数据库上运行,在Oracle上编写的PL/SQL能否在MySQL上运行?

答:不能,只能运行标准SQL

1.5 连接服务器

通过命令行面板连接

host:主机         -h
username:用户名    -u
password:密码     -p
port:端口         -P

多学一招:如果MySQL服务器在本地,IP地址可以省略;如果MySQL服务器用的是3306端口,-P也是可以省略

1.6 关闭连接

方法一:exit

方法二:quit

方法三:\q
脚下留心:MySQL中的命令后面要加分号,windows命令行的命令后面不用加分号。

1.7 数据库的操作

1.7.1 显示数据库

 语法:show databases
 
 mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.11 sec)

安装MySQL后,MySQL自带了4个数据库

  1. information_schema:存储了MySQL服务器管理数据库的信息。
  2. performance_schema:MySQL5.5新增的表,用来保存数据库服务器性能的参数
  3. mysql:MySQL系统数据库,保存的登录用户名,密码,以及每个用户的权限等等
  4. test:给用户学习和测试的数据库。

1.7.2 创建数据库

语法:create database [if not exists] `数据名` [字符编码]

创建数据库:

create database stu;

如果创建的数据库已存在,就会报错:

create database stu;
ERROR 1007 (HY000): Can't create database 'stu'; database exists

解决:创建数据库的时候判断一下数据库是否存在,如果不存在再创建

create database if not exists stu;
Query OK, 1 row affected, 1 warning (0.00 sec)

如果数据库名是关键字和特殊字符要报错

解决:在特殊字符、关键字行加上反引号

create database `create`;
Query OK, 1 row affected (0.05 sec)

多学一招:为了创建数据库时万无一失,我们可以在所有的数据库名上加上反引号

创建数据库的时候可以指定字符编码

create database teacher charset=gbk;
Query OK, 1 row affected (0.01 sec)
gbk     简体中文
gb2312: 简体中文
utf8:   通用字符编码

脚下留心:创建数据库如果不指定字符编码,默认和MySQL服务器的字符编码是一致的。

1.7.3 删除数据库

语法:drop database [if exists] 数据库名

删除数据库

drop database teacher;
Query OK, 0 rows affected (0.00 sec)

如果删除的数据库不存在,会报错

drop database teacher;
ERROR 1008 (HY000): Can't drop database 'teacher'; database doesn't exist

解决:删除之前判断一下,如果存在就删除

drop database if exists teacher;
Query OK, 0 rows affected, 1 warning (0.00 sec)

1.7.4 显示创建数据库的SQL语句

语法:show create database 数据库名
show create database stu;
+----------+--------------------------------------------------------------+
| Database | Create Database                                              |
+----------+--------------------------------------------------------------+
| stu      | CREATE DATABASE `stu` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+--------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> show create database teacher;
+----------+-----------------------------------------------------------------+
| Database | Create Database                                                 |
+----------+-----------------------------------------------------------------+
| teacher  | CREATE DATABASE `teacher` /*!40100 DEFAULT CHARACTER SET gbk */ |
+----------+-----------------------------------------------------------------+
1 row in set (0.00 sec)

1.7.5 修改数据库

修改数据库的字符编码

语法:

alter database 数据库名 charset=字符编码

例题

alter database teacher charset=utf8;
Query OK, 1 row affected (0.00 sec)

1.7.6 选择数据库

语法:

use 数据库名

选择数据库

use stu;
Database changed

1.8 表的操作

1.8.1 显示所有表

语法:

show tables

1.8.2 创建表

语法:

create table [if not exists] 表名(
    字段名 数据类型 [null|not null] [auto_increment] [primary key] [comment],
    字段名 数据类型 [default]…
)engine=存储引擎

单词

null | not null     空|非空
default             默认值
auto_increment      自动增长
primary key         主键
comment             备注
engine              引擎   innodb  myisam  memory  引擎是决定数据存储的方式

创建简单的表

create database itcast;
Query OK, 1 row affected (0.00 sec)

mysql> use itcast;
Database changed
mysql> show tables;
Empty set (0.05 sec)

# 创建表
create table stu(
id int,
name varchar(30)
);
Query OK, 0 rows affected (0.13 sec)
# 查看创建的表
show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| stu              |
+------------------+

创建复杂的表

mysql> set names gbk;   # 设置字符编码
Query OK, 0 rows affected (0.05 sec)

mysql> create table if not exists teacher(
   -> id int auto_increment primary key comment '主键',
   -> name varchar(20) not null comment '姓名',
   -> phone varchar(20) comment '电话号码',
   -> `add` varchar(100) default '地址不详' comment '地址'
   -> )engine=innodb;
Query OK, 0 rows affected (0.09 sec)

多学一招:create table 数据库名.表名,用于给指定的数据库创建表

mysql> create table data.stu(  #给data数据库中创建stu表
   -> id int,
   -> name varchar(10));
Query OK, 0 rows affected (0.00 sec)

1.8.3 显示创建表的语句

语法:

show create table 表名

显示创建teacher表的语句

mysql> show create table teacher;
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| Table   | Create Table


       |
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| teacher | CREATE TABLE `teacher` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(20) NOT NULL COMMENT '姓名',
  `phone` varchar(20) DEFAULT NULL COMMENT '电话号码',
  `add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8                         |

将两个字段竖着排列 show create table 表名\G

mysql> show create table teacher\G;
*************************** 1. row ***************************
      Table: teacher
Create Table: CREATE TABLE `teacher` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
 `name` varchar(20) NOT NULL COMMENT '姓名',
 `phone` varchar(20) DEFAULT NULL COMMENT '电话号码',
 `add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

1.8.4 查看表结构

语法:

desc[ribe] 表名

查看teacher表的结构

mysql> describe teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.08 sec)

mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.01 sec)

1.8.5 删除表

语法:

drop table [if exists] 表1,表2,… 

删除表

mysql> drop table stu;
Query OK, 0 rows affected (0.08 sec)

如果删除一个不存在的表就会报错,删除的时候可以判断一下,存在就删除。

mysql> drop table stu;
ERROR 1051 (42S02): Unknown table 'stu'

mysql> drop table if exists stu;
Query OK, 0 rows affected, 1 warning (0.00 sec)

可以一次删除多个表

mysql> drop table a1,a2;
Query OK, 0 rows affected (0.00 sec)

1.8.6 修改表

语法:alter table 表名

1、添加字段:alter table 表名add [column] 字段名 数据类型 [位置]

例题一:添加字段

mysql> alter table teacher add age int;
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
| age   | int(11)      | YES  |     | NULL     |                |
+-------+--------------+------+-----+----------+----------------+
5 rows in set (0.00 sec)

例题二:在第一个位置上添加字段

mysql> alter table teacher add email varchar(30) first;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| email | varchar(30)  | YES  |     | NULL     |                |
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
| age   | int(11)      | YES  |     | NULL     |                |
+-------+--------------+------+-----+----------+----------------+

例题三:在指定的字段后添加字段

mysql> alter table teacher add sex varchar(2) after name;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type         | Null | Key | Default  | Extra          |
+-------+--------------+------+-----+----------+----------------+
| email | varchar(30)  | YES  |     | NULL     |                |
| id    | int(11)      | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20)  | NO   |     | NULL     |                |
| sex   | varchar(2)   | YES  |     | NULL     |                |
| phone | varchar(20)  | YES  |     | NULL     |                |
| add   | varchar(100) | YES  |     | 地址不详        |                |
| age   | int(11)      | YES  |     | NULL     |                |
+-------+--------------+------+-----+----------+----------------+
7 rows in set (0.00 sec)

2、删除字段:alter table 表 drop [column] 字段名

mysql> alter table teacher drop email;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

3、修改字段(改名改类型):alter table 表 change [column] 原字段名 新字段名 数据类型 …

将字段sex改为xingbie,数据类型为int

mysql> alter table teacher change sex xingbie int;
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

4、修改字段(不改名):alter table 表 modify 字段名 字段属性…

将性别的数据类型改为varchar(2)

mysql> alter table teacher modify xingbie varchar(2);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

5、修改引擎:alter table 表名 engine=引擎名

mysql> alter table teacher engine=myisam;
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

6、修改表名:alter table 表名 rename to 新表名

mysql> alter table teacher rename to stu;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| stu              |
+------------------+
1 row in set (0.00 sec)

1.8.7 复制表

语法一:create table 新表 select 字段 from 旧表

特点:不能复制父表的主键,能够复制父表的数据

mysql> create table stu1 select * from stu;
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from stu1;    # 查看数据复制到新表中
+----+------+------+-------+
| id | name | addr | score |
+----+------+------+-------+
|  1 | rose | 上海    |    88 |
+----+------+------+-------+
1 row in set (0.00 sec)

mysql> desc stu1;    #  主键没有复制
+-------+-------------+------+-----+----------+-------+
| Field | Type        | Null | Key | Default  | Extra |
+-------+-------------+------+-----+----------+-------+
| id    | int(11)     | NO   |     | 0        |       |
| name  | varchar(20) | NO   |     | NULL     |       |
| addr  | varchar(50) | YES  |     | 地址不详        |       |
| score | int(11)     | YES  |     | NULL     |       |
+-------+-------------+------+-----+----------+-------+
4 rows in set (0.00 sec)
语法二:create table 新表 like 旧表

特点:只能复制表结构,不能复制表数据

Query OK, 0 rows affected (0.00 sec)

mysql> select * from stu2;   # 数据没有复制
Empty set (0.01 sec)

mysql> desc stu2;   # 主键复制了
+-------+-------------+------+-----+----------+----------------+
| Field | Type        | Null | Key | Default  | Extra          |
+-------+-------------+------+-----+----------+----------------+
| id    | int(11)     | NO   | PRI | NULL     | auto_increment |
| name  | varchar(20) | NO   |     | NULL     |                |
| addr  | varchar(50) | YES  |     | 地址不详        |                |
| score | int(11)     | YES  |     | NULL     |                |
+-------+-------------+------+-----+----------+----------------+
4 rows in set (0.00 sec)

1.9 数据操作

创建测试表

mysql> create table stu(
    -> id int auto_increment primary key comment '主键',
    -> name varchar(20) not null,
    -> addr varchar(50) default '地址不详',
    -> score int comment '成绩'
    -> );
Query OK, 0 rows affected (0.01 sec)

1.9.1 插入数据

插入一条数据

语法:insert into 表名 (字段名, 字段名,…) values (值1, 值1,…)

例题一:插入数据

mysql> insert into stu (id,name,addr,score) values (1,'tom','上海',88);
Query OK, 1 row affected (0.11 sec)

例题二:插入的字段可以和表的字段顺序不一致。值的顺序必须和插入字段的顺序一致。

mysql> insert into stu (name,score,addr,id) values ('berry',77,'北京',2);
Query OK, 1 row affected (0.00 sec)

例题三:可以插入部分字段,但是,非空字段必须插入

mysql> insert into stu (id,name,addr) values (3,'ketty','上海');

例题四:自动增长字段不用插入,数据库会自动插入增长的数字

mysql> insert into stu (name,addr) values ('rose','北京');
Query OK, 1 row affected (0.00 sec)

例题五:自动增长列的值插入null即可

mysql> insert into stu (id,name,addr,score) values (null,'李白','上海',66);
Query OK, 1 row affected (0.00 sec)

例题六:插入值的顺序和个数与表字段的顺序和个数一致,插入的字段可以省略

mysql> insert into stu values (null,'杜甫','北京',null);
Query OK, 1 row affected (0.00 sec)

例题七:通过default关键字插入默认值

mysql> insert into stu values (null,'李清照',default,66);
脚下留心:
1、插入字段的顺序与值的顺序必须一致

插入多条数据

mysql> insert into stu values (null,'辛弃疾',default,66),(null,'岳飞','河南',77);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0

1.9.2 更新数据

语法:

update 表名 set 字段=值 [where 条件] 

例题一:将1号学生的地址改成山东

mysql> update stu set addr='山东' where id=1

例题二:将ketty的成绩改为99

mysql> update stu set score=99 where name='ketty';

例题三:将berry地址改成上海,成绩改成66

mysql> update stu set addr='上海',score=66 where name='berry';

例题四:将上海的学生成绩改为60

mysql> update stu set score=60 where addr='上海';

例题五:条件可以省略,如果省略,更改所有数据(将所有数据的地址改为湖南,成绩改为70)

mysql> update stu set addr='湖南',score=70;

例题六:将2、3的学生成绩改为65

mysql> update stu set score=65 where id=2 or id=3;

1.9.3 删除数据

语法

delete from 表名 [where 条件] 

例题一:删除学号是1号的学生

mysql> delete from stu where id=1;

例题二:删除成绩小于等于65分的

mysql> delete from stu where score<=65;

例题三:删除表中所有记录

mysql> delete from stu;

1.9.4 清空表

语法:

truncate table 表名

例题

mysql> truncate table stu;
Query OK, 0 rows affected (0.00 sec)
脚下留心:delete from 表和truncate table 表区别?
delete from 表:遍历表记录,一条一条的删除
truncate table:将原表销毁,再创建一个同结构的新表。就清空表而言,这种方法效率高。

1.9.5查询表

语法:

select 列名 from 表

例题:

mysql> select name,score from stu;
+------+-------+
| name | score |
+------+-------+
| rose |    88 |
+------+-------+
1 row in set (0.00 sec)

mysql> select id,name,addr,score from stu;
+----+------+------+-------+
| id | name | addr | score |
+----+------+------+-------+
|  1 | rose | 上海    |    88 |
+----+------+------+-------+
1 row in set (0.00 sec)

mysql> select * from stu;  # *表示所有字段
+----+------+------+-------+
| id | name | addr | score |
+----+------+------+-------+
|  1 | rose | 上海    |    88 |
+----+------+------+-------+
1 row in set (0.00 sec)

1.10 SQL分类

DDL(data definition language)数据库定义语言CREATE、ALTER、DROP、SHOW

DML(data manipulation language)数据操纵语言SELECT、UPDATE、INSERT、DELETE

DCL(Data Control Language)数据库控制语言,是用来设置或更改数据库用户或角色权限的语句

1.11 数据表的文件介绍

一个数据库对应一个文件夹

一个表对应一个或多个文件

引擎是myisam,一个表对应三个文件

引擎是innodb,一个表对应一个表结构文件

所有的innodb引擎的数据统一的存放在data\ibdata1文件中。如果数据量很大,MySQL会自动的创建ibdata2,ibdata3,…,目的就是为了便于管理。

引擎是memory,数据存储在内存中,重启服务数据丢失,但是读取速度非常快。

相关文章

  • Shell脚本操作-6

    Shell操作数据库MySQL SQL基本操作 安装MySql数据库 连接数据库 mysql -u root -p...

  • mysql 总结

    1 mysql常用术语 2 mysql安装 3 连接数据库 4 数据库的操作 (**) 5. 表的基本操作(***...

  • MySQL数据库基本操作

    MySQL数据库基本操作 MySQL数据库操作: 注:数据库-->数据表-->表记录(三者属于一层一层的关系,多个...

  • Ubuntu环境下mysql基本操作

    Ubuntu环境下mysql基本操作** 一、基本操作代码 1、连接数据库 2、查询数据库 3、使用某一数据库 4...

  • 00-基本操作

    数据库的基本操作 通过mysql客户端进入mysql后,实际位于所有仓库之外:* 选中要操作的数据库实例* 操作数...

  • JDBC 第一章

    MySQL安装 数据库视图化工具 MySQL基本操作 JDBC MySQL安装 1.1、下载 链接:https:/...

  • mysql使用小结

    mysql是现阶段使用最广泛的关系型数据库 mysql基本操作

  • 第二十章 Python3 操作 MySQL

    操作 MySQL 一、基本介绍 Python3 操作 MySQL 数据库 可以使用的模块是 pymysql 和 M...

  • MySQL系列:MySQL的基本使用

    数据库的基本操作 在MySQL数据库中,对于一个MySQL示例,是可以包含多个数据库的。 在连接MySQL后,我们...

  • Android端直接操作服务器上的MySQL数据库

    安卓端直接操作MySQL数据库,和服务端操作基本相同,只不过Android不可以直接操作本地的MySQL数据库,因...

网友评论

      本文标题:MySQL数据库基本操作(一)

      本文链接:https://www.haomeiwen.com/subject/nvxpgftx.html