数据库由一批数据构成的有序的集合;
数据库的发展大致分为:
其种类可分为:
数据库的定义很多,其中一个普遍的定义:数据库(DataBase ,DB)是一个长期存储在计算机内的,有组织的,有共享的,统一管理的数据集合。
数据库的特点:
在关系数据库中,数据库表是一系列二维数组的集合,用来存储数据和操作数据的逻辑结构。它由纵向的列和横向的行组成,行被称为记录,是组织数据的单位;列被称为字段,每一列表示记录的一个属性,都有相应的描述信息,如数据类型,数据宽度等;
数据类型决定了数据在计算机中的存储格式,代表不同的信息类型。常用的数据类型有:
主键(Primary Key)又称主码,用于唯一地标识表中的每一条记录。可以定义表中的一列或多列为主键,主键列上不能有两行相同的值,也不能为空值。
数据库系统由硬件部分和软件部分共同构成,硬件主要用于存储数据库中的数据,包括计算机、存储设备等。软件部分则主要包括DBMS,支持DBMS运行的操作系统,以及支持多种语言进行应用开发的访问技术等。
数据库系统主要有2个部分组成:
数据库提供了一个存储空间用以存储各种数据,可以将数据库视为一个存储数据的容器。一个数据库可能包含许多文件,一个数据库系统通常包括许多输数据库。
数据库管理系统(DataBase Management System,DBMS)是用户创建、管理和维护数据库时所使用的软件,位于用户和操作系统之间,对数据库进行统一管理。
虽然有了DBMS,但在很多情况下,DBMS无法满足对数据管理的要求,数据库应用程序(DataBase Application)的使用可以满足数据管理的更高要求;
对数据库进行查询和修改操作的语言叫做SQL。SQL的含义是结构化查询语言(Structured Query Language).SQL有许多不同的类型,有三个标准:
ANSI(美国国家标准机构)SQL,对ANSI SQL修改后在1992年采纳的标准,称为SQL-92或SQL2.最近的SQL-99标准,从SQL2扩充而来并增加了对象关系特征和许多新功能。其次,各大数据库厂商提供不同版本的SQL,这些版本的SQL不但能包括原始的ANSI标准,而且在很大程度上支持SQL-92标准;
SQL包含以下4个部分:
下面是一条SQL语句的例子,该语句声明创建一个名叫students的表:
首先启动数据库:
mysql -uroot -p
CREATE TABLE students
(
student_id INT UNSIGNED,
name VARCHAR(30),
sex CHAR(1),
birth DATE,
PRIMARY KEY (student_id)
);
出现:
ERROR 1046 (3D000): No database selected
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.41 sec)
mysql> use test;
Database changed
mysql> CREATE TABLE students
-> (
-> student_id INT UNSIGNED,
-> name VARCHAR(30),
-> sex CHAR(1),
-> birth DATE,
-> PRIMARY KEY (student_id)
-> );
Query OK, 0 rows affected (1.01 sec)
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| stu |
| students |
+----------------+
2 rows in set (0.04 sec)
该表中包含4个字段,分别为student_id、name、sex、birth,其中student_id定义为主键;
现在只是定义了一张表格,没有任何数据,接下来插入数据:
mysql> INSERT INTO students (student_id, name, sex, birth)
-> VALUES (41048101, 'Lucy Green', '1', '1997-11-01')
-> ;
Query OK, 1 row affected (0.26 sec)
执行完该语句后,students表中会增加一行记录,该记录中字段student_id的值为41048101,……;
再使用SELECT查询语句获取刚才插入的数据:
mysql> SELECT name FROM students WHERE student_id = 41048101;
+------------+
| name |
+------------+
| Lucy Green |
+------------+
1 row in set (0.02 sec)
不同的程序语言会有各种不同的数据库访问接口,程序语言通过这些接口,执行SQL语句,进行数据库管理,主要的数据库访问接口有:
针对不同的程序语言,MySQL提供了不同数据库的访问连接驱动;
MySQL是一个小型关系型数据库管理系统,与其它大型数据库管理系统(Oracle、DB2、SQL Server)相比,MySQL规模小、功能有限,但是它体积小】速度快、成本低;
安装指南
net start MySQL
net stop MySQL
mysql -h hostname -u username -p
mysql -h localhose -u root -p
查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
6 rows in set (0.39 sec)
创建:
mysql> create database database_name;
Query OK, 1 row affected (0.20 sec)
例3.1
mysql> create database test_db;
Query OK, 1 row affected (0.06 sec)
mysql> show create database test_db \G
*************************** 1. row ***************************
Database: test_db
Create Database: CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */
1 row in set (0.00 sec)
再次查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| database_name |
| information_schema |
| mydatabase |
| mysql |
| performance_schema |
| sys |
| test |
| test_db |
+--------------------+
8 rows in set (0.00 sec)
DROP DATABASE database_name
例3.2:
DROP DATABASE test_db;
使用DROP DATABASE命令时要非常谨慎,在执行该命令时,MySQL不会给出任何提示;
数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用数据引擎进行创建,查询,更新和删除操作;不同的引擎提供不同的存储机制,索引技巧,锁定水平等
MySQL5.7 支持的存储引擎有:
mysql> SHOW ENGINES \G
*************************** 1. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 2. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
*************************** 5. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6. row ***************************
Engine: MyISAM
Support: YES
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7. row ***************************
Engine: InnoDB
Support: DEFAULT
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 8. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
9 rows in set (0.04 sec)
备注:Support:YES表示可以使用,NO表示不能使用,DEFAULT表示该引擎为当前默认存储引擎;
在数据库中,数据表是数据库中最重要的、最基本的操作对象,是数据存储的基本单位。
创建数据表的过程是规定数据列的属性的过程。
数据表属于数据库,在创建数据表之前,应该使用:
use <数据库名>
指定在哪个数据库中进行,如果没有选择数据库,会出现:
No database selected
创建数据表的语句:
CREATE TABLE <表名>
(
字段名1, 数据类型 [列级别约束条件] [默认值],
字段名2, 数据类型 [列级别约束条件] [默认值],
……
[表级别约束条件]
);
注意:
例4.1:创建如下工作表
字段名称 | 数据类型 | 备注 |
---|---|---|
id | INT(11) | 员工编号 |
name | VARCHAR(25) | 员工名称 |
deptId | INT(11) | 所在部门编号 |
salary | FLOAT | 工资 |
步骤:
mysql> CREATE DATABASE test_db;
Query OK, 1 row affected (0.07 sec)
mysql> use test_db;
Database changed
mysql> CREATE TABLE tb_empl
-> (
-> id INT(11),
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.49 sec)
执行后,便创建了一个名称为tb_empl的数据表,使用:
SHOW TABLES;
语句可查看数据表是否创建成功;
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_empl |
+-------------------+
1 row in set (0.06 sec)
主键,又称主码,是表中一列或多列的组合。主键(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键可以唯一地标识表中的每一条记录,可以结合外键来定义不同数据表之间的关系,并且加快数据库查询的速度。
1、单字段主键
单字段主键由一个字段组成,SQL语句:
字段名 数据类型 PRIMARY KEY [默认值]
例4.2 定义数据表tb_emp2,其主键为id:
mysql> CREATE TABLE tb_emp2
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT
-> );
Query OK, 0 rows affected, 2 warnings (0.46 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp2 |
| tb_empl |
+-------------------+
2 rows in set (0.05 sec)
[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
例4.3:定义数据表tb_emp3:
mysql> CREATE TABLE tb_emp3
-> (
-> id INT(11) ,
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected, 2 warnings (0.37 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp2 |
| tb_emp3 |
| tb_empl |
+-------------------+
3 rows in set (0.00 sec)
2、多字段联合主键
主键由多个字段联合组成:
PRIMARY KEY [字段1, 字段2, ..., 字段n]
例4.4:定义数据表tb_emp4 , 假设表中间没有主键id,为了唯一确认一个员工,可以把name, deptId联合起来作为主键:
mysql> CREATE TABLE tb_emp4
-> (
-> name VARCHAR(25),
-> deptId INT(11),
-> salary FLOAT,
-> PRIMARY KEY(name, deptId)
-> );
Query OK, 0 rows affected, 1 warning (0.67 sec)
mysql> SHOW TABLES;
+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_emp2 |
| tb_emp3 |
| tb_emp4 |
| tb_empl |
+-------------------+
4 rows in set (0.00 sec)
外键用来在两个表的数据之间建立链接。它可以是一列或多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表外键可以为空值,若不为空值,则每个外键值必须等于另一个表中主键的某个值;
外键:首先它是一个字母,它可以不是本表的主键,但对应另外一个表的主键。外键的作用主要是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行;
创建外键的规则如下:
[CONSTRAINT <外键名>] FOREIGN KEY 字段名1 [, 字段名2, …]
REFERENCES <主表名> 主键列1 [, 主键列2, …]
“外键名”为定义的外键约束的名称。
例4.5:定义数据表tb_emp5,并在tb_emp5表上创建外键约束。
创建一个部门表tb_dept1,:
mysql> CREATE TABLE tb_dept1
-> (
-> id INT(11) PRIMARY KEY,
-> name VARCHAR(22) NOT NULL,
-> location VARCHAR(50)
-> );
Query OK, 0 rows affected, 1 warning (0.31 sec)
分享:
写作,是心灵的事业,是没有上下班界限的,不是只有正襟危坐才算写作。写作是一件令人遗憾的事业一—越追求完美,所感知的遗漏和瑕疵似乎也越多;写作的时间越长,惶惑、焦虑及不确定性似乎也与日俱增。