数据库和表

库的操作


点击这里,看视频讲解,学习下面内容

MySQL 是一个数据管理系统DBMS。 一个DBMS上可以有多个数据库。

我们 可以通过mysql 的命令行客户端,使用SQL语句对DBMS 的数据库进行管理

执行 命令 mysql -uuser1 -p ,要求进入mysql命令行客户端。

界面显示如下,要求我们提供user1用户密码

Enter password:

输入你设置的user1用户密码即可。

这是,系统显示

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

我们就可以输入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 个数据库 名字分别为

information_schema
mysql
performance_schema
sys 

注意,这些数据库 是安装好MySQL系统后,MySQL自行创建的,维护整个数据库系统用的信息数据库。

我们要创建自己的数据库,需要我们执行SQL语句来创建。

创建、删除数据库

我们可以执行如下SQL语句来创建名为byhy的数据库

CREATE DATABASE byhy; 

然后再查看系统有哪些数据库,结果就会包含刚刚创建的数据库,如下

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| byhy               |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)


数据库里面会存储字符串数据,字符串数据就涉及到采用何种编码的问题。

如果只是简单的输入 CREATE DATABASE byhy 这样的命令,字符编码通常默认是 latin编码, 通常不适合中文。

通常我们应该指定utf8的编码,需要这样写

CREATE DATABASE byhy CHARACTER SET utf8mb4  COLLATE utf8mb4_unicode_520_ci;


如果你确定要删除一个数据库,使用命令 DROP DATABASE

mysql> DROP DATABASE byhy;
Query OK, 0 rows affected (0.04 sec)

注意,SQL 语句的关键字 是 大小写不敏感的,但是 上面的数据库名字是大小写敏感的,你不能这样写 DROP DATABASE BYHY;


HeidiSQL管理数据库

我们也可以使用有图形界面的数据库管理工具 HeidiSQL 来管理数据库。

按照上一篇文章介绍的方法设置好 HeidiSQL 的会话管理后,连接上我们Linux上面的数据库服务。

要通过HeidiSQL上添加、删除、修改数据库,可以使用界面的菜单,也可以输入命令。具体操作请看下面的视频讲解。


表的操作


点击这里,看视频讲解,学习下面内容

MySQL数据库的信息基本都是存在表里面的。

我们可以通过mysql命令行客户端对数据库表进行操作。

执行 命令 mysql -uuser1 -p ,输入密码后,进入mysql命令行客户端。

要对表进行操作,首先要指明你操作的是哪个数据库。应该使用 use ,如下所示

mysql> use byhy;
Database changed

use byhy; 表示我们要操作的数据库名称是 byhy。

列出当前数据库中所有表

我们可以使用如下SQL语句 show tables; 来查看当前数据库里有哪些表。

mysql> show tables;
Empty set (0.00 sec)

上面的结果显示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 看到,创建了这样一张表。

image

也可以通过命令行 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

mysql> DROP TABLE user;
Query OK, 0 rows affected (0.01 sec)

注意,SQL 语句的关键字 是 大小写不敏感的,但是 上面的表名字是大小写敏感的,你不能这样写 DROP DATABASE USER;

更改表名字

要更改表的名字,可以使用命令 RENAME TABLE ,可以一次修改多个表的名字。

mysql> RENAME TABLE user TO by_user, medicine TO by_medicine;
Query OK, 0 rows affected (0.01 sec)

修改表结构

修改表结构包括很多种处理 : 添加、删除、重命名 列, 添加、删除、修改索引、主键等等。

具体可以参考 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



作业和练习

假设你现在要为一个医药公司 创建一个数据库系统。

里面有两张表,分别记录 用户信息 和 药品信息

使用 MySQL命令行客户端 执行下面的操作

  • 创建名为 Prac 的数据库

  • 在Prac库中添加 2 张表

    user 表,包含列: id,用户真实姓名、登录名、密码、注册日期、简述、等级

    medicine表,包含列:id,药品名、药品描述、药品编号,有效期截止时间,有效状态(0表示过期,1表示有效)

  • 再使用修改表结构的命令,在 user表中加上一列 用户电话号码

自己 判断各列 适合用哪种 数据类型。


扫码分享给朋友,一起学更有动力哦




上一页

下一页