另外开始部分笔者会写的特别详细,小白式文档,且附带语句代码和效果,语言不枯燥,,带你一起高效学习,快速建立回溯复习。
同时引用他人博客链接作为补充,增强文章科学性。
CREATE DATABASE 数据库名;
CREATE DATABASE 数据库;
效果图:
xxgc2同理,使用下面语句即可查询到。
SHOW DATABASES;
效果:
顾名思义是查询你mysql里面所有的数据库
SHOW CREATE TABLE 数据库;
ALTER DATABASE 数据库 DEFAULT CHARACTER SET gbk COLLATE gbk_bin;
和修改utf-8编码类似,为了统一规范,让机器识别(例如不用utf-8编译程序往往和中文乱码问题有关)
效果:
DROP DATABASE 数据库;
效果:
然后 SHOW DATABASE 数据库;
这里可能删除后表仍然显示过去创建的查询,但实际它是个空查询没有实际意义
例如让你把以下数据存入表中
CREATE TABLE 数据表名称
(
字段名 数据类型[完整性约束条件],
字段名 数据类型[完整性约束条件],
字段名 数据类型[完整性约束条件],
.....
);
注意:倒数第一行语句没有 ,
SHOW CREATE TABLE 数据库;
有些材料提到加\G(且不加;)来使结果整齐,因为现在都用navicat来显示,所以不建议用\G,我自己在navicat里操作试过\G后,暂时不能正常运行给出结果
DESCRIBE teacher;
ALTER TABLE 旧表名 RENAME [TO] 新表名;
其实sql语句无严格大小写区分,按理说小写还容易理解,但是在linux虚拟机里对大小写有限制,因此教材普遍大写使用
当你创建了一个名为数据库2的表
然后对它进行重命名后,如果点击保存表,同时弹出框内输入你所改好的表名
左下角内容框会同步修改;但是如果只是像右边输入DESCRBE语句,左边内容框不会同步改变
ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
这里出现个插曲(bug),在你describe之前,
很有可能是以下这个情况,有可能是因为重复操作导致,用 describe 表名 检查一下就好
很多博客说是id字段前面添加空格导致,这里提供参考 Mysql错误:#1054 - Unknown column ‘id‘ in ‘field list‘ 解决办法_lxw1844912514的博客-CSDN博客
ALTER TABLE 表名 MODIFY 字段名 新数据类型;
ALTER TABLE 数据库3 MODIFY name INT(10);
DESCRIBE 数据库3;
ALTER TABLE 表名
ADD 新字段名 数据类型[约束条件]
ALTER TABLE 数据库3 ADD age INT(4);
DESCRIBE 数据库3;
ALTER TABLE 表名 DROP 字段名;
下面删除age字段
ALTER TABLE 数据库3 DROP age;
DESCRIBE 数据库3;
ALTER TABLE 表名 MODIFY 字段名1 新数据类型 FIRST| (AFTER 字段名2);
ALTER TABLE 数据库3 MODIFY email INT(4) FIRST ;
DESCRIBE 数据库3;
DROP TABLE 数据表;
DROP TABLE xxgc2;
DESCRIBE xxgc2;
什么是主键?
MySql数据库学习(一)主键_牟小喵的博客-CSDN博客_主键用什么表示
字段名 数据类型 PRIMARY KEY;
CREATE TABLE 数据表2
(
id INT(2) PRIMARY KEY,
name INT(4)
);
DESCRIBE 数据表2;
当对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;
ALTER TABLE 表名 DROP PRIMARY KEY;
ALTER TABLE `数据库3` DROP PRIMARY KEY;
DESCRIBE `数据库3`;
主键确实是唯一的,但组成主键的字段却不唯一(有些扯淡,毕竟是工科不如理科定理严谨,只是为了我们人类的使用)
我们下面接触复合主键
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;
由于在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;
操作和删除单字段主键命令相同
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
我认为数据库中的数据不能像强制类型和部分弱类型语言隐式转换而导致的,
要求:主表的主键字段和从表的外键字段的数据类型必须一致或兼容,含义还要一样。
据说因为主外键关联的原因,必须先创建主表(咱也不晓得,或许编个程序可以解决这些鸡肋的问题)
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 主表;
4.操作
ALTER TABLE 从表 ADD CONSTRAINT 外键名 FOREIGN KEY(name) REFERENCES 主表(id);
5.检查结果
SHOW CREATE TABLE `从表`;
据说要和添加外键约束 前的从表进行比较,也许没区别呢(自己逝世吧!)
错误:MySQL server version for the right syntax to use near - 走看看
定义字段时关键字冲突
ALTER TABLE 从表名 DROP FOREIGN KEY 外键名;
ALTER TABLE 从表 DROP FOREIGN KEY 外键名;
注意:这里你检查的时候,特别是仔细对比和之前的结果来确定外键约束是否被完全删除时,可能会发现多了,或者说没有删除某一段信息,原因在于,留下的是一个同名索引,
详情请见索引类型文章,后续(一周内)我也会完善这一系列,因为我搜到的大多是些转载的水文章
意思是经过非空约束的字段值不能为空,同一个数据表中可定义多个非空字段(也就是和主键的唯一形成了对比)
貌似默认就是非空约束,可以在上面的例子中观察一下捏
字段名 数据类型 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)
-- );