Mysql命令整理
/*【数据管理-增删改】*/
USE test;
DROP TABLE demo;
-- 特别注意涉及主外键关系时,先插入主表数据
-- 主表:提供引用数据列的表(地基)
-- 子表:数据有引用于其他表的表
-- 主键:用于唯一标识表中某行数据的某列称为主键列
-- 外键:这一列数据来源于另外某列(可以是自身表或其他表的唯一非空的列)
-- 外键列值可以重复,主键列值不允许重复
SHOW TABLES;
SELECT * FROM student;
SELECT * FROM course;
SELECT * FROM score;
/*错误代码: 1452
Cannot add or update a child row:
a foreign key constraint fails (`test`.`score`,
CONSTRAINT `FK_SC_STUID` FOREIGN KEY (`stuid`) REFERENCES `student` (`sid`))*/\
INSERT INTO student VALUES(1,'未备注');
/*错误代码: 1452
Cannot add or update a child row:
a foreign key constraint fails (`test`.`score`,
CONSTRAINT `FK_SC_CTUID` FOREIGN KEY (`cid`) REFERENCES `course` (`cid`))*/
INSERT INTO course(cid,cname) VALUES(1,'JavaSE');
INSERT INTO score VALUES(1,1,100);
-- 批量插入多条数据
INSERT INTO student VALUES(2,'光辉'),(3,'Sprin'),
(4,'墨白'),(5,'finsk');
SELECT * FROM student;
-- 复制表结构(加一个永远不成立的条件即可)
CREATE TABLE student_copy AS SELECT * FROM student WHERE 1<>1;
SELECT * FROM student_copy;
INSERT INTO student_copy SELECT * FROM student;
SELECT * FROM student_copy;
/*错误代码: 1146
Table 'test.student_bk' doesn't exist*/
INSERT INTO student_bk SELECT * FROM student;
DROP TABLE IF EXISTS demo;/*删除表*/
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自动增长,默认起始值为1
dname VARCHAR(5) NOT NULL UNIQUE,
sex CHAR(1) DEFAULT 'M'
);
SHOW TABLES;
DESC demo;
SHOW CREATE TABLE demo;
-- 安装数据库的时候忘记设置字符编码
SET NAMES utf8;
-- 插入数据,注意char和varchar存储字符的长度
INSERT INTO demo VALUES(1,'Springer','M');
/*错误代码: 1406 dname字段插入的数值长度过大
Data too long for column 'dname' at row 1*/
INSERT INTO demo VALUES(1,'Sprin','M');
SELECT * FROM demo;
INSERT INTO demo VALUES(1,'Sprin','神仙');
INSERT INTO demo VALUES(1,'Sprin','神');
/*错误代码: 1062 主键重复
Duplicate entry '1' for key 'PRIMARY'*/
INSERT INTO demo VALUES(2,'Sprin','神');
/*错误代码: 1062 unique唯一约束起作用,dname列不允许重复
Duplicate entry 'Sprin' for key 'dname'*/
SELECT * FROM demo;
/*错误代码: 1048 dname列不允许为空
Column 'dname' cannot be null*/
INSERT INTO demo VALUES(3,NULL,'神');
INSERT INTO demo(id,dname) VALUES(4,'笑红尘');
SELECT * FROM demo;
/*错误代码: 1136 列的数量不匹配值的数量
Column count doesn't match value count at row 1*/
INSERT INTO demo VALUES(NULL,'上天','F');
INSERT INTO demo VALUES(NULL,'光辉','M');
SELECT * FROM demo;
-- 主键从17001开始 修改自动增长的起始值(注意自动增长只对数值列起作用)
ALTER TABLE demo AUTO_INCREMENT=17001;
INSERT INTO demo VALUES(NULL,'大胡子先生','M');
SELECT * FROM demo;
DROP TABLE IF EXISTS demo;
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自动增长,默认起始值为1
dname VARCHAR(5) NOT NULL UNIQUE,
sex CHAR(1) DEFAULT 'M' CHECK(sex IN('M','F'))
);
-- 注意:check检查约束在现在的MySQL版本中不起作用,只在SQLServer中起作用
-- 如果想在MySQL中实现检查约束,使用enum,或者使用触发器
INSERT INTO demo VALUES(NULL,'finsk','猿');
SELECT * FROM demo;
DROP TABLE IF EXISTS demo;
CREATE TABLE demo(
id INT PRIMARY KEY AUTO_INCREMENT, -- 自动增长,默认起始值为1
dname VARCHAR(5) NOT NULL UNIQUE,
sex ENUM('M','F')
);
/*错误代码: 1265
Data truncated for column 'sex' at row 1*/
INSERT INTO demo VALUES(NULL,'finsk','Y');
INSERT INTO demo VALUES(NULL,'finsk','M');
SELECT * FROM demo;
-- 补充:关于绝对引用和相对引用 . 看做中文 的
USE mysql; -- 切换数据库到mysql
/*错误代码: 1146 mysql数据库中的demo表不存在
Table 'mysql.demo' doesn't exist*/
SELECT * FROM demo; -- 相对引用
SELECT * FROM test.demo;
在企业开发中,经常需要修改原有表的字段的数据类型
或者,增加删除表中某列,或者增加删除某种约束
*/
/*【1】列的添加和删除、列的数据类型的修改,列名修改
alter table 表名 add 列名 列的数据类型; -- 在最后一列末尾追加
alter table 表名 add 列名 列的数据类型 after 列名2; -- 在列名2后增加一列
alter table 表名 add 列名 列的数据类型 first; -- 在第一列前面插入一列
alter table 表名 drop 列名;
alter table 表名 drop 列名1,列名2,……;
alter table 表名 modify 列名 新的数据类型; -- 修改列名
alter table 表名 change 列名 新列名 新的数据类型; -- 修改列名及数据类型
*/
DROP TABLE IF EXISTS student;
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(3) NOT NULL UNIQUE
);
-- 【1】增加列
ALTER TABLE student ADD sex CHAR(1) NOT NULL;
ALTER TABLE student ADD age INT AFTER sname;
ALTER TABLE student ADD classNo VARCHAR(8) FIRST;
SELECT * FROM student;
-- 【2】修改列名或列的数据类型
ALTER TABLE student MODIFY sname CHAR(30);
DESC student;
ALTER TABLE student CHANGE sname stuName VARCHAR(30);
DESC student;
-- 【3】删除列
ALTER TABLE student DROP sex;
DESC student;
ALTER TABLE student DROP classNo,DROP age;
DESC student;
/*【2】约束的添加和删除
alter table 表名 add constraint 约束名 约束语法;
【主键约束】
alter table score add constraint primary key PK_SC(scid);
【外键约束】
alter table scoce add constraint FK_SC_ST foreign key(stid) references student(sid);
【默认值约束】
alter table student alter classNo set default '20171101';
*/
CREATE TABLE course( -- 课程表
cid INT,
cname VARCHAR(30)
);
CREATE TABLE score(
stuid INT,
cid INT,
result NUMERIC(4,1)
);
SHOW TABLES;
-- 查看表之间的主外键关系,菜单【开始】-【新架构设计器】,将相应的表拖进即可
-- 【1】添加和删除主键约束
-- -- 不需要再指定主键列的列名,因为对于同一张表,主键列只有一组
ALTER TABLE course ADD CONSTRAINT PRIMARY KEY(cid);
ALTER TABLE course DROP PRIMARY KEY; -- 删除主键
-- 【2】添加和删除外键约束
ALTER TABLE score ADD CONSTRAINT FK_SC_STUID FOREIGN KEY(stuid) REFERENCES student(sid);
ALTER TABLE score DROP FOREIGN KEY FK_SC_STUID;
ALTER TABLE score ADD CONSTRAINT FK_SC_CTUID FOREIGN KEY(cid) REFERENCES course(cid);
ALTER TABLE score DROP FOREIGN KEY FK_SC_CTUID;
-- 【3】默认值修改
ALTER TABLE score ALTER result SET DEFAULT 0;
SHOW CREATE TABLE course;
DESC course;
DESC score; -- MUL multiple 多对1