《别再说你不会Mysql了》之“数据库和数据表的基本操作”

前言:

        数据库使用搭配Navicat,长期使用需要付费,最新版本破解不稳定,我用的老版(这样商家也不会追究太多)

        再就是数据库不止这一种,这是Mysql的专场,作为前端开发者,常用的是mongodb

        部分学校教课用到的是Mysql技术与应用,很薄的一本,但实际Mysql工作用到的资料还有配套一本大约2倍厚的,提醒大家,这只是入门,并且单是语句用不到什么技术含量,多敲就能过。

        以下内容只包括基本操作,并无框架之类,希望能为入门开发者和高校学生备考提供借鉴,同时也是作为我的前端生涯广度学习上的记录。

        另外开始部分笔者会写的特别详细,小白式文档,且附带语句代码和效果,语言不枯燥,,带你一起高效学习,快速建立回溯复习。

        同时引用他人博客链接作为补充,增强文章科学性。

                                                数据库

创建数据库:

CREATE DATABASE 数据库名;

CREATE DATABASE 数据库;

效果图:

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第1张图片

xxgc2同理,使用下面语句即可查询到。

查看过去创建的数据库:

SHOW DATABASES;

效果:

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第2张图片

顾名思义是查询你mysql里面所有的数据库

查看刚创建好的数据库:

SHOW CREATE TABLE 数据库;

修改数据库字符编码

ALTER DATABASE 数据库 DEFAULT CHARACTER SET gbk COLLATE gbk_bin;

和修改utf-8编码类似,为了统一规范,让机器识别(例如不用utf-8编译程序往往和中文乱码问题有关)

 效果:

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第3张图片

删除不需要的数据库

DROP DATABASE 数据库;

效果:

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第4张图片

然后        SHOW DATABASE 数据库;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第5张图片

这里可能删除后表仍然显示过去创建的查询,但实际它是个空查询没有实际意义

                                                数据表

 创建数据表

例如让你把以下数据存入表中

CREATE TABLE 数据表名称
(
字段名  数据类型[完整性约束条件],
字段名  数据类型[完整性约束条件],
字段名  数据类型[完整性约束条件],
.....
);

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第6张图片

 注意:倒数第一行语句没有 ,          

查看数据表

SHOW CREATE TABLE 数据库;

有些材料提到加\G(且不加;)来使结果整齐,因为现在都用navicat来显示,所以不建议用\G,我自己在navicat里操作试过\G后,暂时不能正常运行给出结果

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第7张图片

使用DESCRIBE 语句查看数据表(很重要)

DESCRIBE teacher;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第8张图片

修改表名

ALTER TABLE 旧表名  RENAME [TO] 新表名;

其实sql语句无严格大小写区分,按理说小写还容易理解,但是在linux虚拟机里对大小写有限制,因此教材普遍大写使用

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第9张图片

        可能出现的的问题

当你创建了一个名为数据库2的

然后对它进行重命名后,如果点击保存表,同时弹出框内输入你所改好的表名

左下角内容框会同步修改;但是如果只是像右边输入DESCRBE语句,左边内容框不会同步改变

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第10张图片

修改字段名和数据类型(同时修改两个)

ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;

这里出现个插曲(bug),在你describe之前,

很有可能是以下这个情况,有可能是因为重复操作导致,用        describe 表名        检查一下就好

很多博客说是id字段前面添加空格导致,这里提供参考       Mysql错误:#1054 - Unknown column ‘id‘ in ‘field list‘ 解决办法_lxw1844912514的博客-CSDN博客

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第11张图片

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第12张图片

修改字段的数据类型(只修改一个)

 ALTER TABLE 表名 MODIFY 字段名 新数据类型;

 ALTER TABLE 数据库3 MODIFY name INT(10);
DESCRIBE 数据库3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第13张图片

添加字段

 ALTER TABLE 表名
 ADD 新字段名 数据类型[约束条件]

ALTER TABLE 数据库3	ADD age INT(4);
DESCRIBE 数据库3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第14张图片

 删除字段

ALTER TABLE 表名    DROP 字段名;

下面删除age字段

ALTER TABLE 数据库3	DROP age;
DESCRIBE 数据库3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第15张图片

修改字段的位置(和类型)

ALTER TABLE 表名 MODIFY 字段名1 新数据类型 FIRST| (AFTER 字段名2);

ALTER TABLE 数据库3 MODIFY email INT(4) FIRST ;
DESCRIBE	数据库3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第16张图片

删除数据表

DROP TABLE 数据表;

DROP TABLE xxgc2;
DESCRIBE xxgc2;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第17张图片

                                         数据表的约束

        主键约束(单字段)

什么是主键?

MySql数据库学习(一)主键_牟小喵的博客-CSDN博客_主键用什么表示

创建表时顺便添加主键

字段名    数据类型    PRIMARY KEY;

CREATE TABLE 数据表2
(
id INT(2) PRIMARY KEY,
name INT(4)
);
DESCRIBE 数据表2;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第18张图片

 可能出现的问题

当对sql语句比如以下的,重复使用时会报错,原因是表已经建好,而命令自上而下进行。

解决:删除语句或者用快捷键ctrl+/ 改成注释

CREATE TABLE 数据表2
(
id INT(2) PRIMARY KEY,
name INT(4)
);
DESCRIBE 数据表2;

创建表之后单独添加主键

ALTER TABLE 表名    MODIFY     字段名    数据类型    PRIMARY KEY;

 ALTER TABLE 数据库3 	MODIFY name 	int(4)	PRIMARY KEY;
DESCRIBE	数据库3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第19张图片

 删除主键(约束)

ALTER TABLE 表名    DROP PRIMARY KEY;

 ALTER TABLE `数据库3` DROP PRIMARY KEY;
 DESCRIBE	`数据库3`;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第20张图片

关于主键的注意事项

主键确实是唯一的,但组成主键的字段却不唯一(有些扯淡,毕竟是工科不如理科定理严谨,只是为了我们人类的使用)

我们下面接触复合主键

        复合主键

创建表时指定复合主键

PRIMARY KEY(字段名1,字段名2....);

CREATE	TABLE 数据表3
(
id INT(4),
name INT(4),
age	VARCHAR(10),
height	INT(5),
	PRIMARY	KEY(id,age)
);
DESCRIBE	数据表3;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第21张图片

        注意事项

由于在naviCat中操作的原因,不用在操作语句前置

USE    某数据表

删除表来练习和节省空间

DPOP TABLE 表名;

 复合主键额外添加

ALTER TABLE 表名    ADD PRIMARY KEY(字段名1,字段名2...);

 CREATE TABLE 数据表4
 (
 id INT(4),
 name INT(5),
 age INT(10),
 heigt VARCHAR(5)
 );
 ALTER TABLE 数据表4 ADD PRIMARY KEY(age, name);
DESCRIBE 数据表4;

   《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第22张图片

删除复合主键

操作和删除单字段主键命令相同

ALTER TABLE 表名    DROP PRIMARY KEY;

                                                外键约束

CONSTRAINT 外键名 FOREIGN KEY (从表的外键字段名) REFERENCES 主表名 (主表的主键字段名)

        创建表时添加

CREATE TABLE 主表
(
id int(2) PRIMARY KEY,
name VARCHAR(2),
location VARCHAR(3),
height INT(4)
);
CREATE TABLE 从表
(
	id int(2) PRIMARY KEY,
	name INT(3),
	weight INT(3),
	old INT(4),
	CONSTRAINT 外键名 FOREIGN KEY(name)REFERENCES 主表(id)
);
-- DESCRIBE 主表; 这样打印,显示不了外键约束
-- DESCRIBE 从表;
show CREATE TABLE 主表;
show create TABLE 从表;

 从表打印:

 然后打印出这一坨,不忍直视的东西里面藏着你给的约束,目前只有从表能看出多了写东西,主表应该是没变

可能出现的问题

mysql的大小写问题,报错https://www.csdn.net/tags/NtTagg2sOTQwMTUtYmxvZwO0O0OO0O0O.html

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第23张图片

设置主表从表的真正约束

        我认为数据库中的数据不能像强制类型和部分弱类型语言隐式转换而导致的,

要求:主表的主键字段和从表的外键字段的数据类型必须一致或兼容,含义还要一样。

据说因为主外键关联的原因,必须先创建主表(咱也不晓得,或许编个程序可以解决这些鸡肋的问题)

 后来添加外键约束

ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY(从表的外键字段名) REFERENCES 主表名(主表的主字段名);

1.老样子先删除上面那两个表,以便节省空间

DROP TABLE 主表;
DROP TABLE 从表;

2.平平无奇地创建带主键地两个表

CREATE TABLE `主表`
(
id INT(4) PRIMARY KEY,
name VARCHAR(4),
height INT(3)
);
 CREATE TABLE `从表`
(
id INT(3) PRIMARY KEY,
name VARCHAR(4),
height INT(2)
);

3.检查一下(这里应该检查从表就够了,因为后面添加外键约束也是检查的从表,主表不明显,或者说没有变化)

SHOW CREATE TABLE 主表;

 《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第24张图片

 4.操作

ALTER TABLE 从表 ADD CONSTRAINT 外键名 FOREIGN KEY(name) REFERENCES 主表(id);

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第25张图片

5.检查结果

SHOW CREATE TABLE `从表`;

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第26张图片

 据说要和添加外键约束 前的从表进行比较,也许没区别呢(自己逝世吧!)

可能出现的问题

错误:MySQL server version for the right syntax to use near - 走看看

定义字段时关键字冲突

《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第27张图片

 删除外键约束

ALTER TABLE 从表名 DROP FOREIGN KEY 外键名;

ALTER TABLE 从表 DROP FOREIGN KEY 外键名;

 《别再说你不会Mysql了》之“数据库和数据表的基本操作”_第28张图片

 注意:这里你检查的时候,特别是仔细对比和之前的结果来确定外键约束是否被完全删除时,可能会发现多了,或者说没有删除某一段信息,原因在于,留下的是一个同名索引,

详情请见索引类型文章,后续(一周内)我也会完善这一系列,因为我搜到的大多是些转载的水文章

                                             非空约束

  意思是经过非空约束的字段值不能为空,同一个数据表中可定义多个非空字段(也就是和主键的唯一形成了对比)

貌似默认就是非空约束,可以在上面的例子中观察一下捏

 创建表同时添加非空约束

字段名 数据类型 NOT NULL;

         像主键一样的操作,略过了,这部分没什么意义,好比告诉你整个网页空白的地方是空格...(奇妙的比喻)

    为已经存在的表添加非空约束

ALTER TABLE 表名 MODIFY 字段名 新数据类型 NOT NULL;

 删除非空约束

ALTER TABLE 表名 MODIFY 字段名 数据类型;

                                             唯一约束

和非空约束对立,

创建表同时添加唯一约束

字段名    数据类型     UNIQUE;

后来添加唯一约束

ALTER    TABLE 表名 MODIFY 字段名 新数据类型 UNIQUE;

你可以看到没什么新鲜的东西,也许就两个或许一个单词看起来陌生一点

删除唯一约束

ALTER TABLE 表名 DROP INDEX 字段名;

关键词敲几遍,随用随查,也就会了

                                                默认约束

  确确实实是非空约束的完整版了MySQL默认约束_风叶翩翩的博客-CSDN博客_默认约束

用户插入新的数据行时,若没有为该列指定数据,则默认值填补,也可以是空值(NULL)

创建表添加默认约束

字段名 数据类型 DEFAULT 默认值;

后来添加默认约束

ALTER TABLE 表名 MODIFY 字段名 数据类型 DEFAULT 默认值;

删除默认约束

ALTER    TABLE 表名 MODIFY 字段名 数据类型;

                        设置表的字段值自动增加

【MySQL】轻松学习 列的完整性约束3(自动增长和设置默认)_霸道小明的博客-CSDN博客_设置字段值自动增加y

是个宝藏博主呢,去看看吧。

字段值自动增加涉及到Extra内容

创建表时指定字段值自动增加

字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;

后来设置自动增加

ALTER TABLE 表名 MODIFY 字段名 新数据类型AUTO_INCREMENT;

删除自动增加

ALTER TABLE 表名 MODIFY 字段名 数据类型;

案例——学生选课数据库(搭配本系列之二数据表记录的更新操作)

-- CREATE DATABASE 学生选课;
-- 创建学生表
-- CREATE TABLE studentInfo
-- (
-- sno char(8) PRIMARY KEY NOT NULL,
-- sname VARCHAR(10) NOT NULL,
-- sgender CHAR(2),
-- sbirth DATE,
-- sclass VARCHAR(20)
-- );
-- 教师表
-- CREATE TABLE teacher
-- (
-- tno char(4) PRIMARY KEY NOT NULL,
-- tname VARCHAR(10) NOT NULL,
-- tgender CHAR(2),
-- tedu VARCHAR(10),
-- tpro VARCHAR(8) DEFAULT '讲师'
-- );
-- 课程表
-- CREATE TABLE courese
-- (
-- cno CHAR(4) PRIMARY KEY NOT NULL,
-- cname VARCHAR(40) UNIQUE,
-- cperiod INT,
-- credit DECIMAL(3,1),
-- ctno CHAR(4),
-- CONSTRAINT fk_teacher_course FOREIGN KEY(ctno) REFERENCES teacher(tno)
-- );
-- 选课表
-- CREATE TABLE elective
-- (
-- sno CHAR(8),
-- cno CHAR(4),
-- score 	INT,
-- PRIMARY KEY(sno,cno),
-- CONSTRAINT fk_course_elective FOREIGN KEY(cno) REFERENCES course(cno),
-- CONSTRAINT fk_stu_elctive FOREIGN KEY(sno) REFERENCES studentInfo(sno)
-- );

你可能感兴趣的:(别再说你不会Mysql,sql,数据库,database,后端)