目录
1.创建数据库
2.显示数据库
3.打开数据库
4.创建数据表
5.变更(改变)数据库表
6.往数据表中插入数据
7.数据修改/更新
8.数据删除
9. 数据查询
本文以网络图书销售数据库为例介绍mysql数据库基本语句。
网络图书销售数据库 E - R 图如下:
关系模型:Bookstore(数据库)
book( 图书编号,图书类别,书名,作者,出版社,出版时间,单价,数量,折扣,封面图片)
members(用户号,姓名,性别,密码,联系电话,注册时间)
sell (订单号,用户号 ,图书编号,订购册数,订购单价,订购时间,是否发货,是否收货,是否结清)
数据库名必须唯一; 名称内不能含有“/”及“.”等非法字符; 最大不能超过64字节。
如果存在则先删除:DROP DATABASE IF EXISTS 数据库名
创建数据库:CREATE DATABASE 数据库名
DEFAULT CHARACTER SET 字符集名
COLLATE 校对规则名
(字符集是一套符号和编码。校对规则是在字符集内用于比较字符的一套规则。)
/* 创建数据库 */
DROP DATABASE IF EXISTS bookstore;
CREATE DATABASE bookstore
DEFAULT CHARACTER SET gb2312
COLLATE gb2312_chinese_ci;
显示服务器中已建立的数据库,使用SHOW DATABASES命令。
注意:在MySQL中,每一条SQL语句都以“;” 作为结束标志。
SHOW DATABASES;
因为MySQL服务器中有多个数据库,可以使用USE命令可指定当前数据库。
语法:USE 数据库名,如
USE Bookstore;
为数据库创建数据表,可以使用SQL命令CREATE TABLE来完成。
语法格式:CREATE TABLE 数据库表名 (
字段名1 数据类型1 [NOT NULL | NULL],
字段名2 数据类型2 [NOT NULL | NULL],
….. );
USE Bookstore;
DROP TABLE IF EXISTS book;
/* 创建数据表 book */
CREATE TABLE book (
图书编号 CHAR (10) NOT NULL PRIMARY KEY,
图书类别 VARCHAR (20) NOT NULL DEFAULT '计算机',
书名 VARCHAR (40) NOT NULL,
作者 CHAR (10) NOT NULL,
出版社 VARCHAR (20) NOT NULL,
出版时间 date NOT NULL,
单价 FLOAT (5, 2) NOT NULL,
数量 INT (5),
折扣 FLOAT (3, 2),
封面图片 BLOB
);
/* 创建数据表 members */
USE Bookstore;
DROP TABLE IF EXISTS members;
CREATE TABLE members (
用户号 CHAR (18) PRIMARY KEY,
姓名 CHAR (10) NOT NULL,
性别 CHAR (2) NOT NULL,
密码 CHAR (6) NOT NULL,
联系电话 VARCHAR (20) NOT NULL,
注册时间 datetime
);
/* 创建数据表 sell */
USE Bookstore;
DROP TABLE IF EXISTS sell;
CREATE TABLE sell (
订单号 CHAR (10) PRIMARY KEY,
用户号 CHAR (18) NOT NULL,
图书编号 CHAR (20) NOT NULL,
订购册数 INT (5) NOT NULL,
订购单价 FLOAT NOT NULL,
订购时间 datetime NOT NULL,
是否发货 VARCHAR (10),
是否收货 VARCHAR (10),
是否结清 VARCHAR (10)
);
ALTER TABLE用于更改原有表的结构。例如,可以增加或删减列,创建或取消索引,更改原有 列的类型,重新命名列或表,还可以更改表的评注和表的类型。
语法格式:
ALTER TABLE 表名
ADD [COLUMN] 列定义 [FIRST | AFTER列名] /*添加列*
| ALTER [COLUMN] 列名 {SET DEFAULT 默认值| DROP DEFAULT} /*修改默认值*/
| CHANGE [COLUMN] 旧列名 列定义 /*对列重命名*/
[FIRST|AFTER列名]
| MODIFY [COLUMN] 列定义 [FIRST | AFTER 列名] /*修改列类型*/
| DROP [COLUMN] 列名 /*删除列*/
| RENAME [TO] 新表名 /*重命名该表*/
说明:语句中“[ ]”内为可选项。 { | }表示二选一。
【例】在表book中增加一列“浏览次数”。
ALTER TABLE book ADD 浏览次数 int NULL;
【例】将book表中“出版时间”列改为“出版日期”列。
ALTER TABLE book CHANGE 出版时间 出版日期 date not null
【例】删除book表中“浏览次数”列。
ALTER TABLE book DROP 浏览次数;
【例】将book表中“出版时间”列改为“出版日期”列。
ALTER TABLE book CHANGE 出版时间 出版日期 date not null;
【例】将book表中“出版日期”列类型改为日期时间类型。
ALTER TABLE book MODIFY 出版日期 datetime not null
USE Bookstore;
ALTER TABLE book
ADD 浏览次数 tinyint NULL ,
DROP COLUMN 书名 ;
USE Bookstore;
ALTER TABLE book
RENAME TO mybook;
/* 接下来建立三个数据表之间的关系,推荐采用ALTER 语法给出 外键 */
/* 1 用户号是数据表sell的外键 */
ALTER TABLE sell
ADD FOREIGN KEY (用户号)
REFERENCES members (用户号)
ON DELETE CASCADE
ON UPDATE CASCADE;
/* 2 图书编号是数据表sell的外键 */
ALTER TABLE sell
ADD FOREIGN KEY (图书编号)
REFERENCES book (图书编号)
ON DELETE CASCADE
ON UPDATE CASCADE;
一旦创建了数据库和表,下一步就是向表里插入数据。通过INSERT或REPLACE语句可以 向表中插入一行或多行数据。
如果列清单和VALUES清单都为空,则 INSERT会创建一行,每个列都设置成 默认值。
从下面的SQL代码可以看出,当一次插入多条记录时,每条记录的数据要用()括起来,记录 与记录之间用逗号分开。
INSERT INTO 表名 VALUES(参数1,参数2,.......)
/* 数据记录 */
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO book VALUES ('TP.2462', '计算机', '计算机应用基础', '陆大强', '清华大学出版社', '2018-10-19', 45.00, 45, 0.80, NULL);
INSERT INTO book VALUES ('TP.2463', '计算机', '计算机网络技术', '林力辉', '清华大学出版社', '2020-10-16', 25.50, 31, 0.80, 'D\\pic\\ll.jpg');
INSERT INTO book VALUES ('TP.2525', '计算机', 'PHP高级语言', '王大卫', '中国青年出版社', '2020-06-20', 33.25, 50, 0.80, 'D:\\pic\\js.jpg');
INSERT INTO book VALUES ('TP.6625', '计算机', 'JavaScript编程', '谢为民', '中国青年出版社', '2020-08-05', 33.00, 60, 0.80, NULL);
INSERT INTO book VALUES ('Ts.3010', '数据库', 'ORACLE', '张小刚', '北京大学出版社', '2019-08-02', 28.00, NULL, NULL, NULL);
INSERT INTO book VALUES ('Ts.3035', '数据库', 'MYSQL数据库', '李刚', '北京大学出版社', '2020-12-26', 20.00, 500, 0.80, 'D:\\pic\\jp.jpg');
INSERT INTO book VALUES ('Tw.1283', '网页设计', 'DW网站制作', '李华', '人民邮电出版社', '2015-10-01', 27.00, NULL, NULL, NULL);
INSERT INTO book VALUES ('Tw.2562', '网页设计', 'ASP网站制作', '胡莉惠', '中国青年出版社', '2020-07-24', 30.50, 50, 0.80, NULL);
INSERT INTO book VALUES ('Tw.3020', '网页设计', '网页程序设计', '刘辉', '清华大学出版社', '2019-02-15', 25.00, NULL, NULL, NULL);
-- ----------------------------
-- Records of members
-- ----------------------------
INSERT INTO members VALUES ('A0012', '赵宏宇', '男', '080100', '13601234123', '2017-03-04 18:23:45');
INSERT INTO members VALUES ('A3013', '张凯', '男', '080100', '13611320001', '2018-01-15 09:12:23');
INSERT INTO members VALUES ('B0022', '王林', '男', '080100', '12501234123', '2019-01-12 08:12:30');
INSERT INTO members VALUES ('B2023', '李小冰', '女', '080100', '13651111081', '2019-01-18 08:57:18');
INSERT INTO members VALUES ('C0132', '张莉', '女', '123456', '13822555432', '2019-09-23 00:00:00');
INSERT INTO members VALUES ('C0138', '李华', '女', '123456', '13822551234', '2018-08-23 00:00:00');
INSERT INTO members VALUES ('D1963', '张三', '男', '222222', '51985523', '2019-01-23 08:15:45');
-- ----------------------------
-- Records of sell
-- ----------------------------
INSERT INTO sell VALUES (1, 'C0132', 'TP.2525', 13, 20.00, '2020-11-14 12:13:49', '已发货', NULL, NULL);
INSERT INTO sell VALUES (2, 'D1963', 'TP.2463', 3, 31.50, '2020-11-21 12:25:12', '已发货', NULL, NULL);
INSERT INTO sell VALUES (3, 'D1963', 'TP.2525', 6, 23.45, '2020-03-26 12:25:23', '已发货', '已收货', NULL);
INSERT INTO sell VALUES (4, 'C0138', 'Ts.3035', 10, 23.50, '2020-08-01 12:13:49', '已发货', '已收货', '已结清');
INSERT INTO sell VALUES (5, 'C0138', 'TP.2525', 133, 33.50, '2020-08-01 12:13:49', NULL, NULL, NULL);
INSERT INTO sell VALUES (6, 'A3013', 'Tw.2562', 4, 89.00, '2020-08-20 00:00:00', NULL, NULL, NULL);
INSERT INTO sell VALUES (7, 'C0138', 'TP.2463', 43, 30.00, '2020-11-08 12:13:49', '已发货', NULL, NULL);
INSERT INTO sell VALUES (8, 'C0138', 'Ts.3035', 5, 45.50, '2020-11-21 00:00:00', NULL, NULL, NULL);
INSERT INTO sell VALUES (9, 'C0132', 'Tw.1283', 6, 23.00, '2020-11-28 18:23:35', '已发货', '已收货', NULL);
要修改表中的一行数据,可以使用UPDATE语句,UPDATE可以用来修改一个表,也可以修 改多个表。
语法格式:
UPDATE [IGNORE] 表名 SET 列名1=表达式1 [,列名2=表达式2 ...][WHERE 条件]
SET子句:根据WHERE子句中指定的条件对符合条件的数据行进行修改。若语句中不设定 WHERE子句,则更新所有行。
可以同时修改所在数据行的多个列值,中间用逗号隔开
【例】 将Bookstore数据库中Book表的所有书籍数量都增加10。将Members表中姓名为“张 三”的员工的联系电话改为“13802551234”,密码改为“111111”。
UPDATE Book
SET 数量 = 数量+10;
UPDATE Members
SET联系电话 ='13802551234' , 密码 ='111111'
WHERE 姓名 = '张三';
【例】订单号为6的客户因某种原因退回2本图书,请在sell表中修改订购册数,同时书退回后, book表中该图书的数量增加4。
UPDATE sell ,book
SET sell.订购册数=订购册数-2 , book.数量=数量+2
WHERE sell.图书编号=book.图书编号 and sell.订单号='6';
使用DELETE语句删除数据
语法格式:DELETE [IGNORE] FROM 表名 [WHERE条件]
如果省略WHERE子句则删除该表的所有行。
【例】 将Bookstore数据库的Members表中姓名为“张三”的员工的记录删除。
USE Bookstore;
DELETE FROM Members WHERE 姓名='张三';
【例】 用户号为D1963的客户注销了,请在members表中将该用户记录删除,同时将其在 sell表中的记录也删除。
DELETE sell,members
FROM sell,members
WHERE sell.用户号=members.用户号
AND members.用户号='D1963';
使用数据库和表的主要目的是存储数据以便在需要时进行检索、统计或组织输出,通过SQL 语句的查询可以从表或视图中迅速方便地检索数据。
SELECT语句
SELECT [ALL | DISTINCT] 输出列表达式, ...
[FROM 表名1 [ , 表名2] …] /*FROM子句*/
[WHERE 条件] /*WHERE子句*/
[GROUP BY {列名 | 表达式 | 列编号} [ASC | DESC], ... /* GROUP BY 子句*/
[HAVING 条件] /* HAVING 子句*/
[ORDER BY {列名 | 表达式 | 列编号}
[ASC | DESC] , ...] /*ORDER BY子句*/
[LIMIT {[偏移量,] 行数|行数OFFSET偏移量}] /*LIMIT子句*
使用SELECT语句选择一个表中的某些列:SELECT 字段列表 FROM 表名
(各列名之间要以逗号分隔)
【例】 查询Members表中各用户的姓名、联系电话和注册时间
USE Bookstore; SELECT 姓名,联系电话,注册时间 FROM Members;
当希望查询结果中的某些列或所有列显示时且使用自己选择的列标题时,可以在列名之后使用 AS子句来更改查询结果的列别名
语法格式为: SELECT 字段列表 [AS] 别名
【例】 查询Book表中图书类别为计算机的图书书名、作者和出版社,结果中各列的标题分别指定为 name、auther和publisher。
SELECT 书名 AS name, 作者 AS auther, 出版社 AS publisher FROM Book
WHERE 图书类别= '计算机';