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

前言: 数据库使用搭配Navicat,长期使用需要付费,最新版本破解不稳定,我用的老版(这样商家也不会追究太多) 再就是数据库不止这一种,这是Mysql的专场,作为前端开发者,常用的是mongodb 部分学校教课用到的是Mysql技术与应用,很薄的一本,但实际Mysql工作用到的资料还有配套一本大约2倍厚的,提醒大家,这只是入门,并且单是语句用不到什么技术含量,多敲就能过。 以下内容只包括基本操作,并无框架之类,希望能为入门开发者和高校学生备考提供借鉴,同时也是作为我的前端生涯广度学习上的记录。 另外开始部分笔者会写的特别详细,小白式文档,且附带语句代码和效果,语言不枯燥,,带你一起高效学习,快速建立回溯复习。
同时引用他人博客链接作为补充,增强文章科学性。
数据库 创建数据库: CREATE DATABASE 数据库名;
CREATE DATABASE 数据库;
效果图:
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片


xxgc2同理,使用下面语句即可查询到。
查看过去创建的数据库: SHOW DATABASES;
效果:
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

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

查看刚创建好的数据库: SHOW CREATE TABLE 数据库;
修改数据库字符编码

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

和修改utf-8编码类似,为了统一规范,让机器识别(例如不用utf-8编译程序往往和中文乱码问题有关)
效果:
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

删除不需要的数据库 DROP DATABASE 数据库;
效果:
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

然后SHOW DATABASE 数据库;
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

这里可能删除后表仍然显示过去创建的查询,但实际它是个空查询没有实际意义
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

数据表 创建数据表 例如让你把以下数据存入表中
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

CREATE TABLE 数据表名称
(
字段名数据类型[完整性约束条件],
字段名数据类型[完整性约束条件],
字段名数据类型[完整性约束条件],
.....
);
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片


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

查看数据表 SHOW CREATE TABLE 数据库;
有些材料提到加\G(且不加;)来使结果整齐,因为现在都用navicat来显示,所以不建议用\G,我自己在navicat里操作试过\G后,暂时不能正常运行给出结果
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

使用DESCRIBE 语句查看数据表(很重要) DESCRIBE teacher;
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

修改表名 ALTER TABLE 旧表名RENAME [TO] 新表名;
其实sql语句无严格大小写区分,按理说小写还容易理解,但是在linux虚拟机里对大小写有限制,因此教材普遍大写使用
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

可能出现的的问题 当你创建了一个名为数据库2的表
然后对它进行重命名后,如果点击保存表,同时弹出框内输入你所改好的表名
左下角内容框会同步修改;但是如果只是像右边输入DESCRBE语句,左边内容框不会同步改变
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片




修改字段名和数据类型(同时修改两个) ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
这里出现个插曲(bug),在你describe之前,
很有可能是以下这个情况,有可能是因为重复操作导致,用describe 表名检查一下就好
很多博客说是id字段前面添加空格导致,这里提供参考Mysql错误:#1054 - Unknown column ‘id‘ in ‘field list‘ 解决办法_lxw1844912514的博客-CSDN博客
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

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

修改字段的数据类型(只修改一个) ALTER TABLE 表名 MODIFY 字段名 新数据类型;
ALTER TABLE 数据库3 MODIFY name INT(10); DESCRIBE 数据库3;

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


添加字段 ALTER TABLE 表名
ADD 新字段名 数据类型[约束条件]
ALTER TABLE 数据库3 ADD age INT(4); DESCRIBE 数据库3;


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

删除字段 ALTER TABLE 表名DROP 字段名;
下面删除age字段
ALTER TABLE 数据库3 DROP age; DESCRIBE 数据库3;

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

修改字段的位置(和类型) ALTER TABLE 表名 MODIFY 字段名1 新数据类型 FIRST| (AFTER 字段名2);
ALTER TABLE 数据库3 MODIFY email INT(4) FIRST ; DESCRIBE 数据库3;


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

删除数据表 DROP TABLE 数据表;

DROP TABLE xxgc2; DESCRIBE xxgc2;

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



数据表的约束 主键约束(单字段) 什么是主键?
MySql数据库学习(一)主键_牟小喵的博客-CSDN博客_主键用什么表示
创建表时顺便添加主键 字段名数据类型PRIMARY KEY;
CREATE TABLE 数据表2 ( id INT(2) PRIMARY KEY, name INT(4) ); DESCRIBE 数据表2;

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

可能出现的问题 当对sql语句比如以下的,重复使用时会报错,原因是表已经建好,而命令自上而下进行。
解决:删除语句或者用快捷键ctrl+/ 改成注释
CREATE TABLE 数据表2 ( id INT(2) PRIMARY KEY, name INT(4) ); DESCRIBE 数据表2;

创建表之后单独添加主键 ALTER TABLE 表名MODIFY字段名数据类型PRIMARY KEY;
ALTER TABLE 数据库3MODIFY nameint(4) PRIMARY KEY; DESCRIBE 数据库3;

别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片
删除主键(约束) ALTER TABLE 表名DROP PRIMARY KEY;

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


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

关于主键的注意事项 主键确实是唯一的,但组成主键的字段却不唯一(有些扯淡,毕竟是工科不如理科定理严谨,只是为了我们人类的使用)
我们下面接触复合主键
复合主键 创建表时指定复合主键 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|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

注意事项 由于在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|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片


删除复合主键 操作和删除单字段主键命令相同
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|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

然后打印出这一坨,不忍直视的东西里面藏着你给的约束,目前只有从表能看出多了写东西,主表应该是没变
可能出现的问题 mysql的大小写问题,报错https://www.csdn.net/tags/NtTagg2sOTQwMTUtYmxvZwO0O0OO0O0O.html
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

设置主表从表的真正约束 我认为数据库中的数据不能像强制类型和部分弱类型语言隐式转换而导致的,
要求:主表的主键字段和从表的外键字段的数据类型必须一致或兼容,含义还要一样。
据说因为主外键关联的原因,必须先创建主表(咱也不晓得,或许编个程序可以解决这些鸡肋的问题)
后来添加外键约束 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|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

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

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

5.检查结果
SHOW CREATE TABLE `从表`;

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

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

可能出现的问题 错误:MySQL server version for the right syntax to use near - 走看看
定义字段时关键字冲突
别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”
文章图片

删除外键约束 ALTER TABLE 从表名 DROP FOREIGN KEY 外键名;
ALTER TABLE 从表 DROP FOREIGN KEY 外键名;

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

注意:这里你检查的时候,特别是仔细对比和之前的结果来确定外键约束是否被完全删除时,可能会发现多了,或者说没有删除某一段信息,原因在于,留下的是一个同名索引,
详情请见索引类型文章,后续(一周内)我也会完善这一系列,因为我搜到的大多是些转载的水文章
非空约束 意思是经过非空约束的字段值不能为空,同一个数据表中可定义多个非空字段(也就是和主键的唯一形成了对比)
貌似默认就是非空约束,可以在上面的例子中观察一下捏
创建表同时添加非空约束 字段名 数据类型 NOT NULL;
像主键一样的操作,略过了,这部分没什么意义,好比告诉你整个网页空白的地方是空格...(奇妙的比喻)
为已经存在的表添加非空约束 ALTER TABLE 表名 MODIFY 字段名 新数据类型 NOT NULL;
删除非空约束 ALTER TABLE 表名 MODIFY 字段名 数据类型;
唯一约束 和非空约束对立,
创建表同时添加唯一约束 字段名数据类型UNIQUE;
后来添加唯一约束 ALTERTABLE 表名 MODIFY 字段名 新数据类型 UNIQUE;
你可以看到没什么新鲜的东西,也许就两个或许一个单词看起来陌生一点
删除唯一约束 ALTER TABLE 表名 DROP INDEX 字段名;
关键词敲几遍,随用随查,也就会了
默认约束 确确实实是非空约束的完整版了MySQL默认约束_风叶翩翩的博客-CSDN博客_默认约束
用户插入新的数据行时,若没有为该列指定数据,则默认值填补,也可以是空值(NULL)
创建表添加默认约束 字段名 数据类型 DEFAULT 默认值;
后来添加默认约束 ALTER TABLE 表名 MODIFY 字段名 数据类型 DEFAULT 默认值;
删除默认约束 ALTERTABLE 表名 MODIFY 字段名 数据类型;
设置表的字段值自动增加 【MySQL】轻松学习 列的完整性约束3(自动增长和设置默认)_霸道小明的博客-CSDN博客_设置字段值自动增加y
是个宝藏博主呢,去看看吧。
字段值自动增加涉及到Extra内容
创建表时指定字段值自动增加 字段名 数据类型 PRIMARY KEY AUTO_INCREMENT;
后来设置自动增加 ALTER TABLE 表名 MODIFY 字段名 新数据类型AUTO_INCREMENT;
删除自动增加 ALTER TABLE 表名 MODIFY 字段名 数据类型;
【别再说你不会Mysql|《别再说你不会Mysql了》之“数据库和数据表的基本操作”】
案例——学生选课数据库(搭配本系列之二数据表记录的更新操作)
-- 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), -- scoreINT, -- PRIMARY KEY(sno,cno), -- CONSTRAINT fk_course_elective FOREIGN KEY(cno) REFERENCES course(cno), -- CONSTRAINT fk_stu_elctive FOREIGN KEY(sno) REFERENCES studentInfo(sno) -- );

    推荐阅读