Python操作三大数据库之MySQL-第2章 mysql基础

介绍MySQL的安装及配置,使用Navicat 和 phpMyAdmin 进行图形化管理数据库。然后讲解SQL基础,重点包括建表、建库语句,新增、修改、删除、查询语句等重点知识。为了巩固基础,在此处安排了一个“设计新闻表”的实战。

课程内容
1.安装和配置
2.图形化管理工具
3.语法基础
4.新闻表设计

2-1 mysql安装及配置

直接安装

集成安装

2-2 mysql图形化管理工具

本课程主要介绍两个

  • phpMyAdmin

官方下载地址:https://www.phpmyadmin.net/

  • Navicat

官方正版下载:https://www.navicat.com.cn/

2-3 sql语法基础-创建并使用数据库

DDL(数据定义语句)

CREATE TABLE/DATABASE
ALTER TABLE/DATABASE
DROP TABLE/DATABASE

DML(数据管理语句)

INSERT 新增
DELETE删除
UPDATE 修改
SELECT 查询

创建数据库

创建并使用数据库

-- 创建并使用数据库
CREATE DATABASE `mydatabase`;
USE `mydatabase`;

查看已有的数据库

-- 查看已有的数据库
SHOW DATABASES;

2-4 sql语法基础-创建表

CREATE TABLE `students`(
`id` INT primary key NOT NULL AUTO_INCREMENT,
`name` VARCHAR(200) NOT NULL
);

常见类型

int,char,varchar,datetime

上表描述如下:

id:学生的ID
name:学生名称
nickname:学生的昵称
sex:性别
in_time:入学的时间

完善上述表的创建:

CREATE TABLE `student`(
	`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
	`name` VARCHAR(20) NOT NULL,
	`nickname` VARCHAR(20) NULL,
	`sex` CHAR(1) NULL, 
	`in_time` DATETIME NULL
);

2-5 sql语法基础-插入和查询语句

插入语句

INSERT INTO
table_references
VALUE(S)..… 
# VALUE,插入一条数据
# VALUES,插入多条数据

INSERT INTO `student` VALUE(1, '张三', '三哥', '男', now());

运行报错,因为编码问题,需要在创建表的时候指定编码,如下所示:

DROP TABLE IF EXISTS `students`;
CREATE TABLE `students` (
	`id` int(11) NOT NULL AUTO_INCREMENT,
	`name` varchar(20) NOT NULL,
	`nickname` varchar(20) DEFAULT NULL,
	`sex` char(1) DEFAULT NULL,
	`in_time` datetime DEFAULT NULL,
	PRIMARY KEY (`id`)
	) ENGINE=InnoDB AUTO_INCREMENT=2, DEFAULT CHARSET=utf8;

创建表成功后,插入数据:

INSERT INTO `students` VALUE(1, '张三', '三哥', '男', now()); 

执行该语句,成功插入一条数据,紧接着再次执行该语句,报错:

Duplicate entry '1' for key 'PRIMARY'

这里因为我们指定了主键,而主键(此处为id)是惟一的。

INSERT INTO `students` VALUE(2, '张三', '三哥', '男', now());

但这样指定ID很麻烦,怎么办呢?

大家回顾表的创建中,id 的定义“`id` int(11) NOT NULL AUTO_INCREMENT”中,用"AUTO_INCREMENT"来定义其自动增长。

此时,我们尝试删除“2”,执行语句,报错,依然不可以,因为MYSQL中值的插入默认是按着自身顺序插入的,现在少了一个值,该怎么办?

指定要插入字段的名称,如下:

INSERT INTO `students` (`name`, `nickname`, `sex`, `in_time`) VALUE('张三2', '三哥2', '男', now());

多运行几次,我们发现,id可以自动增加。

这里需要注意的是,表名和字段名需要用tab间上方的``包裹,而值则是类似字符串用单引号('')。

上面students表中,sex,in_time两个字段我们均定义默认为NULL,因此,插入数据时,我们也可以不给相应的值:

INSERT INTO `students` (`name`, `nickname`) VALUE('张三2', '三哥2');

如果我们要插入多条数据,这个时候可以用values:

INSERT INTO `students` (`name`, `nickname`) VALUES
		('张三3', '三哥3'),
		('张三4', '三哥4'),
		('张三5', '三哥5'),
		('张三6', '三哥6')
;

查询语句

SELECT 
	select_expr, …
FROM table_references
[WHERE where_definition]
[GROUP BY{col_name | expr | position)]
[HAVING where_definition]
[ORDER BY {col name | expr | position}
[ASC|DESC], …]
[LIMIT{[offset, ]row_count}]
  • 1.查询表的全部数据
SELECT * FROM `students`;
  • 2.查询指定字段的所有数据
SELECT `name`, `nickname` FROM `students`;
  • 3.查询指定字段的指定条件的数据(WHERE)
SELECT `id`, `name`, `nickname` FROM `students` WHERE `sex`='男';

4.增序and降序(ORDER BY (ASC, DESC))

SELECT `id`, `name`, `nickname` FROM `students` WHERE `sex`='男' ORDER BY `id` DESC;

结果如下:

5.偏移控制(LIMIT 起始位置索引, 偏移量)(类比Python,索引从0开始)

SELECT `id`, `name`, `nickname` FROM `students` WHERE `sex`='男' ORDER BY `id` DESC LIMIT 2, 2;

2-6 sql语法基础-修改和删除数据

UPDATE table_references 
SET col_namel = expr1[, col_name2 = expr2 ...]
[WHERE where_definition]
  • 修改

修改指定字段对应值

UPDATE `students` SET `sex` = '女' WHERE `sex` = '男';

全部更改:

UPDATE `students` SET `sex` = '女';

UPDATE `students` SET `nickname` = NULL, `sex` = '男';

UPDATE `students` SET `sex` = '女' WHERE `ID` > 6;
  • 删除
DELETE FROM tbl_name

[WHERE where definition]
DELETE FROM `students` WHERE `sex` = '男'; # 不添加条件,全部删除;
  • 其他…
  • 新建索引(CREATE INDEX)
  • 修改表(ALTER TABLE)
  • 删除数据库、表、索引、视图等(DROP)

2-7 实战:新闻表设计

https://3g.163.com

  • ID:新闻的唯一标示

  • title:新闻的标题

  • content:新闻的内容

  • created_at:新闻添加的时间

  • types:新闻类型

  • image:新的缩略图

  • author:作者

  • view_count:浏览量

  • is_valid:删除标记(1为有效值)

    • 物理删除:直接干掉记录;
    • 逻辑删除:0,1选择性识别对应为真的,不要为假的。添加一个字段"is_valid"

1.创建新闻数据库"news"

CREATE DATABASE news charset=utf8;

2.创建新闻表"news"

-- ID:新闻的唯一标示
-- title:新闻的标题
-- content:新闻的内容
-- created_at:新闻添加的时间
-- types:新闻类型
-- image:新的缩略图
-- author:作者
-- view_count:浏览量
-- is_valid:删除标记(1为有效值)

CREATE TABLE `news`(
		`id` INT NOT NULL AUTO_INCREMENT,
		`title` VARCHAR(200) NOT NULL,
		`content` VARCHAR(2000) NOT NULL,
		`types` VARCHAR(10) NOT NULL,		
		`image` VARCHAR(300) NULL,
		`author` VARCHAR(20) NULL,
		`view_count` INT DEFAULT 0,
		`created_at` DATETIME NOT NULL,  -- 时间可维护,放在后面
		`is_valid` 	SMALLINT DEFAULT 1,
		PRIMARY KEY (`id`)
) DEFAULT CHARSET="utf8"

表创建成功后,插入数据如下:

INSERT INTO `news` VALUES ('1', '朝鲜特种部队视频公布 展示士兵身体素质与意志', '新闻内容', '推荐', '/static/img/news/01.png', null, '0', null, '1');
INSERT INTO `news` VALUES ('2', '男子长得像\"祁同伟\"挨打 打人者:为何加害检察官', '新闻内容', '百家', '/static/img/news/02.png', null, '0', null, '1');
INSERT INTO `news` VALUES ('3', '导弹来袭怎么办?日本政府呼吁国民堕入地下通道', '新闻内容', '本地', '/static/img/news/03.png', null, '0', null, '1');
INSERT INTO `news` VALUES ('4', '美监:朝在建能发射3发以上导弹的3000吨级新潜艇', '新闻内容', '推荐', '/static/img/news/04.png', null, '0', null, '1');
INSERT INTO `news` VALUES ('5', '证监会:前发审委员冯小树违法买卖股票被罚4.99亿', '新闻内容', '百家', '/static/img/news/08.png', null, '0', null, '1');
INSERT INTO `news` VALUES ('6', '外交部回应安倍参拜靖国神社:同军国主义划清界限', '新闻内容', '推荐', '/static/img/news/new1.jpg', null, '0', null, '1');
INSERT INTO `news` VALUES ('7', '\"萨德\"供地违法?韩民众联名起诉要求撤回供地', '新闻内容', '百家', '/static/img/news/new2.jpg', null, '0', null, '1');
INSERT INTO `news` VALUES ('10', '标题1', '新闻内容1', '推荐', '/static/img/news/01.png', null, '0', null, '1');

3.练习

任务

  • 1.创建一个数据库,然后设计一个新闻表(数据类型要使用合理)
  • 2.使用SQL语句向数据表写入十五条不同的数据
  • 3.使用SQL语句查询类别为“首家”的新闻数据
  • 4.使用SQL语句删除一条新闻数据
  • 5.使用SQL语句查询所有的新闻,以添加时间的倒序进行排列
  • 6.使用SQL语句查询第二页数据(每一页5条数据)

猜你喜欢

转载自blog.csdn.net/weixin_39528941/article/details/88086634