34_92from后面使用子查询
#from后面 #案例:查询每个部门的平均工资的工资等级 #首先把每个部门的平均工资查出来 SELECt AVG(salary) FROM `employees` e GROUP BY `department_id`;#通过部门id进行分组,算出每一个组的平均工资 SELECt `grade_level`,平均工资 FROM ( SELECt AVG(salary) 平均工资 FROM `employees` e GROUP BY `department_id`) d INNER JOIN `job_grades` j ON d.平均工资 BETWEEN `lowest_sal` AND `highest_sal`;
**========================================================================================================================================================================================================================================================================================================================================**
35_93exists后面使用子查询
#exists后面(相关子查询) SELECt EXISTS( SELECT `employee_id` FROM `employees`); #案例1:查询有员工的部门的名字 #查询是否存在员工 SELECt `employee_id` FROM `employees` e INNER JOIN `departments` d ON e.`department_id`=d.`department_id`; SELECt `department_name` FROM `departments` WHERe EXISTS( SELECt `employee_id` FROM `employees` e INNER JOIN `departments` d ON e.`department_id`=d.`department_id`); #上面这种写法有个问题,他是又拿了一个部门表,导致子查询一直都是有值的 SELECt `department_name` FROM `departments` d WHERe EXISTS( SELECt `employee_id` FROM `employees` e WHERe e.`department_id`=d.`department_id`);#当前部门号 #就是说当前部门号是否有员工 #使用in的方式来代替 SELECt `department_name` FROM `departments` d WHERe d.`department_id` IN ( SELECt DISTINCT `department_id` FROM `employees` );
**========================================================================================================================================================================================================================================================================================================================================**
36_96案例查询子查询
#exists后面(相关子查询) SELECt EXISTS( SELECT `employee_id` FROM `employees`); #案例1:查询有员工的部门的名字 #查询是否存在员工 SELECt `employee_id` FROM `employees` e INNER JOIN `departments` d ON e.`department_id`=d.`department_id`; SELECt `department_name` FROM `departments` WHERe EXISTS( SELECt `employee_id` FROM `employees` e INNER JOIN `departments` d ON e.`department_id`=d.`department_id`); #上面这种写法有个问题,他是又拿了一个部门表,导致子查询一直都是有值的 SELECt `department_name` FROM `departments` d WHERe EXISTS( SELECt `employee_id` FROM `employees` e WHERe e.`department_id`=d.`department_id`);#当前部门号 #就是说当前部门号是否有员工 #使用in的方式来代替 SELECt `department_name` FROM `departments` d WHERe d.`department_id` IN ( SELECt DISTINCT `department_id` FROM `employees` );
**========================================================================================================================================================================================================================================================================================================================================**
37_95分页查询
#进阶八:分页查询 #案例1:查询前5条员工信息 SELECt * FROM `employees` LIMIT 0,5; #支持省略 SELECt * FROM `employees` LIMIT 0,5; #案例2:查询第11条到第25条员工信息 SELECt * FROM `employees` LIMIT 10,15; #案例3:有奖金的员工信息,并且工资较高的前10名显示出来 #首先有奖金 SELECt * FROM `employees` WHERe NOT ISNULL(`commission_pct`) ORDER BY salary DESC LIMIT 10;
**========================================================================================================================================================================================================================================================================================================================================**
38_98子查询经典案例
#1.查询工资最低的员工信息: last_name, salary #2.查询平均工资最低的部门信息 #3.查询平均工资最低的部门信息和该部门的平均工资 #4.查询平均工资最高的job信息 #5.查询平均工资高于公司平均工资的部门有哪些?# 6.查询出公司中所有manager的详细信息. #7.各个部门中最高工资中最低的那个部门的最低工资是多少 #8.查询平均工资最高的部门的 manager 的详细信息:last_name,department_id,email,salary
**========================================================================================================================================================================================================================================================================================================================================**
39_99作业详解
——、查询每个专业的学生人数 二、查询参加考试的学生中,每个学生的平均分、最高分三、查询姓张的每个学生的最低分大于60的学号、姓名 四、查询每个专业生日在"1988-1-1"后的学生姓名、专业名称五、查询每个专业的男生人数和女生人数分别是多少 六、查询专业和张翠山—样的学生的最低分 七、查询大于60分的学生的姓名、密码、专业名八、按邮箱位数分组,查询每组的学生个数 九、查询学生名、专业名、分数 十、查询哪个专业没有学生,分别用左连接和右连接实现十一、查询没有成绩的学生人数
**========================================================================================================================================================================================================================================================================================================================================**
40_100联合查询
#联合查询 #引入的案例:查询部门编号>90或邮箱包含a的员工信息 #之前的做法 SELECt * FROM `employees` WHERe `department_id`>90 OR `email` LIKE '%a%'; #联合查询的做法 SELECt * FROM `employees` WHERe `department_id`>90 UNIOn SELECt * FROM `employees` WHERe `email` LIKE '%a%'; #案例:查询中国用户中男性的信息以及外国用户中男性的信息
**========================================================================================================================================================================================================================================================================================================================================**
41_102插入语句的方式
#DML语言 #一:插入语句 #1.插入的值的类型要与列的类型一致后兼容 INSERT INTO `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`) VALUE(13,'陈春鹏','女','1992-02-03 00:00:00','19939939495',NULL,2); #2.不可以为null的列必须插入值 #可以为null的列如何插入值? #方式一: INSERT INTO `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`) VALUE(13,'陈春鹏','女','1992-02-03 00:00:00','19939939495',NULL,2); #方式二: INSERT INTO `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`boyfriend_id`) VALUE(14,'金星','女','1992-02-03 00:00:00','19939939495',2); INSERT INTO `beauty`(`id`,`name`,`sex`,`phone`) VALUE(15,'金星','女','19939939495');#有默认值的可以不填 #列的顺序可以颠倒 #列数和值的个数必须一致 #可以省略列名,默认所有列,而且列的顺序和表中列的顺序是顺序一致 INSERT INTO `beauty` VALUE (16,'你好','女','1993-02-03 00:00:00','18209876579',NULL,11); #方式二: INSERT INTO beauty SET `id`=19,NAME='刘涛',phone='999'; #两种方式大pk #方式一支持插入多行,方式二不支持 INSERT INTO beauty#默认,所有列 VALUE(18,'aadd','女','1993-02-03 00:00:00','1341124',NULL,10) ,(20,'aaddd','女','1993-02-03 00:00:00','1341124',NULL,10) ,(21,'aadd','女','1993-02-03 00:00:00','1341124',NULL,10); #方式一支持子查询,方式二不支持 INSERT INTO `beauty`(id,NAME,phone) SELECt 22,'dwas','1344';#结果直接放进去 INSERT INTO `beauty`(id,NAME,phone) SELECT id,boyName,'1111' FROM `boys` WHERe id<36; SELECt * FROM `beauty`; SELECt * FROM `boys`;
**========================================================================================================================================================================================================================================================================================================================================**
42_105修改表记录
#修改语句 #修改单表的记录 #案例1:修改`beauty`表中姓a的女神的电话为110 UPDATe `beauty`#修改beauty表 SET phone='110' WHERe SUBSTR(`name`,1,1)='a'; SELECT `name` FROM `beauty` WHERe `name` LIKE 'a%'; #案例2:修改boys表中id号为37的名称为张飞,对应的userCP=10 UPDATe `boys` SET `boyName`='张飞',`userCP`=10 WHERe id=37; SELECT * FROM `boys`; #修改多表的记录 #案例1:修改张无忌的女朋友的手机号为114 #首先我需要知道谁是张无忌的女朋友,所以需要连表 UPDATe `beauty` meinv INNER JOIN `boys` chou ON meinv.`boyfriend_id`=( #查出张无忌对应的id SELECT `id` FROM `boys` WHERe `boyName`='张无忌') #对于这样一张表,开始进行修改 SET `phone`='114'; SELECt * FROM `beauty`; #案例2:修改没有男朋友的女神的男朋友编号都为张飞(37号) SELECt * FROM `beauty` b LEFT JOIN `boys` bo ON b.`boyfriend_id`=bo.`id`;#一个都没匹配上的会以空值的形式存在 UPDATe `beauty` b LEFT JOIN `boys` bo ON b.`boyfriend_id`=bo.`id` SET `boyfriend_id`=37 WHERe ISNULL(bo.`id`);
**========================================================================================================================================================================================================================================================================================================================================**
43_107删除语句介绍
#删除语句 #案例1:删除手机号以9结尾的女神信息 DELETE FROM `beauty` WHERe `phone` LIKE "%9"; SELECt * FROM `beauty`; #案例2:多表的删除 #案例:删除张无忌的女朋友的信息 DELETe b #需要进行删除的表 FROM `beauty` b INNER JOIN `boys` bo ON b.`boyfriend_id`=bo.`id`#证明他是她的男朋友 WHERe `boyName`='张无忌'; SELECt * FROM `boys`; #案例:删除黄晓明的信息,以及他女朋友的信息 DELETe b,bo FROM `beauty` b INNER JOIN boys bo ON b.`boyfriend_id`=bo.`id` WHERe `boyName`="黄晓明"; #方式二:truncate语句 #案例:将魅力值>100的男神信息删除(truncate无法做到) #delete pk truncate
**========================================================================================================================================================================================================================================================================================================================================**
44_110案例详解
#1.运行以下脚本创建表my_employees CREATE TABLE my_employees ( Id INT(10), First_name VARCHAR(10), Last_name VARCHAR(10), Userid VARCHAR(10), Salary DOUBLE(10,2) ); CREATE TABLE users( id INT, userid VARCHAR (10), department_id INT ); #2.显示表my employees的结构(注意是显示结构,不是数据) DESC `my_employees`; SELECT * FROM `my_employees`; INSERT INTO `my_employees`#默认是所有列 VALUES(1,'patel','Ralph','Rpatel',895), (2,'Dancs','Betty','Bdancs',860), (3,'Biri','Ben','Bbiri',1100), (4,'Newman','chad','cnewman',750), (5,'Ropeburn','Audrey','Aropebur',1550); DELETe FROM `my_employees`; INSERT INTO `my_employees` SELECt 1,'patel','Ralph','Rpatel',895 UNIOn SELECT 2,'Dancs','Betty','Bdancs',860 UNIOn SELECT 3,'Biri','Ben','Bbiri',1100 UNIOn SELECT 4,'Newman','chad','cnewman',750 UNIOn SELECT 5,'Ropeburn','Audrey','Aropebur',1550; INSERT INTO `users` VALUES(1,'Rpate',10), (2,'Bdancs',10), (3,'Bbiri',20), (4,'Cnewman',30), (5,'Aropebur',40); SELECT * FROM `users`; #5.将3号员工的last_name修改为"drelxer" UPDATe `my_employees` SET `Last_name`="drelxer" WHERe `Id`=3; #6.将所有工资少于900的员工的工资修改为1000 UPDATE `my_employees` SET `Salary`=1000 WHERe `Salary`<900; #7.将userid 为Bbiri的uSER表和my_employees表的记录全部删除 #这个题目是一个多表删除 DELETE u,m FROM `users` u INNER JOIN `my_employees` m ON u.`id`=m.`Id`#证明是同一个人 WHERe u.`userid`='Bbiri'; #8.删除所有数据 DELETe FROM `my_employees`; #9.检查所作的修正 SELECt * FROM `my_employees`; #10.清空表my _employees TRUNCATE TABLE `my_employees`
**========================================================================================================================================================================================================================================================================================================================================**
45_112库的管理
#DDL #案例1:创建库books CREATE DATAbase IF NOT EXISTS books;#可以在数据库已经创建时不报错 #2.库的修改(库一般不修改,容易使数据出现问题) #rename database books to 新库名; #以前的语法现在不被允许 #更改库的字符集 ALTER DATAbase books CHARACTER SET gbk; #库的删除 DROp DATAbase IF EXISTS `books`;#判断目标是否存在 #存在则删除,不存在则不动
**========================================================================================================================================================================================================================================================================================================================================**
46_113表的操作
#表的管理 #1.表的创建 #创建books数据库 CREATE DATAbase books; #案例:创建book表 CREATE TABLE book( id INT, #编号 bname VARCHAR(20),#图书名 price DOUBLE,#价格 autherid INT,#作者 publishDate DATETIME#出版日期 ); DESC book; #案例:创建表auther CREATE TABLE auther( id INT, au_name VARCHAR(20), nation VARCHAR(10) ); DESC book; #2.表的修改 #--修改列名 ALTER TABLE book CHANGE COLUMN publishDate pubDate DATETIME;#注意这里需要给该列的数据类型 #--修改列的类型或约束 ALTER TABLE book MODIFY COLUMN pubdate TIMESTAMP; #--添加新列 ALTER TABLE `b_auther` ADD COLUMN annual DOUBLE; #--删除列 ALTER TABLE b_auther DROP COLUMN IF EXISTS annual;#不被允许的语法,无法判断该列是否存在 ALTER TABLE b_auther DROP COLUMN annual; #--修改表名 ALTER TABLE `auther` RENAME TO b_auther; #3.表的删除 DROP TABLE `b_auther`; SHOW TABLES;#查看当前库的所有表 #通用的写法 DROP DATAbase IF EXISTS 旧库名; CREATE DATAbase 新库名; DROP TABLE IF EXISTS 旧表名; CREATE DATAbase 新表名(); #4.表的复制 INSERT INTO `b_auther` VALUES(1,'村上春树','日本'), (2,'莫言','中国'), (3,'冯唐','中国'), (4,'金庸','中国'); #仅仅复制表的结构 CREATE TABLE copy LIKE `b_auther`; #复制表的结构外加数据 CREATE TABLE copy2 SELECT * FROM `b_auther`; #只复制部分数据 CREATE TABLE copy3 SELECt id,`au_name` FROM `b_auther` WHERe `nation`='中国'; #仅仅复制某些字段(不要数据) CREATE TABLE copy4 SELECt id,`au_name` FROM `b_auther` WHERe 1=2;
**========================================================================================================================================================================================================================================================================================================================================**
47_117案例详解库和表的管理
CREATE TABLE dept1( id INT(7), NAME VARCHAR(25) ); #2.将表departments中的数据插入新表dept2中 INSERT INTO `dept1`#默认所有数据 SELECt `department_id`,`department_name` FROM `departments`; CREATE TABLE dept2 SELECt `department_id`,`department_name` FROM `departments`; #如果说dept2和departments不在同一个数据库下面可以这样写 CREATE TABLE dept2 SELECt `department_id`,`department_name` FROM `myemployees`.`departments`; CREATE TABLE emp5( id INT (7), First_name VARCHAR(25), Last_name VARCHAR(25), Dept_id INT(7) ); #4.将列Last_name的长度增加到50 #更改约束 ALTER TABLE `emp5` MODIFY COLUMN Last_name VARCHAR(50); #5.根据表employees创建employees2 CREATE TABLE employees2 LIKE employees; #6.删除表emp5 DROp TABLE `emp5`; #7.将表employees2重命名为emp5 ALTER TABLE `employees2` RENAME TO emp5; #8在表dept1和emp5中添加新列test_column,并检查所作的操作 ALTER TABLE dept1 ADD COLUMN test_column INT; DESC `dept1`; ALTER TABLE emp5 ADD COLUMN `test_column` INT; DESC `emp5`; #9.直接删除表emp5中的列dept_id ALTER TABLE `emp5` DROP COLUMN `department_id`; DESC `emp5`;
**========================================================================================================================================================================================================================================================================================================================================**
48_119整型
#常见的数据类型 #整型 #1.如何设置无符号和有符号(就是二进制保存的时候是否有符号位,符号位用来表示正负) DROP TABLE IF EXISTS `tab_int`; CREATE TABLE tab_int( t1 INT(10) ZEROFILL, t2 INT ZEROFILL UNSIGNED ); DESC `tab_int`; SELECT * FROM `tab_int`; INSERT INTO `tab_int` VALUES(100,100); INSERT INTO `tab_int` VALUES(100); INSERT INTO `tab_int` VALUES(9999999999,999999999999);#直接报错
**========================================================================================================================================================================================================================================================================================================================================**
49_120浮点型
DROp TABLE `tab_float`; CREATE TABLE tab_float( f1 FLOAT(5,2), f2 DOUBLE(5,2), f3 DECIMAL(5,2) ); SELECT * FROM `tab_float`; INSERT INTO `tab_float` VALUE(123.45,123.45,123.45);#运行成功 INSERT INTO `tab_float` VALUE(123.456,123.456,123.456);#没有报错但是警告了,自动的四舍五入 INSERT INTO `tab_float` VALUE(123.4,123.4,123.4);#自动填充成两位小数 INSERT INTO `tab_float` VALUE(1234.4,1234.4,1234.4);#报错,我不知道为什么和视频里面不一样 #在视频从会自动向下取最大值,但在我这里会报错,可能是为了准确性 CREATE TABLE tab_float( f1 FLOAT, f2 DOUBLE, f3 DECIMAL ); SELECt * FROM `tab_float`; INSERT INTO `tab_float` VALUE(123.4522,123.452456,123.45);#只有f3会有一个警告 #原则:
**========================================================================================================================================================================================================================================================================================================================================**
50_121字符型
#字符型
DROp TABLE `tab_char`;
CREATE TABLE tab_char(
c1 ENUM('a','b','c')
);
SELECT *
FROM `tab_char`;
INSERT INTO `tab_char`
VALUES('a');
INSERT INTO `tab_char`
VALUES('b');
INSERT INTO `tab_char`
VALUES('c');
INSERT INTO `tab_char`
VALUES('111');
INSERT INTO `tab_char`
VALUES('a');
INSERT INTO `tab_char`
VALUES('a,b');#这回报错,不被允许的操作
DROp TABLE tab_set;
CREATE TABLE tab_set(
s1 SET('a','b','c','d')
);
INSERT INTO `tab_set`#插入第一个的时候没有任何问题
VALUES('a');
INSERT INTO `tab_set`
VALUES('a');#插入第二个的时候也没有问题,所以在该列是可以出现重复元素的
INSERT INTO `tab_set`
VALUES('a,b,c');#可以执行,插入a,b,c
INSERT INTO `tab_set`
VALUES('a,b,b');#可以执行,插入a,b(集合不出现重复元素)
SELECT *
FROM `tab_set`;
**========================================================================================================================================================================================================================================================================================================================================**
51_122日期型
CREATE TABLE tab_date( t1 DATETIME, t2 TIMESTAMP ); INSERT INTO `tab_date` VALUES(NOW(),NOW());#不同时区对于的值不同,即使已经插入,时区改变已插入的值也改变 SELECt * FROM `tab_date`; SHOW VARIABLES LIKE 'time_zone';#查看当前时区 SET time_zone='SYstem';
**========================================================================================================================================================================================================================================================================================================================================**
52_125约束介绍
#常见约束 CREATE TABLE 表名( 字段名 字段类型 约束 );
**========================================================================================================================================================================================================================================================================================================================================**
53_126创建表时添加约束
#创建表时添加约束
#1.添加列级约束
CREATE DATAbase students;
USE students;
CREATE TABLE major(
id INT PRIMARY KEY,
majorname VARCHAR(20)
);
CREATE TABLE stuinfo(
id INT PRIMARY KEY,#主键
stuname VARCHAR(20) NOT NULL, #非空
gender CHAR(1) CHECK(gender='男' OR gender='女'),#检查约束,在sqlserver中有效果
seat INT UNIQUE,#唯一约束
age INT DEFAULT 18,#默认约束
majorId INT REFERENCES major(id)#外键约束
);
DESC stuinfo;#查看表的结构
#这两个可以混合使用
SHOW INDEX FROM stuinfo;#查看表中所有的索引
DROp TABLE stuinfo;
SELECT *
FROM major;
#2.添加表级约束
DROp TABLE IF EXISTS stuinfo;#判断是否存在,再以此来判断是否删除
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
majorid INT,
CONSTRAINT pk PRIMARY KEY(id),#主键
CONSTRAINT uq UNIQUE(seat),#唯一
CONSTRAINT ck CHECK(gender IN ('男','女')),#检查约束,不支持
CONSTRAINT fk FOREIGN KEY(majorId) REFERENCES major(id)#外键
);
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
majorid INT,
PRIMARY KEY(id),#主键
UNIQUE(seat),#唯一
CHECK(gender IN ('男','女')),#检查约束,不支持
FOREIGN KEY(majorId) REFERENCES major(id)#外键
);
SHOW INDEX FROM `stuinfo`;
#通用的写法
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,#id
stuname VARCHAR(20) NOT NULL,#stuname
sex CHAR(1) CHECK(sex IN ('男','女')),#sex
age INT DEFAULT 18,#age
seat INT UNIQUE,#seat
majorid INT,#majorid
#表级别约束
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)
);
**========================================================================================================================================================================================================================================================================================================================================**
54_128主键和唯一键的区别
DROp TABLE IF EXISTS `stuinfo`;
#报错,多重主键定义
CREATE TABLE IF NOT EXISTS stuinfo(
id INT PRIMARY KEY,#id
stuname VARCHAR(20) PRIMARY KEY,#stuname
sex CHAR(1) CHECK(sex IN ('男','女')),#sex
age INT DEFAULT 18,#age
seat INT UNIQUE,#seat
majorid INT,#majorid
#表级别约束
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)
);
CREATE TABLE IF NOT EXISTS stuinfo(
id INT,#id
stuname VARCHAR(20),#stuname
sex CHAR(1) CHECK(sex IN ('男','女')),#sex
age INT DEFAULT 18,#age
seat INT UNIQUE,#seat
majorid INT,#majorid
#表级别约束
PRIMARY KEY(id,stuname),
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)
);
INSERT INTO `stuinfo`(id,stuname,`seat`)
VALUES(1,'a',NULL);
INSERT INTO `stuinfo`(id,stuname,`seat`)
VALUES(1,'hh',NULL);
DESC `stuinfo`;
SELECT *
FROM `stuinfo`;
**========================================================================================================================================================================================================================================================================================================================================**
55_129外键的特点
DROp TABLE IF EXISTS major;
DROP TABLE IF EXISTS `stuinfo`;
#如果id不是主键,试一下,stuinfo中的majorid是否还能关联
CREATE TABLE major(
id INT,
majorname VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS stuinfo(
id INT,#id
stuname VARCHAR(20),#stuname
sex CHAR(1) CHECK(sex IN ('男','女')),#sex
age INT DEFAULT 18,#age
seat INT UNIQUE,#seat
majorid INT,#majorid
#表级别约束
PRIMARY KEY(id,stuname),
CONSTRAINT fk FOREIGN KEY(majorid) REFERENCES major(id)
#可以看到这里majorid的类型和其主表的id列类型相同
);
#不能关联
**========================================================================================================================================================================================================================================================================================================================================**
56_130修改表时添加约束
#修改表时,添加约束 #1.添加非空约束 DROP TABLE IF EXISTS `stuinfo`; CREATE TABLE IF NOT EXISTS stuinfo( id INT,#id stuname VARCHAR(20),#stuname sex CHAR(1),#sex age INT,#age seat INT,#seat majorid INT#majorid ); #1.添加非空约束 ALTER TABLE `stuinfo` MODIFY COLUMN seat INT NOT NULL; #2.添加默认约束 ALTER TABLE `stuinfo` MODIFY COLUMN age INT DEFAULT 18; #3.添加主键 #列级约束写法 ALTER TABLE `stuinfo` MODIFY COLUMN id INT PRIMARY KEY; #表级约束写法 ALTER TABLE `stuinfo` ADD PRIMARY KEY(id); #4.添加唯一 #列级写法 ALTER TABLE `stuinfo` MODIFY COLUMN seat INT UNIQUE; #表级写法 ALTER TABLE `stuinfo` ADD UNIQUE(seat); #5.添加外键 ALTER TABLE `stuinfo` ADD FOREIGN KEY(majorid) REFERENCES `major`(id); DESC `stuinfo`; SHOW INDEX FROM `stuinfo`;
**========================================================================================================================================================================================================================================================================================================================================**
57_131修改表示删除约束
#修改表时删除约束 DROp TABLE IF EXISTS `stuinfo`; CREATE TABLE IF NOT EXISTS stuinfo( id INT,#id stuname VARCHAR(20),#stuname sex CHAR(1),#sex age INT,#age seat INT,#seat majorid INT#majorid ); #1.删除非空约束 ALTER TABLE `stuinfo` MODIFY COLUMN seat INT NULL; #2.删除默认约束 ALTER TABLE `stuinfo` MODIFY COLUMN age INT; #3.删除主键 ALTER TABLE `stuinfo` DROP PRIMARY KEY; #4.删除唯一 ALTER TABLE `stuinfo` DROP INDEX seat_2;#这个要给你创建的时候给定的名字,如果忘记了可以SHOW INDEX FROM `stuinfo` #看一下 #删除外键 ALTER TABLE `stuinfo` DROp FOREIGN KEY fk;#这里要不删除掉,要不报错,先放着 DESC `stuinfo`; SHOW INDEX FROM `stuinfo`;
**========================================================================================================================================================================================================================================================================================================================================**
58_132案例详解常见约束
CREATE TABLE emp2( id INT ); DROp TABLE IF EXISTS `dept2`; CREATE TABLE dept2( id INT ); #1.向表emp2的id列中添加PR工MARY KEY约束(my_emp_id_pk) ALTER TABLE `emp2` ADD CONSTRAINT my_emp_id_pk PRIMARY KEY(`id`); SHOW INDEX FROM `emp2`; #2向表dept2的id列中添加PRINARY KEY约束(my_dept_id_pk> ALTER TABLE `dept2` ADD CONSTRAINT my_dept_id_pk PRIMARY KEY(`id`); SHOW INDEX FROM `dept2`; #3.向表emp2中添加列dept_id,并在其中定义FOREIGN KEY约束, #与之相关联的列是dept2表中的id列. ALTER TABLE `emp2` ADD COLUMN dept_id INT; ALTER TABLE `emp2` ADD CONSTRAINT ddd FOREIGN KEY(dept_id) REFERENCES dept2(id); SHOW INDEX FROM `emp2`;
**========================================================================================================================================================================================================================================================================================================================================**



