MySQL开发入门(仅用cmd编程)

今天,我为大家带来MySQL开发入门介绍,希望对数据库初学者有所帮助。

MySQL是一个关系型数据库管理系统。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其性能卓越,搭配PHP和Apache可组成良好的开发环境。

首先,读者可通过搜索下载mysql-5.6.17-winx64.zip并安装,建议读者不下载5.7+的版本,因为下载到的内容可能有缺少,功能不稳定。

下载到的mysql-5.6.17-winx64.zip解压后的完整目录如下:


MySQL安装过程请参考MySQL安装,安装过程值得注意的是,在输入mysqld install指令和net start mysql指令时,务必先切换到如上图所示的bin所在目录下,否则会出现安装失败、缺少文件、服务无法启动等问题(即使你配置了环境变量)。

下面笔者将以“图书数据库系统”为导向,来为大家介绍MySQL的基础指令:

首先是概念内容设计(笔者截取下自己的笔记):

接着根据上图转换成逻辑设计

BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)
primary key : Book_Number
foreign key : PerNumber refer to PERSON(Person_Number)
PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)
primary key : Person_Number
PUNISH(Punish_Number,PerNumber,Person_Name,Person_Type,Punish_Time,Punish_Reason,Punish_Content,Is_Punish_Finish)
primary key : Punish_Number
foreign key : PerNumber refer to PERSON(Person_Number)

下面进行实现

(1)建表

mysql> create table BOOK(
              Book_Number int,
              PerNumber int,    
              Book_Name char(30),
              Is_Borrow bool,
              Person_Name char(30),
              Borrow_Time date,
              Return_Time date,
              Primary Key(Book_Number)
);
mysql> create table PERSON(
              Person_Number int,
              Person_Name char(30),
              Person_Type char(30),
              Book_Name char(30),
              Is_Punish bool,
              Primary Key(Person_Number)
);
mysql> create table PUNISH(
              Punish_Number int,
              PerNumber int,
              Person_Name char(30),
              Person_Type char(30),
              Punish_Time date,
              Punish_Reason char(30),
              Punish_Content char(30),
              Is_Punish_Finish bool,
              Primary Key(Punish_Number)
);

*注意:此处定义为char(30),如果仅仅定义为char,默认长度为1,则只能显示第一个字符。如果一开始定义错误,要修改表结构,可用
mysql> alter table PERSON modify Person_Name char(30);

建表效果图如下:


Paste_Image.png

(2)添加外键约束

mysql> alter table BOOK add constraint FK_BOOK Foreign Key(PerNumber) references PERSON(Person_Number);
mysql> alter table PUNISH add constraint FK_PUNISH Foreign Key(PerNumber) references PERSON(Person_Number);

添加外键约束效果图如下:

Paste_Image.png

(3)插入测试数据

-------------------------------PERSON---------------------------

mysql> insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(1,'A1','adminstrator',NULL,false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(2,'A2','adminstrator','语文',false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(3,'A3','adminstrator',NULL,true);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(4,'B4','borrower',NULL,true);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(5,'B5','borrower','数学',false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(6,'B6','borrower','英语',false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(7,'B7','borrower','物理',false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(8,'B8','borrower','化学',false);

mysql>insert into PERSON(Person_Number,Person_Name,Person_Type,Book_Name,Is_Punish)values(9,'B9','borrower','生物',false);

插入PERSON表数据效果图如下:

Paste_Image.png

-------------------------------PUNISH----------------------------

mysql>insert into PUNISH(Punish_Number,PerNumber,Person_Name,Person_Type,Punish_Time,Punish_Reason,Punish_Content,Is_Punish_Finish)values(1,(select Person_Number from PERSON where Person_Number = 3),'A3','adminstrator','2016-01-24','违规操作','罚款20元',true);

mysql>insert into PUNISH(Punish_Number,PerNumber,Person_Name,Person_Type,Punish_Time,Punish_Reason,Punish_Content,Is_Punish_Finish)values(2,(select Person_Number from PERSON where Person_Number = 4),'B4','borrower','2016-01-24','书过期未还','罚款10元',false);

插入PUNISH表数据效果图如下:

Paste_Image.png

--------------------------------BOOK----------------------------

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(1,(select Person_Number from PERSON where Person_Number = 2),'语文',true,'A2','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(2,(select Person_Number from PERSON where Person_Number = 5),'数学',true,'B5','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(3,(select Person_Number from PERSON where Person_Number = 6),'英语',true,'B6','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(4,(select Person_Number from PERSON where Person_Number = 7),'物理',true,'B7','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(5,(select Person_Number from PERSON where Person_Number = 8),'化学',true,'B8','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(6,(select Person_Number from PERSON where Person_Number = 9),'生物',true,'B9','2016-01-24','2016-04-24');

mysql>insert into BOOK(Book_Number,Book_Name,Is_Borrow)values(7,'历史',false);

mysql>insert into BOOK(Book_Number,Book_Name,Is_Borrow)values(8,'地理',false);

mysql>insert into BOOK(Book_Number,Book_Name,Is_Borrow)values(9,'政治',false);

插入BOOK表数据效果图如下:

Paste_Image.png
Paste_Image.png

(4)发现插入数据考虑欠缺,对表进行删改

mysql>update PERSON set Book_Name = '历史' where Person_Number =4;

mysql>update PERSON set Is_Punish = false where Person_Number = 3;

mysql> delete from BOOK where Book_Number = 7;

mysql>insert into BOOK(Book_Number,PerNumber,Book_Name,Is_Borrow,Person_Name,Borrow_Time,Return_Time)values(7,(select Person_Number from PERSON where Person_Number = 4),'历史',true,'B4','2015-10-23','2016-01-23');

对表删改的效果图如下:

Paste_Image.png
Paste_Image.png

(5)查询测试

mysql> select BOOK.Book_Name,Borrow_Time,Return_Time from BOOK inner join PERSON on BOOK.PerNumber = PERSON.Person_Number where Date(Borrow_Time) >'2015-10-23';

mysql> select * from PUNISH where (Is_Punish_Finish = false and Punish_Reason = '书过期未还') or (Person_Type = 'adminstrator');

查询效果图如下:

Paste_Image.png

(6)创建视图测试

mysql> create or replace view Punish_View as select Punish.Person_Name,Punish_Time,Punish_Reason,Punish_Content from PUNISH where Is_Punish_Finish = false;

mysql> select * from Book_View;

mysql> select * from Punish_View;

创建视图效果图如下:

Paste_Image.png

(7)创建存储过程或函数测试

mysql> 
delimiter $
create procedure Borrow_Count(OUT 总共借出的书本数目为: int)
begin
select count(*) into 总共借出的书本数目为: from BOOK where Is_Borrow = true;
select 总共借出的书本数目为:;
end;$

mysql> 
delimiter ;
set @总共借出的书本数目为:=0;
call Borrow_Count(@总共借出的书本数目为:);

mysql> select * from book;

创建存储过程或函数测试效果图如下:

Paste_Image.png

(8)创建触发器测试

mysql> 
delimiter $
create trigger Punish_Finish_Update
after update on PERSON
for each row
begin
if new.Is_Punish = false
then
update PUNISH set PUNISH.Is_Punish_Finish = true where PUNISH.PerNumber = new.Person_Number;
end if;
end;$

mysql> select * from punish;$

mysql> select * from person;$

mysql> update PERSON set Is_Punish = false where Person_Number = 4;$

mysql> select * from punish;$

mysql> select * from person;$

创建触发器效果图如下:

Paste_Image.png
Paste_Image.png

由此可见,触发器Punish_Finish_Update成功作用,同时修改两表

*注意:使用trigger时,delimiter 把指令的结束标志变成了,所以上述查询中,每句指令都要用$作为结束

重新定义指令结束标志为:

mysql> delimiter ;
mysql> select * from person;
mysql> select * from punish;
Paste_Image.png

读者若通过以上的训练,基础的MySQL开发入门便已掌握。这里顺便提醒一下,用cmd开发时,每句代码后要用分号";"结束,否则你可能会感觉cmd崩了。经过笔者检验,cmd不会崩,出问题了需要从自身出发寻找问题出现的原因。

感谢您的关注!谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,049评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,478评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,109评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,097评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,115评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,280评论 1 279
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,748评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,398评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,553评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,440评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,487评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,176评论 3 317
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,750评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,821评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,049评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,559评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,150评论 2 341

推荐阅读更多精彩内容