前言:如何学习?
需求:快速掌握SQL基本概念,基本操作方法,快速补充自身数据库的知识短板。
目前自身情况:1. 熟悉Linux环境操作 2.学习时间有限 3. 英文程度尚可。
计划:分两阶段,首先第一阶段根据runoob快速掌握基本概念,并及时做题,每天大概两小时。一周内便可以基本掌握。第二阶段根据经典英文教材,此时学习目的变化,并非为了笔试和应试,纯粹更加熟练掌握数据库。
1. 基本概念
- SQL 是一种 ANSI(American National Standards Institute 美国国家标准化组织)标准的计算机语言
- RDBMS 指关系型数据库管理系统,全称 Relational Database Management System。RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server、IBM DB2、Oracle、MySQL 以及 Microsoft Access。
- RDBMS 中的数据存储在被称为表的数据库对象中。
- 表是相关的数据项的集合,它由列和行组成。
一种模糊的理解为:SQL为查询语言,其用来对数据库进行一系列操作,而数据库系统用来管理数据库,一个数据库可能由多个表组成。这里笔者选择MySQL作为日后学习的RDBMS系统。
2. 实践中学习SQL
使用yum
快速安装mysql-client
和mysql-server
,(mysql-server
为deamon
进程,受systemctl
管理,具体操作比较简单)最新的版本为
[root@localhost ~]# mysqladmin --version
mysqladmin Ver 9.1 Distrib 10.2.15-MariaDB, for Linux on x86_64
创建数据库,并选择该数据库:
SQL原语:CREATE DATABASE dbname;
首先查看默认的databases
:
//之前在UNP篇中很习惯这种C/S模型,上手很快
[root@localhost ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.2.15-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]>
使用sql语法创建新的数据库,并使用该数据库:
MariaDB [(none)]> create database dh;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| dh |
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use dh
Database changed
//none 变为dh
MariaDB [dh]>
创建数据表
SQL原语:CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
….
);
可以通过名字直观理解意思
MariaDB [dh]> CREATE TABLE dh_tl ( id INT AUTO_INCREMENT,name INT,goal VARCHAR(255) NOT NULL,PRIMARY KEY(id));
Query OK, 0 rows affected (0.04 sec)
MariaDB [dh]>
向数据表插入数据
SQL原语:
- INSERT INTO table_name (column1,column2,column3,…) VALUES (value1,value2,value3,…);
- INSERT INTO table_name VALUES (value1,value2,value3,…);
插入我自己随便定义的一组数据:
MariaDB [dh]> INSERT INTO dh_tl VALUES (1,'a',100);
Query OK, 1 row affected (0.01 sec)
MariaDB [dh]> INSERT INTO dh_tl VALUES (2,'b',99);
Query OK, 1 row affected (0.01 sec)
MariaDB [dh]> INSERT INTO dh_tl (name,goal) VALUES ('c',98);
Query OK, 1 row affected (0.81 sec)
MariaDB [dh]>
查询数据
SQL原语:
- SELECT column_name,column_name FROM table_name WHERE column_name operator value;
- SELECT * FROM table_name;
MySQL原语:
SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N] [ OFFSET M]
- 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
- SELECT 命令可以读取一条或者多条记录。
- 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据。
- 你可以使用 WHERE 语句来包含任何条件。
- 你可以使用 LIMIT 属性来设定返回的记录数。
- 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。
MariaDB [dh]> SELECT * FROM dh_tl;
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
| 2 | b | 99 |
| 3 | c | 98 |
+----+------+------+
3 rows in set (0.00 sec)
MariaDB [dh]> SELECT * FROM dh_tl WHERE id=1;
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
+----+------+------+
1 row in set (0.00 sec)
MariaDB [dh]> SELECT * FROM dh_tl WHERE id <> 1;
+----+------+------+
| id | name | goal |
+----+------+------+
| 2 | b | 99 |
| 3 | c | 98 |
+----+------+------+
2 rows in set (0.00 sec)
MariaDB [dh]> SELECT * FROM dh_tl WHERE id BETWEEN 1 AND 3;
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
| 2 | b | 99 |
| 3 | c | 98 |
+----+------+------+
3 rows in set (0.00 sec)
MariaDB [dh]> SELECT * FROM dh_tl WHERE id IN (1,3);
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
| 3 | c | 98 |
+----+------+------+
2 rows in set (0.00 sec)
MariaDB [dh]>
更新表内数据
SQL原语:UPDATE table_name SET column1=value1,column2=value2,… WHERE some_column=some_value;
MariaDB [dh]> UPDATE dh_tl SET name='d',goal=97 WHERE id =3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [dh]> SELECT * FROM dh_tl;
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
| 2 | b | 99 |
| 3 | d | 97 |
+----+------+------+
3 rows in set (0.00 sec)
MariaDB [dh]>
特别的,没有where的条件将用设置值更新整个表。
删除表内数据
SQL原语:DELETE FROM table_name WHERE some_column=some_value;
MariaDB [dh]> DELETE FROM dh_tl WHERE id=3;
Query OK, 1 row affected (0.03 sec)
MariaDB [dh]> SELECT * FROM dh_tl;
+----+------+------+
| id | name | goal |
+----+------+------+
| 1 | a | 100 |
| 2 | b | 99 |
+----+------+------+
2 rows in set (0.00 sec)
//表内数据全部删除
MariaDB [dh]> DELETE FROM dh_tl;
Query OK, 2 rows affected (0.01 sec)
//表的定义还在
MariaDB [dh]> SELECT * FROM dh_tl;
Empty set (0.00 sec)
//DROP删除直接彻底删除掉表
MariaDB [dh]> DROP TABLE dh_tl;
Query OK, 0 rows affected (0.05 sec)
MariaDB [dh]> SELECT * FROM dh_tl;
ERROR 1146 (42S02): Table 'dh.dh_tl' doesn't exist
MariaDB [dh]>
删除整个数据库
MariaDB [dh]> DROP DATABASE dh;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]>
3. 小结
初步学习了基本的创建、删除、插入、查询及更改语句,没有拘泥于DB数据类型及部分正则表达式,明天着重学习比较重要的索引概念。