由于关系型太大和复杂,所以一般使用“非关系型数据”来表示其他类型的数据库
非关系型的模型比如:
数据库是一个有组织的数据集合,它们被存储在计算机上以便于管理和访问。数据库的主要目的是为了存储和管理数据,同时使数据能够被高效地访问、检索和更新。
数据库的主要用途包括:
数据库使用步骤:登录MySQL => 创建数据库 => 切换到指定数据库 => 创建表 => 使用表。
关系:数据库服务器 => 数据库 => 表,从左到右为一对多的关系。
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name
显示数据库语句:
SHOW DATABASES
显示数据库创建语句:
SHOW CREATE DATABASE db_name
数据库删除语句:
DROP DATABASE [IF EXISTS] db_name
DEFAULT CHARSET :指定数据库采用的字符集
切换数据库
use db_name;
查看当前使用的数据库
select database();
要创建一个新的表,需要使用SQL中的CREATE TABLE语句,并指定表名、列名和数据类型等信息。以下是一个基本的创建表的语法示例:
CREATE TABLE [IF NOT EXISTS] students( id VARCHAR(255) PRIMARY KEY, name VARCHAR(255) NOT NULL, age INT, gender VARCHAR(255), clazz VARCHAR(255) ); PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据表时如果输入该字段的数据为NULL ,就会报错。
加载本地数据:LOAD DATA local INFILE ‘students.txt’ INTO TABLE students FIELDS TERMINATED BY ‘,’ ;
使用 ALTER TABLE 语句追加, 修改, 或删除列的语法。
-- 增加列 alter table students add length float; -- 修改列类型,属性 alter table students modify length int not null; -- 删除列 alter table students drop length; --修改表的名称 rename table students to student; --修改列的名称 alter table student change id sid varchar(255); --修改表的字符集 alter table student character set utf8; 数据类型
数值类型:INT、BIGINT、FLOAT、DOUBLE,DECIMAL等。
字符串类型:CHAR、VARCHAR、TEXT等。
日期和时间类型:DATE、DATETIME、TIMESTAMP等。
二进制类型:BLOB、LONGBLOB、VARBINARY等。
枚举类型:ENUM。
集合类型:SET。
约束

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。
字符串类型 主要是:varchar和char, UTF-8:一个汉字=3个字节 GBK:一个汉字=2个字节。
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR
示例:
CREATE TABLE users ( id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE, password VARCHAR(100) NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, age INT CHECK(age >= 18), address TEXT, role ENUM('admin', 'user') DEFAULT 'user' ); 这个语句将创建一个名为users的表,包含多个列和约束。其中id列是主键,name列是非空字符串,email列是唯一的,password列是非空字符串,created_at列是日期时间类型,updated_at列是日期时间类型,但在更新时会自动更新,age列使用检查约束以确保其值大于等于18,address列是文本类型,role列是枚举类型,且默认值为’user’。
PRIMARY KEY 是一列或一组列,其值唯一标识表中的每一行。一个表只能有一个PRIMARY KEY。在表创建时,可以指定其中的一列为主键,也可以使用多列来组合作为主键。对于多列组合主键,它们的值的组合必须是唯一的。
CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50), age INT ); AUTO_INCREMENT是一种MySQL特有的属性,它允许一个整数列自动增长,每次插入新行时自动递增。这通常用于为表创建一个唯一的、自动生成的数字标识符。必须将AUTO_INCREMENT属性与INTEGER数据类型一起使用,通常是使用INT或BIGINT数据类型。
CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) ); 在上面的代码中,每次插入一行时,MySQL将自动为id列生成一个新的唯一值,而不需要手动为该列指定一个值。这使得插入新行时更加方便,同时也确保每个行都有一个唯一的标识符。
假设有一个“学生”数据表,其中包含学生ID、姓名和电子邮件地址。为了确保每个学生的电子邮件地址是唯一的,可以在“电子邮件地址”列上创建UNIQUE约束。
CREATE TABLE students ( student_id INT PRIMARY KEY, name VARCHAR(50) NOT NULL, email VARCHAR(100) UNIQUE ); 在上面的代码中,我们创建了一个名为“students”的数据表,并在“email”列上创建了一个UNIQUE约束。这将确保每个学生的电子邮件地址是唯一的。
假设有一个“订单”数据表和一个“产品”数据表,其中“订单”表包含订单ID、订单日期和产品ID,而“产品”表包含产品ID、产品名称和产品价格。为了确保订单中的每个产品ID都是有效的,可以在“订单”表中为“产品ID”列创建FOREIGN KEY约束,该约束参照“产品”表中的“产品ID”列。
CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(50) NOT NULL, price DECIMAL(8, 2) NOT NULL ); CREATE TABLE orders ( order_id INT PRIMARY KEY, order_date DATE NOT NULL, product_id INT, FOREIGN KEY (product_id) REFERENCES products(product_id) ); 在上面的代码中,我们创建了一个名为“products”的数据表和一个名为“orders”的数据表,并在“orders”表中为“product_id”列创建了一个FOREIGN KEY约束。这将确保订单中的每个产品ID都是有效的,并且参照了“products”表中的产品ID列。
SQL(Structured Query Language)是一种标准化的关系型数据库管理系统,主要用于管理和查询数据库中的数据。
Structured Query Language, 结构化查询语言
非过程性语言
为加强SQL的语言能力,各厂商增强了过程性语言的特征
如Oracle的PL/SQL 过程性处理能力
SQL Server、Sybase的T-SQL
SQL是用来存取关系数据库的语言,具有查询、操纵、定义和控制关系型数据库的四方面功能
DDL
DML
DCL
DQL
SELECT语法是一种用于查询数据库中数据的SQL语句。其基本语法如下:
SELECT column1, column2, ... FROM table_name WHERE condition; 其中,SELECT关键字用于指定要查询的列,可以使用*代表所有列;FROM关键字用于指定要查询的表;WHERE关键字用于指定查询的条件。
select * from student where sex=’男’; INSERT语句用于向数据库中插入新的数据行。其基本语法如下:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...); 其中,table_name是要插入数据的表名,column1、column2等是表中的列名,value1、value2等是要插入的值。
UPDATE语句用于修改数据库中已有的数据行。其基本语法如下:
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE some_column = some_value; 其中,table_name是要更新数据的表名,column1、column2等是要修改的列名,value1、value2等是要修改的值,WHERE子句是用于指定要更新的行的条件。
DELETE语句用于删除数据库中的数据行。其基本语法如下:
DELETE FROM table_name WHERE some_column = some_value; 其中,table_name是要删除数据的表名,WHERE子句是用于指定要删除的行的条件。
注意:如果不指定条件相当于删除表中所有数据
基本查询是SQL中最常用的操作之一,它允许用户从数据库表中检索数据。这些查询通常使用SELECT语句来执行。
模糊搜索
WHERE子句还可以使用LIKE运算符进行模糊搜索。例如:
SELECT * FROM students WHERE clazz like ‘文科%’ 返回名字以字母“文科”开头的所有学生。
select * from students where clazz in ('文科一班','文科二班','文科三班'); 返回名字以字母”文科一班’,‘文科二班’,'文科三班’的学生。
--BETWEEN AND select * from students where age BETWEEN 22 AND 24; 返回年龄在22到24的学生
ORDER BY子句用于对查询结果按照一个或多个列进行排序。它接受一个或多个列名或表达式作为参数,并可指定每个列的排序方式(升序或降序)。语法如下:
--ASC:升序,DESC:降序 SELECT column1, column2, ... FROM table_name ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ... GROUP BY子句用于将查询结果按照一个或多个列进行分组,并对每个组进行聚合计算(如COUNT、SUM、AVG等)。语法如下:
SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name GROUP BY column1, column2, ... HAVING子句用于对分组后的结果进行过滤,只返回符合条件的分组。它接受一个或多个聚合函数作为参数,并可指定每个函数的过滤条件。语法如下:
SELECT column1, column2, ..., aggregate_function(column_name) FROM table_name GROUP BY column1, column2, ... HAVING condition; LIMIT用于限制查询结果集的行数。其语法如下:
SELECT column1, column2, ... FROM table_name LIMIT number; 其中,number是你想要返回的行数。
OFFSET用于指定查询结果集的偏移量。其语法如下:
SELECT column1, column2, ... FROM table_name LIMIT number OFFSET offset; 其中,number是你想要返回的行数,offset是从查询结果集的起始位置偏移的行数。