//建立普通索引;
CREATE INDEX INDEX_NAME ON TB_NAME(COLUMN);
ALTER TABLE TB_NAME ADD INDEX INDEX_NAME(COLUMN);
//建立多重索引,是“且”的关系
CREATE INDEX INDEX_NAME ON TB_NAME(COLUMN1,COLUMN2);
ALTER TABLE TB_NAME ADD INDEX INDEX_NAME(COLUMN1,COLUMN2);
//查看索引;
SHOW INDEX FROM TB_NAME;
//查看索引效果
EXPLAIN SELECT *FROM TB_NAME WHERE COLUMN1=..;
//删除普通索引
ALTER TABLE TB_NAME DROP INDEX INDEX_NAME;
//创建唯一约束(索引)
ALTER TABLE TB_NAME ADD CONSTRAINT IN_UQ_NAME UNIQUE (COLUMN);
//有“IN_UQ_NAME”,唯一约束(索引)名字为“IN_UQ_NAME”,否则为“COLUMN”
ALTER TABLE TB_NAME ADD CONSTRAINT IN_UQ_NAME UNIQUE KEY(COLUMN1,COLUMN2)
//有“IN_UQ_NAME”,唯一约束(索引)名字为“IN_UQ_NAME”,否则取名“COLUMN1”(即第一个参数);
//UNIQUE 后加或不加key都可以;
//创建主键约束(索引)
ALTER TABLE TB_NAME ADD CONSTRAINT IN_PR_NAME PRIMARY KEY(COLUMN);
ALTER TABLE TB_NAME ADD CONSTRAINT PRIMARY KEY(COLUMN1,COLUMN2);
//IN_PR_NAME不起作用,索引名为PRIMARY; PRIMARY后必须有key;
删除唯一约束(索引)同删除普通索引;
//删除主键约束(索引)
ALTER TABLE T1 DROP INDEX PRIMARY;//错误 ALTER TABLE T1 DROP PRIMARY KEY;//正确! //建表时即指定约束
例1:
CREATE TABLE STUDENT( ID INT UNIQUE, NAME VARCHAR(10) PRIMARY KEY//没有默认值! );
==
CREATE TABLE `student` ( `ID` int(11) DEFAULT NULL, `NAME` varchar(10) NOT NULL, PRIMARY KEY (`NAME`), UNIQUE KEY `ID` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
例2:
CREATE TABLE TEACHER( ID INT , NAME VARCHAR(10) , CONSTRAINT ID_index UNIQUE KEY(ID), CONSTRAINT PRIMARY KEY(NAME) );
==
CREATE TABLE `teacher` ( `ID` int(11) DEFAULT NULL,//默认空!但是两个null的数据,不认为数据相同,ID=null(报错),(ID is null) `NAME` varchar(10) NOT NULL DEFAULT ' ',//此时NAME不仅非空且有‘ ’的默认值; PRIMARY KEY (`NAME`), UNIQUE KEY `ID_index` (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
例3:
CREATE TABLE PROFESSOR( ID INT , NAME VARCHAR(10) , CONSTRAINT PRIMARY KEY(ID,NAME)//此时ID、NAME均有默认值,且ID和NAME为“且”的关系。 );
==
CREATE TABLE `professor` ( `ID` int(11) NOT NULL DEFAULT '0', `NAME` varchar(10) NOT NULL DEFAULT '', PRIMARY KEY (`ID`,`NAME`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 //插入数据:
INSERT INTO PROFESSOR(NAME) VALUES('L'),('W');//是对的!此时数据为(0,L),(0,W)
INSERT INTO PROFESSOR(ID) VALUES(1),(2);//是对的!此时数据为(1,''),(2,'')
INSERT INTO PROFESSOR(ID,NAME) VALUES(0,'');//为错的,数据重复!
注意点:(1)两个NULL型数据,不认为相同,DELETE FROM STUDENT WHERE ID IS NULL;(能把数据数据删除),DELETE FROM STUDENT WHERE ID=NULL;(无效)
(2)PRIMARY KEY=NOT NULL + UNIQUE KEY;且一个表中只能有一个PRIMARY KEY;
(3)PRIMARY KEY的索引名为PRIMARY!删除主键时,名字为PRIMARY KEY,直接DROP
(4)以“CONSTRAINT UNIQUE/PRIMARY KEY...”方式建立时,唯一约束默认NULL,主键默认值与字段type有关,
转载于:https://www.cnblogs.com/zyh2017/p/5001982.html
相关资源:ROS2官网教程学习笔记使用rqt_console篇