MySQL基本操作

CREATE

DATABASE

CREATE DATABASE uoj_app233;

TABLE

CREATE TABLE UserInfo (
    column1 datatype [constraint],
    column2 datatype [constraint],
    column3 datatype [constraint],
    ......
);

SQL约束

  • SQL约束为表中的数据指定规则
  • 约束用于限制可以进入表中的数据类型,确保了表中数据的准确性和可靠性,如果约束和数据操作之间存在任何冲突,则操作将中止
  • 列级约束&表级约束
约束 含义
NOT NULL 指示某列不能存储空值
UNIQUE 保证某列的每行必须有唯一的值
PRIMARY KEY NOT NULLUNIQUE的结合
FOREIGN KEY 确保一个表中的数据匹配另一个表中的值的参照完整性
CHECK 保证列中的值符合指定的条件
DEFAULT 规定没有给列赋值时的默认值
INDEX 索引用于非常快速地从数据库中创建和检索数据

MySQL

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CHECK (Age>=18)
);

SQL Server/Oracle/MS Access

CREATE TABLE Persons(
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int CHECK (Age>=18)
);

如果要命名CHECK约束,以及为多个列定义CHECK约束,可以使用:

MySQL/SQL Server/Oracle/MS Access

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255),
    CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);

DROP

DROP DATABASE uoj_app233;
  • 删除数据库之前要小心,删除数据库将导致数据库中存储的完整信息丢失

SHOW

SHOW DATABASES;
SHOW TABLES;

查看数据库

show databases;                 //输出所有数据库
use <database-name>;            //切换到数据库
show tables;                    //展示当前数据库下的所有表
show index from <table-name>;   //展示一个表的表头

表操作

rename table <old-table-name> to <new-table-name>;  //重命名表

SELECT

  • MySQL中SELECT不一定要FROM子句
SELECT 1+1;
SELECT NOW();
SELECT CONCAT('John', ' ', 'Doe');
  • 如果希望使用FROM子句,但不想引用表,可以使用dual表
SELECT select_list FROM dual;
  • 可以用AS为列分配别名,使得回答更具有可读性
SELECT CONCAT('Jane',' ','Doe') AS 'Full Name';

ORDER BY

  • 使用ORDER BY子句,按一列或多列对结果集进行排序
  • 使用ASC选项按升序对结果集进行排序,使用DESC选项按降序对结果集进行排序
SELECT ... FROM ... ORDER BY column1 ASC, column2 DESC;
SELECT orderNumber, quantityOrdered * priceEach AS subtotal
FROM orderDetails
ORDER BY subtotal DESC;
  • ORDER BY子句总是在FROM和SELECT子句之后计算
  • 在MySQL中,NULL低于非NULL值

假设我需要根据销售订单的状态按以下顺序对销售订单进行排序:

  • Processing
  • On Hold
  • Cancelled
  • Resolved
  • Disputed
  • Shipped
SELECT orderNumber, orderStatus
FROM orders
ORDER BY FIELD(orderStatus, 'Processing','On Hold', 'Cancelled', 'Resolved',  'Disputed', 'Shipped')

WHERE

可以在SELECT、UPDATE和DELETE语句中使用WHERE

  • 使用WHERE子句按条件过滤行
  • MySQL在FROM子句之后,SELECT和ORDER BY子句之前评估WHERE子句

LIMIT/TOP/ROWNUM

MySQL语法

SELECT * FROM Customers LIMIT 5; 

SQL Server语法

SELECT TOP 50 PERCENT * FROM Customers;
  • 使用这些子句来限制SELECT语句返回的行数,在包含数千条记录的大型表很有用,返回大量记录可能会影响性能

INSERT INTO

  • 使用INSERT INTO语句向表格中插入新的行

UPDATE

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
  • 使用UPDATE语句修改表中的现有记录
  • 如果忽略了WHERE子句,那么所有的记录都会被更新

DELETE

DELETE FROM table_name WHERE condition;
  • 使用DELETE语句删除表中的记录
  • 如果忽略了WHERE子句,那么所有的记录都会被删除,但该表格仍然存在

集函数

MIN()

SELECT MIN(Price) AS SmallestPrice FROM Products;
  • 返回一列中的最小值,NULL值不包含在计算中

MAX()

SELECT MAX(Price) AS LargestPrice FROM Products;
  • 返回一列中的最大值,NULL值不包含在计算中

COUNT()

SELECT COUNT(ProductID) FROM Products;
  • 返回匹配指定条件的行数

AVG()

SELECT AVG(Price) FROM Products;
  • 返回数值列的平均值,NULL值不包括在计算中

SUM()

SELECT SUM(Quantity) FROM OrderDetails;
  • 返回数值列的求和结果

通配符

SQL Server中的通配符

符号 描述 例子
% 代表零个或多个字符 bl% finds bl, black, blue and blob
_ 代表单个字符 h_t find hot, hat and hit
[] 表示括号内的任意单个字符 h[oa]t finds hot and hat
^ 表示任何不在括号中的字符 h[^oa]t finds hit, but not hot and hat
- 代表一系列字符 c[a-b]t finds cat and cbt