数据库和表
库的操作
MySQL 是一个数据管理系统DBMS。 一个DBMS上可以有多个数据库。
我们 可以通过mysql 的命令行客户端,使用SQL语句对DBMS 的数据库进行管理
Windows 上直接双击 安装好的 MySQL 8.0 Command Line Client - Unicode 程序,然后以root账户的密码登录
Linux上 执行 命令 mysql -uuser1 -p
,要求进入mysql命令行客户端。
界面显示如下,要求我们提供user1用户密码
输入你设置的user1用户密码即可。
这是,系统显示
我们就可以输入sql语句命令了。
列出所有数据库
我们可以使用如下SQL语句 SHOW DATABASES;
来查看系统中目前有哪些数据库。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
注意SQL语句最后有一个分号。
SQL 语句的关键字 是 大小写不敏感的,你也可以这样写 show databases;
上面的结果显示系统中目前有 4 个数据库 名字分别为
注意,这些数据库 是安装好MySQL系统后,MySQL自行创建的,维护整个数据库系统用的信息数据库。
我们要创建自己的数据库,需要我们执行SQL语句来创建。
创建、删除数据库
我们可以执行如下SQL语句来创建名为byhy的数据库
然后再查看系统有哪些数据库,结果就会包含刚刚创建的数据库,如下
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| byhy |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
数据库里面会存储字符串数据,字符串数据就涉及到采用何种编码的问题。
如果只是简单的输入 CREATE DATABASE byhy
这样的命令,字符编码通常默认是 latin编码, 通常不适合中文。
通常我们应该指定utf8的编码,需要这样写
如果你确定要删除一个数据库,使用命令 DROP DATABASE
注意,SQL 语句的关键字 是 大小写不敏感的,但是 上面的数据库名字是大小写敏感的,你不能这样写 DROP DATABASE BYHY;
数据库导出、导入
导出
执行下面的命令可以把byhy数据库里面所有的数据导出为sql数据文件
其中, username
替换为实际使用的账号, dbname
换成你实际的数据库名
执行后,需要输入用户对应的密码
导入
执行下面的命令可以把 导出为sql数据文件 的数据 导入到 数据库 dbname 中
执行后,需要输入用户对应的密码
HeidiSQL管理数据库
我们也可以使用有图形界面的数据库管理工具 HeidiSQL 来管理数据库。
按照上一篇文章介绍的方法设置好 HeidiSQL 的会话管理后,连接上我们Linux上面的数据库服务。
要通过HeidiSQL上添加、删除、修改数据库,可以使用界面的菜单,也可以输入命令。具体操作请看下面的视频讲解。
表的操作
MySQL数据库的信息基本都是存在表里面的。
我们可以通过mysql命令行客户端对数据库表进行操作。
执行 命令 mysql -uuser1 -p
,输入密码后,进入mysql命令行客户端。
要对表进行操作,首先要指明你操作的是哪个数据库。应该使用 use
,如下所示
use byhy;
表示我们要操作的数据库名称是 byhy。
您需要高效学习,找工作? 点击咨询 报名实战班
点击查看学员就业情况
列出当前数据库中所有表
我们可以使用如下SQL语句 show tables;
来查看当前数据库里有哪些表。
上面的结果显示byhy数据库中没有表,因为我们前面只是创建一个空的数据库。
创建表
要创建表,最主要的是要指明表中的各个字段
我们可以执行如下SQL语句来创建名为user的表
CREATE TABLE user (
id int NOT NULL AUTO_INCREMENT,
username varchar(150) NOT NULL,
`password` varchar(128) NOT NULL,
realname varchar(30) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
CREATE TABLE
就是创建 表的 SQL 语句 后面跟 表的名字,这里就是 user 作为表名。
接下来括号里面的 是表中 各列的数据类型、特性的描述。
前面 4 行指定了该表中有 4 列, 每列的 名字分别为 id、username、password、realname。
其中 id 是整数类型, 其他的都是字符串类型。
由于 password正好 是MySQL的一个关键字, 我们的字段名如果和关键字重名,应该用反引号 把字段包起来,表示这不是关键字。
其中:
NOT NULL
表示这列的数据不能为空。 就是每条记录,这一列里面一定要有数据内容。
AUTO_INCREMENT
表示该列中的字段内容是自动递增的,也就是从1开始,添加一条记录id字段的值就自动加1
通常每张表,就应该有个 AUTO_INCREMENT 的 id字段, 为每条记录 产生一个编号。
PRIMARY KEY (id)
这行 指定了id这列作为主键。 主键的概念,我们后面会讲。
最后面的 ENGINE=InnoDB
指定了该表使用 InnoDB 作为该表的存储引擎(storage engine)。 MySQL有两种存储引擎 MyISAM 和 InnoDB。 不同存储引擎使用不同的方法来对表数据存储和读取。 表数据不同的使用方式,不同的存储引擎效率不一样。
大部分情况下,我们应该使用InnoDB。
在 MySQL 5.5.5 以后,缺省的存储引擎就是 InnoDB ,所以也可以不指定存储引擎,就是InnoDB。
上面的例子中,包括了两种类型的列:int 和 varchar。
MySQL 支持 很多种列数据类型, 具体可以参考 MySQL官方网站
不同的数据类型存储不同的数据。 比如 年龄 适合用 SMALLINT, 而 名字 适合用 CHAR 或者 VARCHAR, 出生日期 适合用 DATETIME。
查看表结构
执行了上面的命令后,我们可以通过 HeidiSQL 看到,创建了这样一张表。
也可以通过命令行 SHOW CREATE TABLE user\G
来查看创建表的语句,从而查看表的结构
mysql> show create table user\G
*************************** 1. row ***************************
Table: user
Create Table: CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(150) NOT NULL,
`password` varchar(128) NOT NULL,
`realname` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)****
删除表
如果你确定要删除一张表,使用命令 DROP TABLE
注意,SQL 语句的关键字 是 大小写不敏感的,但是 上面的表名字是大小写敏感的,你不能这样写 DROP TABLE USER;
更改表名字
要更改表的名字,可以使用命令 RENAME TABLE
,可以一次修改多个表的名字。
修改表结构
修改表结构包括很多种处理 : 添加、删除、重命名 列, 添加、删除、修改索引、主键等等。
具体可以参考 MySQL官方网站
这里列出几个,比较常见的操作。
添加列
如果要在user表中添加两列 description 和 qq
mysql> ALTER TABLE user ADD `description` varchar(850) NOT NULL, ADD `qq` varchar(20) NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
删除列
如果要在user表中删除两列 description 和 qq
mysql> ALTER TABLE user DROP `description` , DROP `qq`;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改列
如果要在user表中修改列 realname 名字为 realname1
mysql> ALTER TABLE user CHANGE `realname` `realname1` varchar(30) NOT NULL;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
如果要在user表中修改列 realname 名字为 realname1, 并且修改类型
为 char(30)
mysql> ALTER TABLE user CHANGE `realname` `realname1` char(30) NOT NULL;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0