MySQL快速入门学习笔记(上)

Posted by     Airmole on August 3, 2017

前言

参考原文链接,本文是我边看原文学习,边摘抄写出来的。。。
http://mysql.phpxy.com/

阅读本文前如果您了解常用的命令行操作会更加得心应手。什么都不会的也不行啊,至少你要会装好MySQL啊。知道怎么在MySQL中输入命令啊。不会的自己去学,上面原文链接里也有讲,自己看看吧。

数据库的连接登录

musql -h localhost -u root -p

参数说明:

参数 说明
-h 表示数据库的连接地址,如果是本机就可以省略
-u 表示指定要登录的用户
-p 表示使用密码登录

注:通常是在回车之后,输入密码。因为,密码输入时的字符是不可见的,输完密码直接回车登录。防止旁边有人把重要的密码看走。

看到命令行出现

mysql>

则说明登录成功,已经进入了MySQL的数据库程序,mysql > 表示等待输入指令。

在登陆成功后有这么一句提示,可能大家不太理解:

Your MySQL connection id is 7

表示第7次连接登陆,每登陆一次这个id为加1。下一次显示的会是第8次。

数据库操作

创建数据库

create database DB_MUMU;

创建一个名为DB_MUMU的数据库,注意语句以;结尾。不出意外的话终端中可以看到:

> mysql> create database DB_MUMU;
Query OK, 1 row affected (0.01 sec)

“Query OK” 表示上面的命令执行成功,所有的 DDL 和 DML(不包 括 SELECT)操作执行成功后都显示“Query OK”,这里理解为执行成功就可以了;“1 row affected” 表示操作只影响了数据库中一行的记录,“0.00 sec”则记录了操作执行的时间。 如果要新创建的数据库已经存在的话,将会提示:

mysql> create database DB_MUMU;
ERROR 1007 (HY000): Can’t create database ‘DB_MUMU’; database exists

查看数据库

show databases;

值得注意的是databases应该是+s的复数形式。用单数还是复数形势具体情况按照英语语法写就行了。比如数据库系统的用户信息就保存在mysql数据库的user表中。 如下图所示,执行本操作后可以看到存在的数据库。有几个是MySQL自己创建的,用来管理数据库系统。

show databases

选中数据库

mysql> use DB_MUMU;
Database changed

这样就进入到了 DB_MUMU数据库中了。当然你可以使用 use 语句随时切换要操作的数据库,刚刚选中了DB_MUMU ,现在我们切换到mysql内容的 mysql 数据库看看:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

出现 ” Database changed“ 表示切换成功。

查看数据库中的表

进入到库后我们可以看这个库里面有多少个数据表。

show tables;

使用use 进入到某个数据库后才可以使用show tables

示例,查看mysql数据库的表:

show tables; 这些表里面的内容是关系数据库服务器相关的用户、权限、数据库状态、设置等相关的信息数据。

删除数据库

drop database 库名;

注意: drop 是汉语可以翻译为指掉下来,不要了的意思 database 是指库 库名 是指要删掉的库的名称 示例:

mysql> drop database liwenkai;
Query OK, 0 rows affected (0.01 sec)

【切记】注:数据库删除后,下面的所有数据都会全部删除,所以删除前一定要慎重并做好相应的备份。

数据表操作

创建表

create table 表名(字段名1 字段类型,…字段名n 字段类型n);              //语法
create table user(username varchar(20),password varchar(32));     //示例
//创建一个表名叫user的表,第一个字段为username、表的字段类型为varchar长度为32个长度。第二个字段为password,类型也为varchar,长度也为32个长度。

可以在类型后接上长度如:varchar(20)。 字符数据类型后面碰到再说吧。

mysql> create table emp(
ename varchar(10),
hiredate date,
sal float(10,2),
deptno int(2)
);
Query OK, 0 rows affected (0.63 sec)
mysql> create table dept( deptno int(4), deptname varchar(20));
Query OK, 0 rows affected (0.12 sec)

查看表字段结构信息

desc 表名;
desc  table;
//查看table表的表结构。

操作显示如下:(好吧,这段操作效果是抄的。)

mysql> desc table;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| ename | varchar(10) | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | decimal(10,2) | YES | | NULL | |
| deptno | int(2) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
4 rows in set (0.39 sec)
//出现的不是一模一样的字段结构信息很正常,只是做个示例而已。不必在意。弄懂每个SQL语句的含义和作用就行了。

查看表的创建语句

好吧,看到这个标题我也一知半解的。继续往下看吧。

类别 详细解释
基本语法 show create table 表名 \G;
示例语句 show create table emp \G;
示例说明 查看表emp的创建语句

本来人家资料上,每个语句都是用这种表格解释的,我嫌繁琐。前面的没用,到这里越来越觉得这个表格解释很有必要。从这里开始用这种表格啦。emp是表名,之前上个原文本来也是emp但是被我强行改成了table,结果看吧。到这里如果还用table作表名的话,SQL语句中就会出现两个table单词,容易让大家搞混了。 执行完整示例:

mysql> show create table emp \G;   //别问我这个G什么鬼,后面解释。
Table: emp    //嗯,表名emp,我也不知道为啥叫emp。反正就起了这么个名字。
Create Table: CREATE TABLE emp (
ename varchar(10) DEFAULT NULL,
hiredate date DEFAULT NULL,
sal decimal(10,2) DEFAULT NULL,
deptno int(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;      //这些就是创建这张表的时候的语句。后面的引擎和字符集再说
1 row in set (0.00 sec)
ERROR:
No query specified

可以看到表定义以外,还可以看到表的 engine(存储引擎) 和 charset(字符集)等信息。“\G”选项的含义是使得记录能够按照字段竖着排列,对于内 容比较长的记录更易于显示。那也就是说只要你屏幕足够宽,不觉得看着不舒服的话可以不加 \G 选项咯。 嗯,这个命令可以用来这个表是怎么建的,主要有哪些字段,对应字段的数据类型。

删除表

|类别 |详解| |——|—–| |基本语法|drop table 表名; |语法示例|drop table emp; |示例说明|删除emp这张表

mysql> drop table emp;
Query OK, 0 rows affected (0.34 sec)

注:删除表。表和数据均会丢失,请勿必删除重要表之前备份数据。

指定表引擎和字符集

指定表引擎

什么是表引擎??先不管,有兴趣在谷歌了解吧。 在创建表最后,我们常用MyISAM或者InnoDB引擎。在指定引擎时,我们可以使用:

ENGINE=InnoDB

这还用说吗?上一条命令查看表的创建语句的显示结果代码里就有啊。没看懂?

指定表默认字符集:

DEFAULT CHARSET=utf8

震惊!utf8居然没有-。。。不是UTF-8吗??大小写不照顾也就算了。连-都丢了。

谔谔,这。为什么都用过了删除表命令才介绍指定表引擎和字符集的语句呢。。有点儿马后炮吧。应该放在创建表的时候一起说啊。。 表操作完了。。。下面是数据字段操作。。。

数据字段操作

假设我们存在user表,user结构如下:

mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(10) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
4 rows in set (0.01 sec)
//都看到这一步啦,多余的话也不用说啦。直接上代码应该都懂什么意思吧。要还真不懂说明没好好看。自己从头再来吧。

修改表字段类型modify

类别 详解
基本语法 alter table 表名 modify 字段名 varchar(20);
代码示例 alter table user modify username varchar(20);
示例说明 将user表的username的类型改为varchar(20)

可以把这个alter理解成类似于use把。选定数据库的时候是use 数据库名; alter就是选定表。

修改表字段类型modify

哈哈哈,用了这么多年还是觉得QQ的截图功能真好用。。 执行结果:

mysql> alter table user modify username varchar(20);
Query OK, 0 rows affected (0.48 sec)
Records: 0 Duplicates: 0 Warnings: 0

不得不说其实这个执行结果没啥好看的,但是还得要有。 再来看一眼,确认这个字段被改过来了。。😄 再用desc看一眼确定改过来没。

mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
4 rows in set (0.01 sec)

增加表字段

类别 详解
基本语法 alter table 表名 add column 字段名 类型;
代码示例 alter table user add column age int(3);
实例说明 添加一个叫做age的字段,类型是长度为3的整型

单词column意思是“列”,嗯,这也没毛病,整个数据库中只要记住column是列,然后“列”是字段即可。int(3):长度为3的整型?那就是说范围只能是-999~999了吧。

mysql> alter table emp add column age int(3);
Query OK, 0 rows affected (0.40 sec)
Records: 0 Duplicates: 0 Warnings: 0

再用desc看一眼,确定改过来了。谔谔,略有点强迫症吧。非要看一眼,系统都说了Query OK了啊。那行,看看吧,看看吧。看看也无妨。

mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
5 rows in set (0.00 sec)

我就觉得这没啥好看的。直接就复制粘贴了。。。 下一个语句:

增加字段时控制字段顺序

刚刚学了增加字段。如果你仔细实验发现每次都是增加在最后面,如何在第一个增加或者在指字字段之后增加呢? 嗯,这倒是真的。 |类别|详解| |—–|——| |基本语法|ALTER TABLE 表名 ADD 字段名 字段类型 AFTER 字段名; |代码示例|ALTER TABLE user ADD email VARCHAR(60) AFTER createip; |示例说明|在user表中,在字段creatip后面增加email字段,类型长度为60的varchar

类别 详解
基本语法 ALTER TABLE 表名 ADD 字段名 字段类型;
代码示例 ALTER TABLE user ADD id INT(10) FIRST;
示例说明 在user表中在开始,就是最开头那一端头子上增加字段id,长度为10的整型。

我说怎么乍一看两个表格,之前都是一个表格啊。原来是分了两种情况啊。嗯,挺合理的。还有,这么怎么莫名其妙改用大写了。

ALTER TABLE user ADD email VARCHAR(60) AFTER createip;
Query OK, 0 rows affected (0.40 sec)
Records: 0 Duplicates: 0 Warnings: 0

老毛病。。。

mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
| email | varchar(60) | YES | | NULL | |
| age | int(3) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
6 rows in set (0.00 sec)

删除表字段

类别 详解
基本语法 alter table 表名 drop column 字段名;
代码示例 alter table user drop column age;
示例说明 删除user表中的age字段
mysql> alter table user drop column age;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
| email | varchar(60) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
5 rows in set (0.00 sec)

表字段改名

好吧,刚开始我天真地想,改名?删掉字段,再增加字段不行吗? 不行,那你把数据咋办?也不要啦? 而改名的话数据是不受影响的。 |类别|详解| |—–|——| |基本语法|alter table 表名 change 字段原名 字段新名 字段类型; |代码示例|alter table user change email em varchar(60); |代码详解|把user表里面的email字段改名为em 详细示例:

mysql> alter table user change email em varchar(60);
Query OK, 0 rows affected (0.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
| em | varchar(60) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
5 rows in set (0.00 sec)

全是这个套路,改一下,desc看一下效果。。。

修改表字段排列顺序

在前的字段增加和修改语句(add/change/modify)中,最后都可以加一个可选项 first|after。 //。。。发现这原文作者老爱放马后炮。啥事都不早说,啥知识点都藏着掖着,生怕你学会了。 增加表字段时我们已经学过了如何调整顺序。我们现在在来看看另外的change或modify如何来调整顺序。 //所以这个调整排列顺序主要是使用change和modify的时候加上first/after选项来实现调整顺利。

那先用first选项试一试吧:

mysql> alter table user modify em varchar(60) first;
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0

modify是在修改字段类型,加上first选项在修改字段类型时顺便就把em字段移动到开头了

mysql> desc user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| em | varchar(60) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
5 rows in set (0.00 sec)

今晚(2017年8月3日 00点25分)的最后一个字段操作命令了。完了这个就去睡啦。。

修改表名

别问我为什么把修改表名放在了字段操作里面讲。我也不知道原文作者怎么想的啊。。。真是伤脑筋啊。先敲吧,敲完有必要搬迁的话就搬迁吧。。 ;

|类别|详解| |—–|——| |基本语法|alter table 旧表名 rename 新表名 ; |示例代码 |alter table user rename new_user|示例说明|将表user改名为new_user 感觉这个命令真的简单。不难理解啊。英语好的好处吧?? 早在前面就早该将啦。

mysql> alter table user rename new_user;
Query OK, 0 rows affected (0.35 sec)
mysql> desc new_user;
±---------±--------------±-----±----±--------±------+
| Field | Type | Null | Key | Default | Extra |
±---------±--------------±-----±----±--------±------+
| em | varchar(60) | YES | | NULL | |
| username | varchar(20) | YES | | NULL | |
| password | varchar(32) | YES | | NULL | |
| createtime | int(10) | YES | | NULL | |
| createip | int(10) | YES | | NULL | |
±---------±--------------±-----±----±--------±------+
5 rows in set (0.00 sec)

hahahah,今晚的完啦。。。这些就上篇吧。也写了两天呢。 明天开始写下篇。老规矩,边学边写。 下篇要讲这些内容啦。

image.png