有了mysql这个数据库软件,就可以将程序员从对数据的管理中解脱出来,专注于对程序逻辑的编写。
mysql服务端软件帮我们管理好文件夹以及文件,前提是作为使用者需要下载mysql的客户端,或者其他模块来连接到mysql,然后使用mysql软件规定的语法格式去提交自己命令,实现对文件夹或文件的管理。
该语法即sql(Structured Query Language 即结构化查询语言),SQL语言主要用于存取数据、查询数据、更新数据和管理关系数据库系统,SQL语言由IBM开发。
SQL语言分为3种类型:
1、DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程,例如CREATE DROP ALTER
2、DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE、更新数据UPDATE、查询数据SELECT
3、DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT、REVOKE
库
MySQL中建立的库其实就是文件夹。
增
语法(help create database)
CREATE DATABASE 数据库名 charset utf8;
数据库的命名规则
可以由字母、数字、下划线、@、#、$
区分大小写
唯一性
不能使用关键字如 create select
不能单独使用数字
最长128位
练习
create database testdb charset utf8;
可以发现,在MySQL的安装路径中的data目录里,多了一个文件夹:
删
drop database testdb;
可以发现,data目录下的相应文件夹也不见了:
改
更改库的编码:
alter database testdb charset gbk;
查
查看当前创建的库:
show databases;
可以看到当前有五个数据库,但是我们看见data目录下只有四个文件夹,这是因为除了咱们创建的testdb之外的四个数据库都是系统数据库:
information_schema:虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等
performance_schema:MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件、锁等现象
mysql:授权库,主要存储系统用户的权限信息
sys:mysql5.7增加了sys系统数据库,通过这个库可以快速的了解系统的元数据信息,这个库确实可以方便DBA发现数据库的很多信息,解决性能瓶颈都提供了巨大帮助
查看数据库详情:
show create database testdb;
切换数据库操作:
use testdb;
表
表介绍
表相当于文件,表中的一条记录就相当于文件的一行内容,不同的是,表中的一条记录有对应的标题,称为表的字段。
学号、姓名、专业、生日和手机号称为字段,其余的,一行内容称为一条记录。
增
创建表语法:
create table 表名(
字段名1 类型[(宽度) 约束条件],
字段名2 类型[(宽度) 约束条件],
字段名3 类型[(宽度) 约束条件]
);
注意:
- 在同一张表中,字段名是不能相同
- 宽度和约束条件可选
- 字段名和类型是必须的
create table people(id int, name char);
复制表
复制表结构+记录 (key不会复制: 主键、外键和索引)
create table new_service select * from service;
只复制表结构
select * from service where 1=2; //条件为假,查不到任何记录
create table new1_service select * from service where 1=2;
create table t4 like employees;
删
drop table people;
改
alter table people modify name char(3);
alter table people change name nickname char(5);
修改表结构
1. 修改表名
ALTER TABLE 表名
RENAME 新表名;
2. 增加字段
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…],
ADD 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] FIRST;
ALTER TABLE 表名
ADD 字段名 数据类型 [完整性约束条件…] AFTER 字段名;
3. 删除字段
ALTER TABLE 表名
DROP 字段名;
4. 修改字段
ALTER TABLE 表名
MODIFY 字段名 数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 旧数据类型 [完整性约束条件…];
ALTER TABLE 表名
CHANGE 旧字段名 新字段名 新数据类型 [完整性约束条件…];
查
show tables;
查看表的数据类型
desc innodb_t1;
记录
增
insert into people values(1, "Alex"),(2, "Coco"),(3, "Bei");
删
delete from people where id=3;
改
update people set nickname="Baby" where id=3;
查
select * from people;
示例
创建数据库
mysql> use db1;
Database changed
创建表
mysql> create table t1(
-> id int,
-> name varchar(50),
-> sex enum("male", "female"),
-> age int(3)
-> );
Query OK, 0 rows affected (0.55 sec)
查看表描述
mysql> desc t1;
+-------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-----------------------+------+-----+---------+-------+
| id | int(11) | YES | | NULL | |
| name | varchar(50) | YES | | NULL | |
| sex | enum('male','female') | YES | | NULL | |
| age | int(3) | YES | | NULL | |
+-------+-----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
插入数据
mysql> insert into t1 values
-> (1, "Alex", "male", 19),
-> (2, "Coco", "female", 19);
Query OK, 2 rows affected (0.17 sec)
Records: 2 Duplicates: 0 Warnings: 0
查询表内容
mysql> select * from t1
-> ;
+------+------+--------+------+
| id | name | sex | age |
+------+------+--------+------+
| 1 | Alex | male | 19 |
| 2 | Coco | female | 19 |
+------+------+--------+------+
2 rows in set (0.00 sec)
只插入id数据并查询
mysql> insert into t1(id) values
-> (3),
-> (4);
Query OK, 2 rows affected (0.07 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t1;
+------+------+--------+------+
| id | name | sex | age |
+------+------+--------+------+
| 1 | Alex | male | 19 |
| 2 | Coco | female | 19 |
| 3 | NULL | NULL | NULL |
| 4 | NULL | NULL | NULL |
+------+------+--------+------+
4 rows in set (0.00 sec)
查看表结构
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(11) DEFAULT NULL,
`name` varchar(50) DEFAULT NULL,
`sex` enum('male','female') DEFAULT NULL,
`age` int(3) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)