pymysql前传(一文详解SQL常见语句)

写在开始

  • 不同的数据库在实现具体功能时对应的SQL语句可能不能会不通,本篇博客以MySQL数据库作为例子
  • 本博客参考:
    菜鸟教程:SQL教程
    一文详解python中的数据库操作
  • 由于笔者水平有限,博客中难免会出现一些错误或者不准确的地方,烦请指点

SQL基础篇

结构化查询语言,用于管理关系数据库

  • 数据库常见操作为
    增:插入
    删:删除
    改:更新
    查:查询
  • SQL对大小写不敏感
  • 每条SQL语句末端使用分号是比较标准的写法

数据库与数据表

一个数据库通常包含一个或者多个数据表,每一个表都有一个姓名作为标识,表中包含带有数据的记录

创建数据库

//使用下面语句可以创建一个数据库
CREATE DATABASE dbname;

创建数据表

//使用下面的语句可以创建一个数据表,其中columns表示列名,data_type规定了该列的数据类型,size规定了该列中数据的最大长度
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
//举例:创建一个名为books的数据表
CREATE TABLE books(
    id int(8) NOT NULL AUTO_INCREMENT,
    name varchar(50) NOT NULL,
    category varchar(50) NOT NULL,
    price decimal(10,2) DEFAULT NULL,
    publish_time date DEFAULT NULL,
    PRIMARY KEY(id)
)

sql约束

在上面创建一个数据表的举例中我们看到了其他的sql约束语句比如NOT NULL PRIMARY KEY等,sql约束常常用来规定表中的数据规则,下面我们来看一下SQL中的常见约束

NOT NULL

强制该列数据不接受NULL值,当插入或更新数据时尝试为该列赋予NULL值,操作将会被终止

  • 添加NOT NULL约束
    ALTER TABLE table_name MODIFY column int NOT NULL;
  • 删除NOT NULL约束
    ALTER TABLE table_name MODIFY column int NULL;
UNIQUE

约束唯一标识数据表中的每条数据,可以理解为:当某个数据表中有多条数据(即多行数据)时,约束某一列数据不互相重复(比如某个数据表中有一列name数据,当使用语句UNIQUE(name)设置约束后,name列的每一个名字都是不相同的)

//使用举例
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
UNIQUE (column_name)
);
  • 添加QNIQUE约束
    ALTER TABLE table_name ADD UNIQUE (column_name)
  • 删除QNIQUE约束
    ALTER TABLE table_name DROP INDEX column_name
PRIMARY KEY

用于约束唯一标识数据库表中的每条记录。可以理解为: 每个数据表都应该有且只有一个 主键,常常使用数据表的ID列作为主键即使用语句PRIMARY KEY(ID)设置约束

//使用举例,这里只介绍使用一列数据创建PRIMARY KEY约束的情况
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
PRIMARY KEY(column_name)
);
  • 添加PRIMARY KEY约束
    ALTER TABLE table_name ADD PRIMARY KEY (column_name)
  • 删除PRIMARY KEY约束
    ALTER TABLE table_name DROP PRIMARY KEY
CHECK

用于限制某列值的范围。

//举例
CREATE TABLE Persons
(
Id int NOT NULL CHECK (Id>0),
Name varchar(255) NOT NULL,
Address varchar(255),
City varchar(255)
)
  • 添加CHECK约束
    ALTER TABLE Persons ADD CHECK (Id>0)
  • 删除CHECK约束
    ALTER TABLE Persons DROP CHECK (Id>0)
DEFAULT

DEFAULT 约束用于向列中插入默认值。

  • 添加DEFAULT约束
    ALTER TABLE table_name ALTER column_name SET DEFAULT 'str'
  • 删除DEFAULT约束
    ALTER TABLE table_name ALTER column_name DROP DEFAULT
AUTO INCREMENT

在每次插入新记录时,自动地创建主键字段的值。

//举例
CREATE TABLE Persons
(
Id int NOT NULL AUTO_INCREMENT,
Name varchar(255) NOT NULL,
Address varchar(255),
City varchar(255),
PRIMARY KEY (Id)
)

AUTO_INCREMENT 的默认起始值是 1,每条有新记录添加递增 1,可使用下面的 SQL 语法改变默认起始值:

ALTER TABLE Persons AUTO_INCREMENT=num

MySQL数据类型

Text(文本)
子类保存的数据类型字符max长度
CHAR(size)固定长度的字符串(可包含字母、数字以及特殊字符)255
VARCHAR(size)可变长度的字符串(可包含字母、数字以及特殊字符)255(>255将被转换为TEXT)
TINYTEXT字符串255
TEXT字符串65535
Number(数字)
子类描述数值范围
TINYINT(size)带符号-128到127 ,无符号0到255。
SMALLINT(size)带符号范围-32768到32767,无符号0到65535, size 默认为 6。
MEDIUMINT(size)带符号范围-8388608到8388607,无符号的范围是0到16777215。 size 默认为9
INT(size)带符号范围-2147483648到2147483647,无符号的范围是0到4294967295。 size 默认为 11
BIGINT(size)带符号的范围是-9223372036854775808到9223372036854775807,无符号的范围是0到18446744073709551615。size 默认为 20
FLOAT(size,d)带有浮动小数点的小数字。在 size 参数中规定显示最大位数。在 d 参数中规定小数点右侧的最大位数。
DOUBLE(size,d)带有浮动小数点的大数字。在 size 参数中规显示定最大位数。在 d 参数中规定小数点右侧的最大位数。
Date/Time(日期/时间)
描述格式支持范围
DATE()日期YYYY-MM-DD从 ‘1000-01-01’ 到 ‘9999-12-31’
DATETIME()日期+时间YYYY-MM-DD HH:MM:SS从 ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’
TIMESTAMP()时间戳。格式:YYYY-MM-DD HH:MM:SS从 ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC
TIME()时间。HH:MM:SS从 ‘-838:59:59’ 到 ‘838:59:59’
YEAR()年份2 位或 4 位格式的年。4 位允许的值:1901 到 2155。2 位所允许的值:70 到 69,表示从 1970 到 2069。

操作数据库

SELECT

用于从数据库中查询数据,返回一个结果表

// column是要选择的字段名称,table_name为待查询表的名称
SELECT column1,column2,... FROM table_name
//一列可能会包含多个重复值,可以使用DISTINCT 关键词返回唯一不同的值
SELECT DISTINCT column1,column2,... FROM table_name
//WHERE用于提取满足指定条件的数据
SELECT column1,column2,... FROM table_name WHERE condition
// 举例:
// SELECT * FROM Websites WHERE country='CN';

WHERE子句中的运算符
在这里插入图片描述

//WHERE的条件组合
SELECT * FROM Websites WHERE country='CN' AND id=0;
// SELECT * FROM Websites WHERE country='CN' OR id=0;
// 从表中选取数据按照某一列的升序(ASC)或降序排列,ORDER BY默认升序排列
SELECT column1, column2, ... FROM table_name ORDER BY column1, column2, ...,ASC|DESC;
TOP子句

规定了返回数据量的最大值,但并非所有数据库系统都支持SELECT TOP语句

MYSQL语法(LIMIT)

SELECT column_name(s) FROM table_name LIMIT number;
//举例:下面的例子将会返回表Persons中的5行数据
//SELECT * FROM Persons LIMIT 5;
LIKE操作符与通配符
// LIKE后常跟通配符表明搜索列中的指定模式
SELECT * FROM table_name WHERE column_name LIKE '%...'

通配符:替代字符串中的人和网其他字符,在SQL语句中常常同LIKE操作符一起使用,常见通配符如下

在这里插入图片描述

//举例
//'G%':以字母G开始的字符
//'https%':以字符串https开始的所有网站
SELECT * FROM Persons WHERE url LIKE 'https%'

//'%oo%':可以理解为在url列中选取所有包含字符串 "oo" 的网站
SELECT * FROM Websites WHERE url LIKE '%oo%';

//'_oogle':可以理解为在name列中选取数据:一个任意字符开始,后续为 "oogle" 的所有客户:
//比如'Google','hoogle'都在选择的范围内
SELECT * FROM Websites WHERE name LIKE '_oogle';

//'^[GFS]':可以理解为在name列选择数据:以G或F或S开头的所有名称
SELECT * FROM Websites WHERE name REGEXP '^[GFS]'
//比如:Face,Google等都在选择的范围内
// '^[^A]:表示不以字母A开头的网站
IN操作符
// in操作符允许在WHERE的condition中规定多个值
SELECT column1, column2, ... FROM table_name WHERE column IN (value1, value2, ...);
//举例:
//SELECT * FROM Websites WHERE name IN ('Google','菜鸟教程');
BETWEEN操作符
//选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
SELECT column1, column2, ... FROM table_name WHERE column BETWEEN value1 AND value2;
//SELECT * FROM Websites WHERE alexa BETWEEN 1 AND 20;

INSERT

//INSERT INTO向表中插入新数据,两种写法
//第一种,无需指明要出入数据的列名,只提供被插入的值即可
INSERT INTO table_name VALUES(value1,value2,...)
//第二种,指明被插入的列名以及被插入的值
INSERT INTO table_name (column1,column2,...) VALUES(value1,value2,..)
//举例:
//INSERT INTO Websites (name, url, alexa, country) VALUES ('百度','https://www.baidu.com/','4','CN');

UPDATE

更新表中的数据

//WHERE字段规定了哪些数据需要更新,如果不指明所有数据都将会被更新
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
//举例:下面例子将只会更新name='菜鸟教程'的行的列数据
//UPDATE Websites SET alexa='5000', country='USA' WHERE name='菜鸟教程';
//上面例子中如果不指明WHERE 字段的codition,所有alexa和country列的值都将会被改变,所有使用update语句要特别小心

DELETE

用于删除表中的数据

//WHERE字段规定了哪些数据将会被删除,
DELETE FROM table_name WHERE condition;
//举例:
//DELETE FROM Websites WHERE name='Facebook' AND country='USA';

//在不删除表的情况下,删除表中所有的行,但表结构、属性、索引将保持不变
DELETE FROM table_name;

SQL进阶篇

To be continue…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夺笋123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值