Mysql---常见操作

1.创建表

CREATE TABLE Student (
 id INT(11) NOT NULL AUTO_INCREMENT,PRIMARY KEY(id),
 StuName VARCHAR(20) NOT NULL,
 sex INT(11) NOT NULL,
 StuClass VARCHAR(20) NOT NULL,
 Grade INT(11) NOT NULL
)

2.删除表

DROP TABLE student;

3.添加表字段

 ALTER TABLE student ADD Professional VARCHAR(20);

4。修改表字段类型

 ALTER TABLE student MODIFY  Professional VARCHAR(30) NOT NULL DEFAULT 0;

5.删除表字段

alter table student drop column Professional;

6.增加,删除,修改,查询 四种语句

INSERT  INTO student (StuName,sex,StuClass,Grade)VALUES('xxx',1,'2014级',90);
DELETE FROM student WHERE id =2;
UPDATE student SET StuName ='xx' WHERE id =3;
SELECT * FROM student 

 7日期格式化函数

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');

8.字符串转换,截取函数(截取效率不高)

SELECT CONCAT(CAST(1 AS CHAR),'2')AS test;/*数字转字符*/
SELECT CONCAT(CONVERT(1 , CHAR),'3')AS test;
/*字符转数字*/
SELECT CAST('1' AS SIGNED) + 100 AS test;
SELECT CONVERT('1' , SIGNED) + 200 AS test;

/*字符串截取*/
SELECT SUBSTRING(student.`StuName`,2)FROM student WHERE StuName ='xxx';
/* 拆分字符串 */
SELECT SUBSTRING_INDEX(student.`Date`,'/',-1) FROM student WHERE StuName ='xxx';

9.求和函数和if函数

SELECT SUM(IF(sex = 1,1,0))AS '男生人数' FROM student;

if(true,执行 1,弱则 执行0)

10.嵌套查询

SELECT * FROM (SELECT * FROM student) AS newStudent;

11.join on 左链接,右链接,全连接

LEFT JOIN :关键字会从左表 (student) 那里返回所有的行,即使在右表 (stugrade) 中没有匹配的行

SELECT student.`StuName`,stugrade.`Course` FROM student LEFT JOIN  stugrade ON student.`id` =stugrade.`Grade_id`;

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行

SELECT student.`StuName`,stugrade.`Course` FROM student RIGHT JOIN  stugrade ON student.`id` =stugrade.`Grade_id`;

FULL JOIN:只要其中某个表存在匹配,FULL JOIN 关键字就会返回行 

SELECT student.`StuName`,stugrade.`Course` FROM student FULL JOIN  stugrade ON student.`id` = stugrade.`Grade_id` ORDER BY student.`StuName`;

12.自增字段

auto_increment

13.索引

索引主要做3件事:过滤(filter),排序或分组(sort/group),覆盖(cover)。

目前我对于索引的理解,还不太明确,主要最后一个,以后会在写的

创建索引:

CREATE INDEX indexName ON student(StuName(15)); 

 修改表结构

ALTER table student ADD INDEX indexName(StuName)

创建表的时候指定

CREATE TABLE student(  
 
id INT NOT NULL,   
 
StuName VARCHAR(16) NOT NULL,  
 
INDEX [indexName] (StuName (length))  
 
);  

删除索引

DROP INDEX [indexName] ON Student; 

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

关键字UNIQUE

CREATE UNIQUE INDEX indexName ON student(StuName(15)); 
ALTER table student ADD UNIQUE INDEX indexName(StuName)
CREATE TABLE student(  
 
id INT NOT NULL,   
 
StuName VARCHAR(16) NOT NULL,  
 
UNIQUE [indexName] (StuName (length))  
 
);  

 转自:菜鸟教程

使用ALTER 命令添加和删除索引

有四种方式来添加数据表的索引:

  • ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL。
  • ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)。
  • ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出现多次。
  • ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):该语句指定了索引为 FULLTEXT ,用于全文索引。

以下实例为在表中添加索引。

mysql> ALTER TABLE testalter_tbl ADD INDEX (c);

你还可以在 ALTER 命令中使用 DROP 子句来删除索引。尝试以下实例删除索引:

mysql> ALTER TABLE testalter_tbl DROP INDEX c;

13.索引最左侧原则:

简单说,就是索引字段的数据必须是有序的,才能实现这种类型的查找,才能利用到索引

 SELECT * FROM student WHERE id=1;
 SELECT * FROM student WHERE id=1 AND StuName='小红';

下面请看:

通过实例理解单列索引、多列索引以及最左前缀原则

实例:现在我们想查出满足以下条件的用户id:

SELECT `id` FROM student  WHERE stuname`='Liu'  AND `stuuname`='Zhiqun' AND `stuage`=26


因为我们不想扫描整表,故考虑用索引。

单列索引:

ALTER TABLE student ADD INDEX stuname (stuname);


将stuname 列建索引,这样就把范围限制在stuname ='Liu'的结果集1上,之后扫描结果集1,产生满足stuuname ='Zhiqun'的结果集2,再扫描结果集2,找到 stuage=26的结果集3,即最终结果。

由 于建立了stuname 列的索引,与执行表的完全扫描相比,效率提高了很多,但我们要求扫描的记录数量仍旧远远超过了实际所需 要的。虽然我们可以删除stuname 列上的索引,再创建stuuname 或者stuage列的索引,但是,不论在哪个列上创建索引搜索效率仍旧相似。

2.多列索引:

ALTER TABLE sutdent ADD INDEX stuname_stuuname_stuage (stuname,stuuname,stuage);


为了提高搜索效率,我们需要考虑运用多列索引,由于索引文件以B-Tree格式保存,所以我们不用扫描任何记录,即可得到最终结果。

注:在mysql中执行查询时,只能使用一个索引,如果我们在stuname,stuuname,stuage上分别建索引,执行查询时,只能使用一个索引,mysql会选择一个最严格(获得结果集记录数最少)的索引。

3.最左前缀:顾名思义,就是最左优先,上例中我们创建了stuname_stuuname_stuage 多列索引,相当于创建了(stuname)单列索引,(stuname,stuuname)组合索引以及(stuname,stuuname,stuage)组合索引。

在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。

stuname 使用最频繁

猜你喜欢

转载自blog.csdn.net/qq_33188563/article/details/81209793