数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。
每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。
我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。
所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。
RDBMS
所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。
RDBMS即关系数据库管理系统(Relational Database Management System)
特点
- 数据以表格的形式出现
- 每行为各种记录名称
- 每列为记录名称所对应的数据域
- 许多的行和列组成一张表单
- 若干的表单组成database
基本概念
数据库: 数据库是一些关联表的集合。
数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
外键:外键用于关联两个表。
复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。
spl
大小写
SQL 对大小写不敏感:SELECT 与 select 是相同的。
分号
某些数据库系统要求在每条 SQL 语句的末端使用分号。
分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
SQL命令
- CREATE DATABASE - 创建新数据库
实例:
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0.01 sec)
mysql> use test
Database changed
mysql> SHOW TABLES;
Empty set (0.00 sec)
- CREATE TABLE - 创建新表
SQL CREATE TABLE 语法
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
column_name 参数规定表中列的名称。
data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
size 参数规定表中列的最大长度。
实例:
mysql> CREATE TABLE test_tbl(id int,val varchar(255));
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| test_tbl |
+----------------+
1 row in set (0.00 sec)
- INSERT INTO - 向数据库中插入新数据
INSERT INTO 语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
实例:
mysql> INSERT INTO test_tbl
-> VALUES (1,2);
Query OK, 1 row affected (0.00 sec)
- SELECT,SELECT DISTINCT - 从数据库中提取数据
SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。
mysql> SELECT id,val FROM test_tbl;
+------+------+
| id | val |
+------+------+
| 1 | 2 |
+------+------+
1 row in set (0.00 sec)
因为此表只有两个列,所以效果等同于:SELECT * FROM Websites;
。
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。
DISTINCT 关键词用于返回唯一不同的值。
SQL SELECT DISTINCT 语法
SELECT DISTINCT column_name,column_name
FROM table_name;
- WHERE,AND,OR-过滤
WHERE 子句用于提取那些满足指定条件的记录。
SQL WHERE 语法
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
实例:
mysql> SELECT * FROM test_tbl;
+------+------+
| id | val |
+------+------+
| 1 | 2 |
| 2 | 3 |
| 3 | 3 |
| 3 | 4 |
+------+------+
4 rows in set (0.00 sec)
mysql> SELECT * FROM test_tbl
-> WHERE val>3
-> AND val<5;
+------+------+
| id | val |
+------+------+
| 3 | 4 |
+------+------+
1 row in set (0.00 sec)
- ORDER BY,排序
SQL ORDER BY 语法
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
- UPDATE - 更新数据库中的数据
SQL UPDATE 语法
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
- DELETE - 从数据库中删除数据
SQL DELETE 语法
DELETE FROM table_name
WHERE some_column=some_value;
- DELETE-删除表中的行
DELETE 语句用于删除表中的行。
SQL DELETE 语法
DELETE FROM table_name
WHERE some_column=some_value;
- CREATE INDEX - 创建索引(搜索键)
在表上创建一个简单的索引。允许使用重复的值:
CREATE INDEX index_name
ON table_name (column_name)
SQL CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
- DROP INDEX - 删除索引
用于 MySQL 的 DROP INDEX 语法:
ALTER TABLE table_name DROP INDEX index_name
- ALTER TABLE - 变更(改变)数据库表
ALTER TABLE 语句用于在已有的表中添加、删除或修改列。
SQL ALTER TABLE 语法
如需在表中添加列,请使用下面的语法:
ALTER TABLE table_name
ADD column_name datatype
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
ALTER TABLE table_name
DROP COLUMN column_name
-
ALTER DATABASE - 修改数据库
-
DROP TABLE - 删除表
DROP TABLE 语句用于删除表。
DROP TABLE table_name
- DROP DATABASE - 删除数据库。
语法:
DROP DATABASE database_name
spl和myspl的区别
MySQL与oracle,Microsoft access等一样,是关系型数据库,是一个用于存储的工具。而sql与java,Python一样,是一种数据库查询语言。通常关系型数据库都是支持用sql语言进行增删改查操作的。
myspq
报错
不知道是不是wsl的原因,还是教程不靠谱,出了好几个错误,参考下面解决的: