mysql 存储

定义

1.数据库:数据库运营在一个服务器中,类似于一个进行数据存储的仓库,数据按照一定的规则存储,可以对数据库中的数据进行增删改查的操作。
2.表:我们常用的二维表格,有表的名字,表的各项标题名。
3.字段 : 一个成员,它表示与对象或类关联的变量。 在数据库中,大多数时,表的“列”称为“字段” ,但是有时候,字段也不是表中的列。
4.内容:字段的信息数据

怎么在电脑里面建立可以存储内容的数据库和表?

建立可以存储内容的数据库:

1.登陆 MySQL 服务
2.输入用户密码
3.CREATE DATABASE 数据库名;
例:

mysql> create database runoob;
Query OK, 1 row affected (0.01 sec)

建立可以存储内容的数据表:

创建MySQL数据表需要以下信息:
表名
表字段名
定义每个表字段

通用语法:
CREATE TABLE table_name (column_name column_type);
column:字段,表中的每一列
例:

Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_tbl(
   -> runoob_id INT NOT NULL AUTO_INCREMENT,
   -> runoob_title VARCHAR(100) NOT NULL,
   -> runoob_author VARCHAR(40) NOT NULL,
   -> submission_date DATE,
   -> PRIMARY KEY ( runoob_id )
   -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.16 sec)
mysql>

以上的操作是在命令提示窗口中完成的。mysql在某些情况下是区分大小写的,某些情况下是不区分的,所以,就严格区分大小写吧。

都有啥类型可以使用?

MySQL支持多种类型,大致可以分为三类:
· 数值、
· 日期/时间
· 字符串(字符)类型

数值类型

这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

日期和时间类型

示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

字符串类型

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

增加、删除、修改、查询一条记录的语句怎么写

增加数据

向MySQL数据表插入数据通用的 INSERT INTO SQL语法:

INSERT INTO table_name ( field1, field2,...fieldN )
                       VALUES
                       ( value1, value2,...valueN );

实例:

Enter password:*******
mysql> use RUNOOB;
Database changed
mysql> INSERT INTO runoob_tbl 
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 PHP", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("学习 MySQL", "菜鸟教程", NOW());
Query OK, 1 rows affected, 1 warnings (0.01 sec)
mysql> INSERT INTO runoob_tbl
    -> (runoob_title, runoob_author, submission_date)
    -> VALUES
    -> ("JAVA 教程", "RUNOOB.COM", '2016-05-06');
Query OK, 1 rows affected (0.00 sec)

用箭头标记 -> 不是 SQL 语句的一部分,它仅仅表示一个新行,如果一条SQL语句太长,我们可以通过回车键来创建一个新行来编写 SQL 语句,SQL 语句的命令结束符为分号 ;。

删除数据:DELETE

使用 WHERE 子句来删除 MySQL 数据表 runoob_tbl 所选的数据。
从 MySQL 数据表中删除数据的通用语法:
DELETE FROM table_name [WHERE Clause]

1.如果没有指定 WHERE 子句,MySQL 表中的所有记录将被删除。
2.可以在 WHERE 子句中指定任何条件。

实例:删除 runoob_tbl 表中 runoob_id 为3 的记录:

mysql> use RUNOOB;
Database changed
mysql> DELETE FROM runoob_tbl WHERE runoob_id=3;
Query OK, 1 row affected (0.23 sec)

修改数据:UPDATE

通用语法:

UPDATE table_name SET field1=new-value1, field2=new-value2
[WHERE Clause]

1.可同时更新一个或多个字段。
2.可在 WHERE 子句中指定任何条件。
3.可在一个单独表中同时更新数据。

实例:更新数据表中 runoob_id 为 3 的 runoob_title 字段值:

mysql> UPDATE runoob_tbl SET runoob_title='学习 C++' WHERE runoob_id=3;
Query OK, 1 rows affected (0.01 sec)

查询数据

通用的 SELECT 语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]

1.查询语句中可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件
2.SELECT 命令可以读取一条或者多条记录
3.可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据 (这是一个窍门,实例中就是这样操作的)
4.WHERE 语句可包含任何条件
5.可使用 LIMIT 属性来设定返回的记录数
6.可通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0

实例:返回数据表 runoob_tbl 的所有记录

select * from runoob_tbl;

怎么把两张表连在一起?

JOIN 按照功能大致分为如下三类:

INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

INNER JOIN

实例:连接两张表 tcount_tbl 和 runoob_tbl
测试实例数据:

mysql> use RUNOOB;
Database changed
mysql> SELECT * FROM tcount_tbl;
+---------------+--------------+
| runoob_author | runoob_count |
+---------------+--------------+
| 菜鸟教程  | 10           |
| RUNOOB.COM    | 20           |
| Google        | 22           |
+---------------+--------------+
3 rows in set (0.01 sec)
 
mysql> SELECT * from runoob_tbl;
+-----------+---------------+---------------+-----------------+
| runoob_id | runoob_title  | runoob_author | submission_date |
+-----------+---------------+---------------+-----------------+
| 1         | 学习 PHP    | 菜鸟教程  | 2017-04-12      |
| 2         | 学习 MySQL  | 菜鸟教程  | 2017-04-12      |
| 3         | 学习 Java   | RUNOOB.COM    | 2015-05-01      |
| 4         | 学习 Python | RUNOOB.COM    | 2016-03-06      |
| 5         | 学习 C      | FK            | 2017-04-05      |
+-----------+---------------+---------------+-----------------+
5 rows in set (0.01 sec)

读取runoob_tbl表中所有runoob_author字段在tcount_tbl表对应的runoob_count字段值:

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a INNER JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.00 sec)

解释:选择runoob中的id、author、count作为字段名(runoob中原本没有id,但是对应在tcount中存在,所以自动创建了id)。创建的新表中,是原先两个表author相等的数据。
以上 SQL 语句等价于:

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a, tcount_tbl b WHERE a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
+-------------+-----------------+----------------+
4 rows in set (0.01 sec)
image.png

LEFT JOIN

LEFT JOIN 会读取左边数据表的全部数据,即便右边表无对应数据。
实例:以 runoob_tbl 为左表,tcount_tbl 为右表

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a LEFT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 菜鸟教程    | 10             |
| 2           | 菜鸟教程    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| 5           | FK              | NULL           |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)

以上实例中使用了 LEFT JOIN,该语句会读取左边的数据表 runoob_tbl 的所有选取的字段数据,即便在右侧表 tcount_tbl中 没有对应的 runoob_author 字段值。

解释:runoob中本没有id部分,由于被select了,所以按顺序增添了id。同时选择了author和count,所在author和count部分做交集。全无则无,单无则NULL。

RIGHT JOIN

会读取右边数据表的全部数据,即便左边边表无对应数据。

实例:以 runoob_tbl 为左表,tcount_tbl 为右表

mysql> SELECT a.runoob_id, a.runoob_author, b.runoob_count FROM runoob_tbl a RIGHT JOIN tcount_tbl b ON a.runoob_author = b.runoob_author;
+-------------+-----------------+----------------+
| a.runoob_id | a.runoob_author | b.runoob_count |
+-------------+-----------------+----------------+
| 1           | 你滴寒王    | 10             |
| 2           | 你滴寒王    | 10             |
| 3           | RUNOOB.COM      | 20             |
| 4           | RUNOOB.COM      | 20             |
| NULL        | NULL            | 22             |
+-------------+-----------------+----------------+
5 rows in set (0.01 sec)
image

解释:和LEFT JOIN同理

总结:mysql依然需要记忆大量的语法,但是基本逻辑要明确。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,062评论 0 19
  • 惯例,开篇一张图,内容全靠编!! MySQL是一种关系型数据库,同样属关系型数据库的还有SQLite、Oracle...
    SamBrother阅读 5,718评论 0 16
  • MySQL存储引擎 MySQL是插件式存储存储引擎,支持多种存储引擎常见的存储引擎有:MyISAM, Aria, ...
    Net夜风阅读 726评论 0 1
  • 在 Python2 中,连接 MySQL 的库大多是使用 MySQLDB,但是此库官方并不支持 Python3,所...
    何苦_python_java阅读 297评论 0 0
  • 插件式存储引擎架构,灵活的处理方式,高度可定制化及完全开放的实现 MySQL存储引擎概述 MyISAM存储引擎是M...
    每天学点编程阅读 1,293评论 0 5