定义
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)
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)
解释:和LEFT JOIN同理
总结:mysql依然需要记忆大量的语法,但是基本逻辑要明确。