第2章 mysql基础
介绍MySQL的安装及配置,使用Navicat 和 phpMyAdmin 进行图形化管理数据库。然后讲解SQL基础,重点包括建表、建库语句,新增、修改、删除、查询语句等重点知识。为了巩固基础,在此处安排了一个“设计新闻表”的实战。
课程内容
1.安装和配置
2.图形化管理工具
3.语法基础
4.新闻表设计
2-1 mysql安装及配置
直接安装
- 下载地址:www.mysql.com/downloads
- 安装
集成安装
- XAMPP:http://www.xampps.com/
- 安装
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 实战:新闻表设计
-
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条数据)