一、数据库操作语言
数据库在操作时,需要使用专门的数据库操作规则和语法,这个语法就是 SQL(Structured Query Language) 结构化查询语言。
SQL 的主要功能是和数据库建立连接,进行增删改查的操作。SQL是关系型数据库管理系统的标准语言。
SQL 语言的作用:
1. 数据定义语言 DDL(Data Definition Language) 。用于创建数据库,数据表。
2. 数据操作语言 DML(Data Manipulation Language) 。用于从数据表中插入、修改、删除数据。
3. 数据查询语言 DQL(Data Query Language) 。用于从数据表中查询数据。
4. 数据控制语言 DCL(Data Control Language) 。用来设置或修改数据库用户或角色的权限。
使用 SQL 操作数据库时,所有的 SQL 语句都以分号结束。(切换数据库时可以不用分号)
在 SQL 语句中,不区分大小写,编写 SQL 语句时可以根据情况用大小写的区别来增加可读性。
二、创建数据库
1. 连接 MySQL
输入 mysql -u root -p 命令,回车,然后输入 MySQL 的密码(不要忘记了密码),再回车,就连接上 MySQL 了。
mysql -u root -p

最初,都是使用 root 用户登录,工作中如果一直用 root 用户登录,因为权限太大,风险是很大的,所以等创建好权限适合的用户后,就不要经常登录 root 用户了。
2. 查看当前的数据库
使用 show databases; 查看当前安装的 MySQL 中有哪些数据库。
show databases;(截图有点麻烦,所以后面都是代码了,哈哈!)
1 mysql> show databases; 2 +--------------------+ 3 | Database | 4 +--------------------+ 5 | information_schema | 6 | mysql | 7 | performance_schema | 8 | student_system | 9 | sys | 10 +--------------------+ 11 5 rows in set (0.00 sec) 12 13 mysql>
刚安装 MySQL 时,默认有四个数据库,information_schema,mysql,perfomance_schema,sys 。通常情况下,我们不会直接使用这四个数据库,但千万不要把这四个数据库删了,否则会带来很多不必要的麻烦。如果不小心删了,建议是重新安装 MySQL ,在重装之前把自己的数据迁移出来备份好,或者从其他服务器上迁移一个相同的数据库过来。
3. 创建数据库
使用 create database 数据库名; 创建数据库。
create database MyDB_one;
1 mysql> create database MyDB_one; 2 Query OK, 1 row affected (0.02 sec) 3 4 mysql> show databases; 5 +--------------------+ 6 | Database | 7 +--------------------+ 8 | information_schema | 9 | mydb_one | 10 | mysql | 11 | performance_schema | 12 | student_system | 13 | sys | 14 +--------------------+ 15 6 rows in set (0.00 sec)
创建数据库成功后,数据库的数量变成了6个,多了刚才创建的 MyDB_one 。
4. 创建数据库时设置字符编码
使用 create database 数据库名 charset utf8; 创建数据库并设置数据库的字符编码,一般建议设置为utf8mb4;为了方便理解比较,再创建一个mydb_two的数据库;
create database MyDB_two charset utf8mb4;
1 mysql> create database MyDB_two charset utf8mb4; 2 Query OK, 1 row affected (0.00 sec) 3 4 mysql> show databases; 5 +--------------------+ 6 | Database | 7 +--------------------+ 8 | information_schema | 9 | mydb_one | 10 | mydb_two | 11 | mysql | 12 | performance_schema | 13 | student_system | 14 | sys | 15 +--------------------+ 16 7 rows in set (0.00 sec)
5. 查看和显示数据库的编码方式
使用 show create database 数据库名; 显示数据库的创建信息。
show create database MyDB_one;
show create database MyDB_two;
1 mysql> show create database MyDB_one;show create database MyDB_two; 2 +----------+-------------------------------------------------------------------+ 3 | Database | Create Database | 4 +----------+-------------------------------------------------------------------+ 5 | MyDB_one | CREATE DATABASE `MyDB_one` /*!40100 DEFAULT CHARACTER SET utf8 */ | 6 +----------+-------------------------------------------------------------------+ 7 1 row in set (0.00 sec) 8 9 +----------+----------------------------------------------------------------------+ 10 | Database | Create Database | 11 +----------+----------------------------------------------------------------------+ 12 | MyDB_two | CREATE DATABASE `MyDB_two` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ | 13 +----------+----------------------------------------------------------------------+ 14 1 row in set (0.00 sec)
因为utf8mb4相对于utf8来说要更加稳定一点,所以我们打MySQL默认的utf8改为utf8mb4;
6. 使用 alter database 数据库名 charset utf8mb4;修改数据库编码
alter database MyDB_one charset utf8mb4;
1 mysql> alter database MyDB_one charset utf8mb4; 2 Query OK, 1 row affected (0.00 sec) 3 4 mysql> show create database mydb_one; 5 +----------+----------------------------------------------------------------------+ 6 | Database | Create Database | 7 +----------+----------------------------------------------------------------------+ 8 | mydb_one | CREATE DATABASE `mydb_one` /*!40100 DEFAULT CHARACTER SET utf8mb4 */ | 9 +----------+----------------------------------------------------------------------+ 10 1 row in set (0.00 sec)
7. 进入或切换数据库
使用 use 数据库名 进入或切换数据库。
use MyDB_one;
1 mysql> use mydb_one; 2 Database changed 3 mysql>
刚连接上 MySQL 时,没有处于任何一个数据库中,如果要使用某一个数据库,就需要进入到这个数据库中。use 数据库名 这个命令后面的分号可以省略,这是 SQL 语句中唯一可以省略分号的语句。
8. 显示当前数据库 select database();
select database();
1 mysql> select database(); 2 +------------+ 3 | database() | 4 +------------+ 5 | mydb_one | 6 +------------+ 7 1 row in set (0.00 sec)
进入数据库中,可以使用 select database(); 来查看当前处于哪个数据库中。长时间操作数据库时,在很多数据库中来回切换后,查看当前的数据库,避免操作错了数据库。
三、创建数据表
1. 查看当前数据库中的表
使用 show tables;查看当前数据库中有哪些表。
show tables;
1 mysql> show tables; 2 Empty set (0.00 sec)
在刚才创建的数据库 MyDB_one 中,还没有创建任何表,所以当前是空的。
2. 创建表使用 create table 表名(字段1 字段类型,字段2 字段类型,字段3 字段类型,…); 来创建一张表。
create table Phone_table(pid int, name char(20), price int);
1 mysql> create table Phone_table(pid int, name char(20), price int); 2 Query OK, 0 rows affected (0.23 sec) 3 4 mysql> show tables; 5 +--------------------+ 6 | Tables_in_mydb_one | 7 +--------------------+ 8 | phone_table | 9 +--------------------+ 10 1 row in set (0.00 sec)
在 MyDB_one 中创建了一个叫 Phone_table 的数据表,这张表有三个字段 pid,name,price 。
3. 显示表信息
用 desc 表名; 来显示已创建的表的信息。
desc Phone_table;
1 mysql> desc phone_table; 2 +-------+----------+------+-----+---------+-------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +-------+----------+------+-----+---------+-------+ 5 | pid | int(11) | YES | | NULL | | 6 | name | char(20) | YES | | NULL | | 7 | price | int(11) | YES | | NULL | | 8 +-------+----------+------+-----+---------+-------+ 9 3 rows in set (0.00 sec)
4. 给表增加字段
使用 alter table 表名 add 字段名 数据类型; 为已存在的表添加一个新字段。
alter table Phone_table add color char(20);
1 mysql> alter table Phone_table add color char(20); 2 Query OK, 0 rows affected (0.40 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql> desc phone_table; 6 +-------+----------+------+-----+---------+-------+ 7 | Field | Type | Null | Key | Default | Extra | 8 +-------+----------+------+-----+---------+-------+ 9 | pid | int(11) | YES | | NULL | | 10 | name | char(20) | YES | | NULL | | 11 | price | int(11) | YES | | NULL | | 12 | color | char(20) | YES | | NULL | | 13 +-------+----------+------+-----+---------+-------+ 14 4 rows in set (0.00 sec)
添加后,刚才的表中多了一个字段,新增成功。
5. 删除表的字段
使用 alter table 表名 drop 字段名; 删除一个表中已存在的字段。
alter table phone_table drop price;
1 mysql> alter table phone_table drop price; 2 Query OK, 0 rows affected (0.32 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql> desc phone_table; 6 +-------+----------+------+-----+---------+-------+ 7 | Field | Type | Null | Key | Default | Extra | 8 +-------+----------+------+-----+---------+-------+ 9 | pid | int(11) | YES | | NULL | | 10 | name | char(20) | YES | | NULL | | 11 | color | char(20) | YES | | NULL | | 12 +-------+----------+------+-----+---------+-------+ 13 3 rows in set (0.00 sec)
删除字段后,表中不再有该字段。
6. 修改字段的数据类型
使用 alter table 表名 modify 字段名 数据类型; 修改表中现有字段的数据类型。
alter table Phone_table modify name varchar(12);
1 mysql> alter table Phone_table modify name varchar(12); 2 Query OK, 0 rows affected (0.61 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql> desc phone_table; 6 +-------+-------------+------+-----+---------+-------+ 7 | Field | Type | Null | Key | Default | Extra | 8 +-------+-------------+------+-----+---------+-------+ 9 | pid | int(11) | YES | | NULL | | 10 | name | varchar(12) | YES | | NULL | | 11 | color | char(20) | YES | | NULL | | 12 +-------+-------------+------+-----+---------+-------+ 13 3 rows in set (0.00 sec)
7. 修改字段的数据类型并且改名
使用 alter table 表名 change 原字段名 新字段名 数据类型; 修改表中现有字段的字段名和类型。
alter table Phone_table change name pname char(18);
1 mysql> alter table Phone_table change name pname char(18); 2 Query OK, 0 rows affected (0.84 sec) 3 Records: 0 Duplicates: 0 Warnings: 0 4 5 mysql> desc phone_table; 6 +-------+----------+------+-----+---------+-------+ 7 | Field | Type | Null | Key | Default | Extra | 8 +-------+----------+------+-----+---------+-------+ 9 | pid | int(11) | YES | | NULL | | 10 | pname | char(18) | YES | | NULL | | 11 | color | char(20) | YES | | NULL | | 12 +-------+----------+------+-----+---------+-------+ 13 3 rows in set (0.00 sec)
现在,将表的 name 改成了 pname ,同时修改了 pname 的数据类型。