目录
前言
MySQL是一个客户端 - 服务器结构的程序 ,(本体是服务器(负责存储和管理数据)), 客户端通过 SQL 语句配合网络与服务器进行交互
-
客户端:主动发起请求的一方
-
服务器:被动接受请求的一方
MySQL 是一个关系数据库管理系统 , 它可以是一个 图形化软件 , 也可以是一个终端黑窗口 , 而在上面执行的命令 , 就使用的是SQL语言.
SQL
SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统 , 同时也是数据库脚本文件的扩展名 , SQL中不区分大小写,各种不同的数据库,都支持SQL语言
在MySQL 学习 中 SQL 语言 是很重要的基础 , 用于存取数据以及查询、更新和管理关系数据库系统 , 这里先来简单学习一下 使用 SQL 语句对 MySQL 中的系列操作
数据库操作
SQL 语句是不区分大小写的 , 以下语句中的字母是不是大小写都没关系
显示数据库
语法
show databases; -- 在 SQL 中每段语句以 ; 结束
这条语句很简单 , 就是能让你看到当前 MySQL 中有几个数据库.
示例
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec) -- 显示当前有几行数据库
创建数据库
语法
create database [if not exists] <数据库名>;
说明
-
[ ] 中的是可选项
-
< > 中的是指定数据库库名
示例
-
第一种创建方式 , 直接创建一个数据库 , 数据库名为 test
mysql> create database test; Query OK, 1 row affected (0.01 sec)
-
第二种创建方式 , 先判断要创建的数据库是否存在 , 存在则不进行创建
mysql> create database test; ERROR 1007 (HY000): Can't create database 'test'; database exists -- 报错信息:无法创建数据库test;数据库存在
mysql> show warnings; +-------+------+-----------------------------------------------+ | Level | Code | Message | +-------+------+-----------------------------------------------+ | Note | 1007 | Can't create database 'test'; database exists | +-------+------+-----------------------------------------------+ 1 row in set (0.00 sec) -- 警告信息:无法创建数据库test;数据库存在
通过刚才的查看数据库指令可以查看我们创建的数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test | -- 刚才创建的数据库
+--------------------+
5 rows in set (0.00 sec)
选中数据库
语法
use <数据库名>;
说明
-
< > 中的是指定数据库库名
示例
选中刚创建的数据库
mysql> use test;
Database changed -- 选中了数据库的提示
在对数据库进行操作时,比如在数据库中创建一张表(文章下面会讲到) , 都需要先选中数据库 , 才能进行下一步操作。
删除数据库
语法
drop database [if exists] <数据库名>;
说明
-
[ ] 中的是可选项
-
< > 中的是指定数据库库名
示例
-
第一种删除数据库的方式 , 直接删除数据库
mysql> drop database test; Query OK, 0 rows affected (0.01 sec)
这种删除方式在删除不存在的数据库时会报错
mysql> drop database test; ERROR 1008 (HY000): Can't drop database 'test'; database doesn't exist -- 报错信息:不能删除数据库test;数据库不存在
-
第二种删除数据库的方式 , 在删除时先进行判断数据库是否存在 , 存在则进行删除
mysql> drop database if exists test; Query OK, 0 rows affected, 1 warning (0.00 sec) -- 和创建数据库一样 , 会将报错信息转成警告信息
ps:删除数据库是一个非常危险的操作 , 一旦删除数据库,这里的数据没备份的画就很难找回来了,所以在工作中删除数据库的时候望君三思
常用数据类型
MySQL 和其它语言一样 , 也有基本的数据类型 , 而这些类型基本可以分成三大类 <数值类型> <字符串类型> <日期类型>
数值类型
数值类型主要分为两种 , 整型和浮点型
数据类型 | 大小 | 取值范围 |
---|---|---|
bit(M) | M指定位数,默认为1位 | 0 ~ 2^M-1 |
tinyint | 1字节 | -128 ~ 127 |
smallint | 2字节 | -32768 ~ 3276 |
int | 4字节 | -2147483648 ~ 2147483647 |
bigint | 8字节 | -9223372036854775808 ~ 9223372036854775807 |
float(M,D) | 4字节 | -3.402 823 466 E+38 ~ -1.175 494 351 E-38 0 1.175 494 351 E-38 ~ 3.402 823 466 351 E+38 |
double(M,D) | 8字节 | -1.797693134 862 3157 E+308 ~ -2.2250738585072014E-308) 0 2.2250738585072014E-308 ~ 1.7976931348623157E+308 |
decimal(M,D) | M/D最大值+2 | 依赖于M和D的值 , M最大65 D最大30 |
字符串类型
数据类型 | 大小 | 说明 |
---|---|---|
char(size) | 0-255字节 | 定长字符串 size为字符的个数 |
varchar(size) | 0 ~ 65535字节 | 变长度字符串 size为字符的个数 |
text | 0 ~ 65535字节 | 长文本数据 |
mediumtext | 0 ~ 16777215字节 | 中等长度文本数据 |
longtext | 0 - 4294967295字节 | 极大文本数据 |
blob | 0 ~ 65535 | 二进制形式的长文本数据 |
日期类型
类型 | 大小 | 范围 | 格式 | 说明 |
---|---|---|---|---|
DATE | 3字节 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3字节 | '-838:59:59'/'838:59:59' | HH:MM:SS | 时间值或持续时间 |
YEAR | 1字节 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8字节 | 1000-01-01 00:00:00 ~ 999912-31 23:59:59 |
YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4字节 | 1970-01-01 00:00:00 ~(北京时间) 2038-1-19 11:14:07 |
YYYYMMDD HHMMSS | 混合日期和时间值时间戳 |
以上数据类型为 MySQL 常用数据类型 , 在创建数据表的时候会用到
数据表操作
数据表是用来记录数据的, 数据表需要在数据库中建立 , 刚才介绍的创建数据库相当于在你的电脑中创建一个文件夹 , 而数据表就相当于文件夹里面的文件 , 每个文件夹都能存放很多文件 , MySQL 也一样 , 在同一个数据库中能创建多张数据表 , 接下来作者就来讲解一下关于数据表的基本操作 , 在进行表操作前我们需要先选择一个数据库
use test;
创建数据表
在数据库中创建出一张数据表
语法
create table <数据表名>(列名 类型,列名 类型,....);
说明
-
< > 中的是指定数据库库名
示例
-
创建一个可以描述姓名 和 年龄 的学生表
mysql> create table Student(name varchar(20),age int);-- 列名与类型之间要使用空格隔开 Query OK, 0 rows affected (0.03 sec)
如果需要创建的数据表语句比较长的话 , 在MySQL中支持分行写 SQL 语句 , 碰到分号结尾才会执行语句 , 上面 SQL 语句也可以写成下面的形式
mysql> create table Student( -> name varchar(20), -> age int -- 最后一列不需要逗号分割 -> ); Query OK, 0 rows affected (0.01 sec)
注意 : 数据表名/列名,需要遵守一定的命名规则:数字字母下划线(数字不能开头),不能和SQL中的关键字冲突 (如果非要和关键字冲突,可以使用反引号 ` 引起来)
查看数据表结构
想要查看一张数据表中有几列 , 列名是什么 , 类型是什么,默认值是什么都可以使用查看数据表结构 SQL 语句
语法
desc <数据表名>;
说明
-
< > 中的是指定数据表表名
示例
-
查看刚才学生表的结构
desc Student; mysql> desc Student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
解释
-
Field : 该列的字段
-
Type : 该列的类型
-
Null : 表示这该列是否允许为空
-
key : 表示该列是否已编制索引
-
Default : 该列的默认值
-
Extra : 表示该行格外的组件
以上为空项的列在后面介绍 MySQL 约束中都会出现 , 所以现在暂不深究
修改数据表
有时候 , 如果创建数据表的时候不小心将字段名称或者字段类型设置错了的话 , 又或者多(少)添加了字段 , 即使数据表创建好了 , 我们还是可以去修改的.
关键字
alter
1. 删除字段
语法
alter table <数据表名> drop 列名;
说明
-
< > 中的是指定数据表表名
示例
-
删除学生表中的年龄字段
mysql> alter table Student drop age; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
重新查看一下学生表的表结构 , 可以发现在学生表中只剩下 姓名 字段了
mysql> desc Student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
-
如果当前数据表中只剩下一个字段 , 那么此时使用删除字段的SQL语句则会报错
mysql> alter table Student drop name; ERROR 1090 (42000): You can't delete all columns with ALTER TABLE; use DROP TABLE instead -- 报错信息 : 你不能用ALTER TABLE删除所有的列;使用DROP TABLE代替
删除了所有字段跟删除数据表没什么区别 , 所以这个时候报错信息就会提醒你用删除数据表代替
2. 添加字段
语法
alter table <数据表名> add 列名 类型 [first/after];
说明
-
< > 中的是指定数据表表名
-
[ ] 中的是可选项
示例
-
为刚才的学生表添加 年龄 字段
mysql> alter table Student add age int; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , 可以看出 年龄 字段已经被添加上去了
mysql> desc Student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.00 sec)
-
如果添加字段时 , 想把该字段设置为第一列 , 就可以使用可选项中的关键字 first , 比如添加一个 编号 字段 在第一列
mysql> alter table Student add id int first; Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , 可以发现 id 字段已经在数据表中的第一列
mysql> desc Student; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | age | int(11) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
ps: 在使用任意位置添加字段时 , 需要在 after 关键字后面指定为哪个字段后面
3. 修改字段类型及名称
关于修改字段类型和名称有两种语法
语法1
alter table <数据表名> modify 字段名 类型 [first/after];
说明
-
< > 中的是指定数据表表名
-
[ ] 中的是可选项
-
modify 只能修改字段的类型 , 并不能修改字段的名称
示例
-
将学生表中的字段 name 的类型从 varchar(20) 改成 varchar(10)
mysql> alter table Student modify name varchar(10); Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , 可以看到 name 字段类型从 varchar(20) 改成了 varchar(10)
mysql> desc Student; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | student_Id | varchar(6) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | age | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
-
如果只想改变字段位置而不改变其类型 , 可以使用可选项中的关键字 first , 将该字段放到第一列
mysql> alter table Student modify name varchar(10) first; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , name 字段已经被放到第一列了
mysql> desc Student; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | name | varchar(10) | YES | | NULL | | | id | int(11) | YES | | NULL | | | student_Id | varchar(6) | YES | | NULL | | | age | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
-
放到某一个字段后面 , 使用可选项中的关键字 after
mysql> alter table Student modify name varchar(10) after id; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , name 字段已经被放到 id 字段后面了
mysql> desc Student; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | student_Id | varchar(6) | YES | | NULL | | | age | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
语法2
alter table <数据库名> change 旧字段名 新字段名 类型 [first/after];
说明
-
< > 中的是指定数据表表名
-
[ ] 中的是可选项
-
change 既可以更改字段名称 , 也可以更改字段类型
示例
-
将学生表中的 id 字段更改成 number
mysql> alter table Student change id number int; Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , id 字段已经被更改成 number 字段
mysql> desc Student; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | number | int(11) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | student_Id | varchar(6) | YES | | NULL | | | age | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
-
使用可选项中的关键字 after 将 student_Id 字段放到 number 字段后面
mysql> alter table Student change student_Id student_Id varchar(6) after number; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
查看表结构 , student_Id 字段被放到了 number 字段后面了
mysql> desc Student; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | number | int(11) | YES | | NULL | | | student_Id | varchar(6) | YES | | NULL | | | name | varchar(10) | YES | | NULL | | | age | int(11) | YES | | NULL | | +------------+-------------+------+-----+---------+-------+ 4 rows in set (0.00 sec)
modify 和 change 的区别
-
modify 只能改变字段类型 , 不能改变字段名称 , change 既能改变字段名称 , 也能改变字段类型.
-
在改变字段位置时 , modify 只需要指定字段名 , 类型 和 改变的位置 , 而 change 即使不改变字段名 也需要指定 旧字段名 , 新字段名 类型 和 改变的位置.
总结:各有各的特色 , 哪个方便用哪个
查看数据表
查看一个数据库中有几张表
语法
show tables;
示例
-
查看当前数据库中有几张表
mysql> show tables; +----------------+ | Tables_in_test | +----------------+ | student | +----------------+ 1 row in set (0.00 sec)
删除数据表
在数据库中删除一张数据表
语法
drop table [if exists] <数据表名>;
说明
-
< > 中的是指定数据表表名
-
[ ] 中的是可选项
示例
-
删除刚才创建的学生表
mysql> drop table Student; Query OK, 0 rows affected (0.01 sec)
再次查看当前数据库中有几张表
mysql> show tables; Empty set (0.00 sec)
提示为空 , 学生表被删除了
-
在删除时可以进行判断 , 如果当前表存在则进行删除 , 不存在则不删除
mysql> drop table if exists Student; Query OK, 0 rows affected, 1 warning (0.00 sec) -- 不存在只会报出一个 warning 警告信息
注意:删除数据表操作和删库操作本质类似 , 一旦删除表中的数据可能找不回来了 , 所以在工作中删表还是望君三思
扩展
-
在 MySQL 中 两个减号 [ -- ] 是注释符号 , 在减号后面要添加一个空格
-
在终端窗口中按键盘的向上方向键可以显示你敲过的SQL语句
MySQL 虽然语法简单 , 但学习还是在与多记多敲多写SQL语句
本章到此结束,如果文中有写的不对或不懂的地方,欢迎评论区讨论,谢谢!