这类文章,记录我看《MySQL5.6从零开始学》这本书的过程,将本身以为重要的东西记录一下,并有可能帮助到大家,在写的博文前几篇度会很是基础,只要动手敲,跟着我写的例子所有实现一遍,基本上就搞定了,前期很难理解的东西基本没有,因此写博文的内容,就是以练题的形式来呈现的。html
须要用的资料以连接的形式给须要的同窗。mysql
我用的mysql版本为: Mysql-5.5.45-win64.msi 密码是:26zwsql
图形化工具 Navicat(前期不推荐用,直接手动敲): Navicat 密码:c7fs数据库
开始个人MySQL之旅吧 始于2016.12.04windows
--WH工具
1、数据库的安装post
这个就不在这里过多阐述了,由于网上实在是太多安装mysql的教程了,有了我给的mysql,在按照这个安装教程(MySQL安装教程)去看,就可以安装无缺。学习
安装好mysql后,若是须要使用windows命令窗口(也就是cmd)来操做mysql,那么就须要配置环境变量,在安装好的mysql下找到bin,将其目录放到环境变量path中去,就好了,检测成功与否的方法是在cmd命令窗口中输入mysql,就会出现一大段英文,就说明成功了,反之失败,若是不会的话就去百度搜教程。 url
2、数据库的基本操做spa
一、开启mysql服务命令
net start mysql
二、进入mysql的两种方式
明文进入:mysql -uroot -proot 格式:mysql -u账号 -p密码
密文进入:mysql -uroot -p 按enter会提示你输入密码(Enter pssword:),此时你写的密码就会显示为***这样。
三、查看mysql中全部的数据库(通常在固定的单词命令就会是用大写,这个要习惯,看多了敲多了就认识了)
前面四个数据库是mysql中自带的,也就是必须的.
SHOW DATABASES;
四、建立名为test_1的数据库
格式:CREATE DATABASE 数据库名
CREATE DATABASE test_1;
五、删除名为test_1的数据库
格式:DROP DATABASE 数据库名
DROP DATABASE test_1;
总结:学习了对数据库的三个操做,一、查看全部数据库 二、建立数据库 三、删除数据库
3、数据表的基本操做
数据表和数据库还有Mysql三者的关系
mysql中保存了不少数据库、一个数据库中能够保存不少表。
对数据表的增(建立表)删(删除表)改(修改表字段)查(查询表结构)。 注意:这里的操做对象是表,对表的操做也就是表的结构,和表中的字段的操做(字段和记录要分清楚)
前提:表是在数据库下的,因此要先确实使用哪一个数据库。
USE test_1;
一、建立数据表
格式:CREATE TABLE 数据表名(
字段名1 数据类型[列级别约束条件],
字段名2 数据类型[列级别约束条件],
字段名3 数据类型[列级别约束条件]
); 注意:格式不必定须要这样隔着写,彻底能够所有写成一行。可是那样写可观性很是差。我这样写只是为了能够看的更清晰。
解释:一、[]中括号中的内容表示能够有能够没有,二、列级别这个“列”必定要搞清楚说的是什么,一张表中有行有列,列表示竖,行表示横 三、约束条件后面会讲到
1.一、建立没有约束的student表
CREATE TABLE student(
id INT(11),
name VARCHAR(12),
age INT(11)
);
注释:SHOW TABLES 查询数据库底下的全部表。
1.二、建立有约束的student表
六大约束:主键约束、外键约束、非空约束、惟一约束、默认约束、自动增长
1.2.1:主键约束
PRIMARY KEY(primary key):独一无二(惟一)和不能为空(非空),通俗的讲,就是在表中增长记录时,在该字段下的数据不能重复,不能为空,好比以上面建立的表为例子,在表中增长两条记录,若是id字段用了主键约束。则id不能同样,而且不能为空。通常每张表中度有一个字段为主键,惟一标识这条记录。之后须要找到该条记录也能够同这个主键来确认记录,由于主键是惟一的,而且非空,一张表中每一个记录的主键度不同,因此根据主键也就能找到对应的记录。而不是多条重复的记录。若是没有主键,那么表中就会存在不少重复的记录,那么即浪费存储空间,在查询时也消耗更多资源。
通常被主键约束了的字段度习惯性的称该字段为该表的主键
单字段主键约束
两种方式均可以
CREATE TABLE student( CREATE TABLE student(
id INT(11) PRIMARY KEY, id INT(11),
name VARCHAR(12), name VARCHAR(12),
age INT(11) age INT(11),
); PRIMARY KEY(id) );
多字段主键约束(复合主键)
这个id和name都市主键,说明在之后增长的插入的记录中,id和name不能同时同样,好比说能够是这样。一条记录为id=1,name=yyy、另外一条记录为:id=1,name=zzz。 这样是能够的。并非大家所理解的两个字段分别度不能够相同。
CREATE TABLE student( CREATE TABLE student(
id INT(11) PRIMARY KEY, id INT(11),
name VARCHAR(12) PRIMARY KEY, name VARCHAR(12),
age INT(11) age INT(11),
); PRIMARY KEY(id,name) );
1.2.2:外键约束
什么是外键举个例子就清楚了,有两张表,一张表是emp(员工)表,另外一张表是dept(部门)表,一个员工属于一个部门,那么如何经过员工能让咱们本身他在哪一个部门呢?那就只能在员工表中增长一个字段,能表明员工所在的部门,那该字段就只能是存储dept中的主键了(由于主键是惟一的,才能确实是哪一个部门,进而表明员工所在的部门,若是是部门名称,有些部门的名称多是同名。就不能区分了。),像这样的字段,就符合外键的特色,就可使用外键约束,使该字段只可以存储另外一张表的主键。若是不被外键约束,那么该字段就没法保证存储进来的值就必定是另外一张表的主键值。
外键约束的特色:
一、外键约束能够描述任意一个字段(包括主键),能够为空,而且一个表中能够有多个外键。可是外键字段中的值必须是另外一张表中的主键。
二、这样被外键关联的两种表的关系能够称为父子表或者主从表。子表(从表)拥有外键字段的表,父表(主表)被外键字段所指向的表。
三、子表被外键约束修饰的字段必须和父表的主键字段的类型同样。
注意:一个表中有被外键修饰的字段,就称该表有外键(是“有外键”。而不是“是外键”),并会给该表中的外键约束取一个名称,因此咱们常说的这个表有没有外键,指的不是被外键约束修饰的字段名,而是指这个表是否有存在外键约束。也就是说,不能说这个表的外键是xxx(该表中被外键约束修饰的字段名),这种说法是错误的,可是大多数人已经习惯了这样,虽然影响不大,可是在不少时候须要理解一个东西时,会形成必定的困扰。
格式:CONSTRAINT 外键名称 FOREIGN KEY(被外键约束的字段名称) REFERENCES 主表名(主键字段)
英文解释:CONSTRAINT:约束 REFERENCES:参考
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22),
location VARCHAR(50),
PRIMARY KEY(id)
);
CREATE TABLE tableB
(
id INT(11),
name VARCHAR(22) NOT NULL,
deptId INT(11),
PRIMARY KEY(id),
CONSTRAINT tableA_tableB_1 FOREIGH KEY(deptId) REFERENCES tableA(id)
);
解释:tableB中有一个名为tableA_tableB_1的外键关联了tableA和tableB两个表,被外键约束修饰的字段为tableB中的deptId,主键字段为tableA中的id
1.2.3:非空约束
NOT NULL. 被该约束修饰了的字段,就不能为空,主键约束中就包括了这个约束
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) NOT NULL,
location VARCHAR(50),
PRIMARY KEY(id)
);
1.2.4:惟一约束
UNIQUE 被惟一约束修饰了的字段,表示该字段中的值惟一,不能有相同的值,通俗点讲,就比如插入两条记录,这两条记录中处于该字段的值不能是同样的。
CREATE TABLE tableA
(
id INT(11),
name VARCHAR(22) UNIQUE,
location VARCHAR(50),
PRIMARY KEY(id)
);
也就是说在插入的记录中,每条记录的name值不能是同样的。
1.2.5:默认约束
Default 指定这一列的默认值为多少,好比,男性同窗比较多,性别就能够设置为默认男,若是插入一行记录时,性别没有填,那么就默认加上男
CREATE TABLE table
(
id INT(11) PRIMARY KEY,
name VARCHAR(22) NOT NULL,
deptId INT(11) DEFAULT 1111,
salary FLOAT
);
1.2.6:自动增长
AUTO_INCREMENT 一个表只能一个字段使用AUTO_INCREMENT,而且使用这个约束的字段只能是整数类型(任意的整数类型 TINYINT,SMALLIN,INT,BIGINT),默认值是1,也就是说从1开始增长的。通常就是给主键使用的,自动增长,使每一个主键的值度不同,而且不用咱们本身管理,让主键本身自动生成
CREATE TABLE table
(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(22) NOT NULL
);
二、查询表结构
2.一、查看表基本结构语句
格式1:DESCRIBE 表名/DESC 表名 这两个的功能是同样的,简写了单词describe
DESCRIBE student;
2.二、查看建立表的语句
格式:SHOW CREATE TABLE 表名
SHOW CREATE TABLE student;
这样显示的格式很很差,看不清楚,因此有了下面这个语句
格式:SHOW CREATE TABLE 表名\G
SHOW CREATE TABLE student\G;
三、修改数据表
修改数据表包括:对表中字段的增长、删除、修改。 在这个里面用的关键字为 ALTER
3.一、修改表名
格式:ALTER TABLE<旧表名> RENAME[TO]<新表名>;
将student表名改成student1(改完后在改回来)
ALTER TABLE student RENAME TO student1;
3.二、修改表中的字段名
格式:ALTER TABLE<表名> CHANGE<旧字段名><新字段名><新数据类型>
将student表中的name字段名改成 username
ALTER TABLE student CHANGE name username VARCHAR(30);
解释:这个不只能改变字段名,还能将字段的数据类型一并修改,也就是说,你能够单纯的只修改字段名,也能够单纯的只修改数据类型,也能够同时一块儿修改
3.三、修改表中的数据类型
格式:ALTER TABLE<表名> MODIFY<字段名><数据类型>
ALTER TABLE student MODIFY username VARCHAR(20);
解释:只能修改字段名的数据类型,可是其原理跟上面change作的事情同样,这里也有修改字段名的过程,只不过修改后的字段名和修改前的字段名相同,可是数据类型不同。
3.四、修改字段的排列位置
方式1:ALTER TABLE<表名> MODIFY<字段1><数据类型> FIRST|AFTER<字段2>
解释:将字段1的位置放到第一,或者放到指定字段2的后面
ALTER TABLE student MODIFY username VARCHAR(20) AFTER age;
方式2:ALTER TABLE<表名> CHANGE<字段1><字段2><数据类型> FIRST|AFTER<字段3>
解释:实际上是同样的,将是字段2覆盖字段1,而后在进行排序
ALTER TABLE student CHANGE username username VARCHAR(20) AFTER age;
总结
CHANGE和MODIFY的区别?
原理都市同样的,MODIFY只能修改数据类型,可是CHANGE可以修改数据类型和字段名,也就是说MODIFY是CHANGE的更具体化的一个操做。可能以为用CHANGE只改变一个数据类型不太爽,就增长了一个能直接改数据类型的使用关键字MODIFY来操做。
3.五、添加字段
格式:ALTER TABLE<表名称> ADD<新字段名><数据类型>[约束条件][FIRST|AFTER<已存在的表名>]
解释:在一个特定位置增长一个新的字段,若是不指定位置,默认是最后一个。
ALTER TABLE student ADD sex VARCHAR(11);
3.六、删除字段
格式:ALTER TABLE<表名称> DROP<字段名>;
ALTER TABLE student DROP sex;
3.七、删除表的外键约束
格式:ALTER TABLE<表名称> DROP FOREIGN KEY<外键约束名>
注意:外键约束名 指的不是被外键约束修饰的字段名,切记,而是咱们在建立外键约束关系时取的名字。
3.八、更改表的存储引擎
格式:ALTER TABLE<表名> ENGINE=<更改后的存储引擎名>
这个存储引擎目前我本身也不太清楚,虽然知道有哪几种引擎,可是稍微深刻一点就不清楚了,因此打算留到往后在说。
四、删除表
4.一、删除无关联表
格式:DROP TABLE<表名>;
ALTER TABLE student;
4.二、删除被其余表关联的主表
这个是比较重要的一点,在有外键关联关系的两张表中,若是删除主表,那么是删不掉的,而且会报错。由于有张表依赖于他。那怎么办呢?针对这种状况,总共有两种方法
一、先删除你子表,而后在删除父表,这样就达到了删除父表的目的,可是子表也要被删除
二、先解除外键关系,而后在删除父表,这样也能达到目的,而且保留了子表,只删除咱们不须要的父表。在3.7中就讲解了如何删除外键关系。
4、总结
讲了这么多,但实际中,用到的并非不少,特别是对表结构的修改的操做,在实际开发中,通常数据库表被定义下来了,就不会在修改了,发现数据库表设计的很差,也是将表所有删除,而后在从新建立过新表。可是在咱们学习的过程当中,这些操做仍是很重要的,由于须要这些基础来学习后面更深刻的东西,不可能由于实际中不用,就不学这不学那,要相信,无论作什么,那确定是有意义的事情,可能那意义并不大,可是往后确定会对咱们有所帮助。