前言
参考原文链接,本文是我边看原文学习,边摘抄写出来的。。。
http://mysql.phpxy.com/
看完上篇,看下篇。因为简书有内容长度限制,一篇实在写不完。
MySQL快速入门(下)
不到万不得已就将就着看本文吧,别看原文了.错别字多就算了,到后面还有还多语句的示例代码都张冠李戴了.当然,本文可能亦有错误,可以联系指正,不胜感激。
阅读本文前如果您了解常用的命令行操作会更加得心应手。什么都不会的也不行啊,至少你要会装好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自己创建的,用来管理数据库系统。
选中数据库
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数据库的表:
这些表里面的内容是关系数据库服务器相关的用户、权限、数据库状态、设置等相关的信息数据。
删除数据库
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就是选定表。
哈哈哈,用了这么多年还是觉得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 字段名 字段类型 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 |
好吧,刚开始我天真地想,改名?删掉字段,再增加字段不行吗?
不行,那你把数据咋办?也不要啦?
而改名的话数据是不受影响的。
类别 | 详解 |
---|---|
基本语法 | 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,今晚的完啦。。。这些就上篇吧。也写了两天呢。
明天开始写下篇。老规矩,边学边写。
下篇要讲这些内容啦。