修改字段名
ALTER TABLE<表名> CHANGE<旧字段名> <新字段名><新数据范例>
比方:ALTER TABLE tb_dept3 CHANGE name name2 VARCHAR(10);
由于差异范例的数据在呆板中存储的方式及长度并不雷同,修改数据范例大概会影响到数据表中已有的数据记录。因此,当数据表中已有数据时,不要容易修改数据范例。
添加字段
语法:ALTER TABLE<表名> ADD <新字段名><数据范例> [约束条件][FIRST|AFTER已存在字段名];
FIRST是可选参数,其作用是将新添加的字段设置为表的第一个字段;
AFTER为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的背面。
FIRST和AFTER用于指定新增字段在表中的位置,如果SQL语句中没有这个两个参数,则默认将新添加的字段设置为数据表的末了列。
比方:ALTER TABLE tb_dept3 ADD sex VARCHAR(2);默认放在末了一列
ALTER TABLE tb_dept3 ADD sex VARCHAR(2) FIRST;放在最前线
ALTER TABLE tb_dept3 ADD sex VARCHAR(2) AFTER name;指定为在name列后。
删除字段
语法:ALTER TABLE<表名> DROP <字段名>;
比方:ALTER TABLE tb_dept3 DROP sex;
修改字段的排列位置
语法:ALTER TABLE<表名> MODIFY <字段1><数据范例>FIRST|AFTER<字段2>;
FIRST是可选参数,其作用是将新添加的字段设置为表的第一个字段;
AFTER为可选参数,其作用是将新添加的字段添加到指定的“已存在字段名”的背面。
FIRST和AFTER用于指定新增字段在表中的位置,如果SQL语句中没有这个两个参数,则默认将新添加的字段设置为数据表的末了列。
比方: ALTER TABLE tb_dept3 MODIFY sex VARCHAR(2) FIRST;放在最前线
ALTER TABLE tb_dept3 MODIFY sex VARCHAR(2) AFTER name;指定为在name列后。
查询所有字段
SELECT * FROM 表名;
SELECT 字段名2,字段名3,字段名4,…,字段名n FROM 表名;
查询单个字段
SELECT 字段名2 FROM 表名;
查询指定记录(WHERE提供查询条件)
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 查询条件;
查询IN或NOT IN范围内数据
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 字段名 IN();
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 字段名 NOT IN();
带BETWEEN AND的范围查询
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 字段名 BETWEEN 开始值 AND 结束值;
带LIKE的字段匹配查询(用%或_通配符)
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 字段名 LIKE ‘某些字符’;
查询空值
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 字段名 IS NULL;
带ADN的多条件查询
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 条件表达式1 AND 条件表达式2;
带OR的多条件查询
SELECT 字段名1,字段名2,…,字段名n FROM 表名 WHERE 条件表达式1 OR 条件表达式2;
某些情况下OR操作符和IN操作符使用后的结果是一样的,他们可以实现雷同的功能。但是使用IN操作符使得检索语句更加简便明了,而且IN实行的速率要快于OR。
OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数联合。
查询结果不重复
-SELECT DISTINCT(字段名) FROM 表名;
对查询结果排序(升序ASC,降序DESC,默认是ASC,不用特意在背面标注)
SELECT 字段名 FROM 表名 ORDER BY 字段名1,字段名2,字段名n;
在对多列进行排序的时候,起首排序的第一列必须有雷同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对二列进行排序。同理背面列名也是一样的。
带ANY,SOME关键字的查询
ANY关键字接在一个比较操作符的背面,体现若与子查询返回的任何值比较为TRUE,则返回TRUE。
比方:SELECT num1 FROM tb1 WHERE num1 > ANY(SELECT num2 FROM tbl2)
在子查询中,返回的是tbl2表的所有num2列结果,然后将tbl1中的num1列的值与之进行比较,只要大于num2列的恣意一个数即为符合条件的结果。
带ALL关键字的查询
ALLA关键字与ANY和SOME差异,使用ALL时必要同时满足所有内层查询的条件。
比方:SELECT num1 FROM tb1 WHERE num1 > ALL(SELECT num2 FROM tbl2)
在子查询中,返回的是tbl2的所有num2列结果,然后将tbl1中的num1列的值与之进行比较,返回tbl1表中比tbl2表num2列所有值都大的值。
带EXISTS关键字的子查询
(1)EXISTS关键字背面的参数是一个恣意的子查询,系统对子查询进行运算以判定它是否返回行,如果至少返回一行,那么EXISTS的结果为true,此时外层查询语句将进行查询,如果子查询没有返回任何行,那么EXISTS返回的结果是false,此时外层语句将不进行查询。
(2)NOT EXISTS与EXISTS使用方法雷同,返回的结果相反。子查询如果至少返回一行,那么NOT EXISTS的结果为false,此时外层查询语句将不进行查询;如果子查询没有返回任何行,那么NOT EXISTS返回的结果为true,此时外层语句将进行查询。
(3)EXISTS和NOT EXISTS的结果只取决于是否会返回行,而不取决于这些行的内容,所以子查询输入列表通常是无关紧要的。
举例:SELECT * FROM fruits WHERE EXISTS(SELECT s_name FROM suppliers WHERE s_id = 109)
查询suppliers表中是否存在s_id=109的供应商,如果存在,则查询fruits表中的记录
UNION大概UNION ALL
两者区别:UNION ALL 的功能是不删除重复行,加上ALL 关键字语句实行时所必要的资源少,所以尽大概的使用它,因此知道有重复行但是想保存这些行,确定查询结果中不会有重复数据大概不必要去掉重复数据的时候,应当使用UNION ALL 以进步查询效率。
6.7 为表和字段取别名
表名 [AS] 表别名
列名 [AS] 列别名
6.8 使用正则表达式查询
正则表达式常用字符匹配列表:
选项说明列子匹配值示例^匹配文本的开始字符'^b’匹配以字母b开头的字符串book,big,banana,bike$匹配文本的结束字符'st$'匹配以st末端的字符串test,resist,persist.匹配任何单个字符'b.t’匹配以任何b和t之间有一个字符bit,bat,but,bite*匹配零个或多个在它前面的字符'f*n’匹配字符n前面有恣意个字符ffn,fan,faan,abcn+匹配前面的字符1次或多次'ba+'匹配以b开头背面紧跟至少有一个aba,bay,bare,battle<字符串>匹配包含指定的字符串的文本‘fa’fan,afa,faad[字符集合]匹配字符集中的任何一个字符'[xz]'匹配x大概zdizzy,zebra,x-ray,extra[^]匹配不在括号中的任何字符[^abc]'匹配任何不包含a,b,c的字符串desk,fox,f8ke字符串{n,}匹配前面的字符串至少n次b{2}匹配2个或更多的bbbb,bbbb,bbbbbbb字符串{n,m}匹配前面的字符串至少n次,至多m次。如果n为0,此参数为可选参数b[2,4]匹配最少2个,最多4个bbb,bbb,bbbb SQL举例:
(1)查询字符“^”匹配以特定字符串大概字符串开头的文本。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^b’;(查询以b开头的数据)
(2)查询“$”匹配以特定字符大概字符串末端的文本。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘y$’;(查询以y末端的记录)
(3)用符号“.”来替代字符串中的恣意一个字符
SELECT * FROM 表名 WHERE 列名 REGEXP ‘a.g’;
查询语句中“a.g”指定匹配字符中要有字母a和g,且两个字母之间包含单个字符,并不限定匹配的字符的位置和地点查询字符串的总长度。
(4)使用“”和“+”来匹配多个字符
星号“”匹配前面的字符恣意多次,包括0次。加好“+”匹配前面的字符至少一次。
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^ba*’;(必须是以b开头,a可有可无,由于星号是包含零次的)
SELECT * FROM 表名 WHERE 列名 REGEXP ‘^ba+';(必须是以b开头,且a字母必须出现一次)
(5)匹配指定字符串
使用“|”匹配多个字符串
SELECT * FROM 表名 WHERE 列名 REGEXP 'on|ap’;(查询包含字符串“on”大概“ap”的记录)
(6)匹配指定字符中的恣意一个
使用方括号[]指定一个字符集合,只匹配其中恣意一个字符,即为所查找的文本
SELECT * FROM 表名 WHERE 列名 REGEXP ‘[ot]';(查询字段中包含字母o大概t的记录)
匹配集合写法:比方:[1-9]匹配1到9之间的恣意数字,[a-z]匹配a~z之间的恣意字母
(7)匹配指定字符以外的字符
“[^字符集合]”匹配不在指定集合中的任何字符
SELECT * FROM 表名 WHERE 列名 REGEXP ‘[^a-p1-9]’;(匹配出字母a-p和数字1-9之外的记录)
(8)使用{n,}大概{n,m}来指定字符勾通续出现的次数
子字符串{n,}体现至少匹配n次前面的字符:“字符串{n,m}”体现匹配前面的字符串不少于n次,不多于m次。比方,a{2,}体现字母a连续出现至少2次,也可以大于2次;a{2,4}体现字母a连续出现最少2次,最多不超过4次。
SELECT * FROM 表名 WHERE 列名 REGEXP 'x{2,}’;
6.9 数据的新增
(1)语法:INSERT INTO 表名(列名)VALUES (数值);大概INSERT INTO 表名 VALUES (数值);包管数值插入顺序和字段名同等,就不用再写字段名。
(2)INSERT INTO person(name,age,info) VALUES(‘HSUDH’,28,‘SHUAHD’),(‘HSUQW’,21,‘AHD’),(‘H’,47,‘WEQ’)
比
INSERT INTO person(name,age,info) VALUES(‘HSUDH’,28,‘SHUAHD’);INSERT INTO person(name,age,info) (‘HSUQW’,21,‘AHD’)效率更高。由于MySQL实行单条INSERT语句插入多行数据,比使用多条INSERT语句快。所以在插入多条记录时,最好选择使用单条INSERT语句的方式插入。
6.10 数据的修改
(1)语法:UPDATE 表名 SET 列名1=value1,列名2=value2,列名3=value3,…,列名n=valuen WHERE (查询条件)
6.11 数据的删除
索引是一个单独的,存储在磁盘上的数据库布局,他们包含着对数据表里所有记录的引用指针。使用索引用于快速找出在某个或多个列中有一特定值的行,所有MySQL列范例都可以被索引,对干系列使用索引是进步查询操作速率的最佳途径。
比方:数据库中有2万条记录,如今要实行这样一个查询:SELECT * FROM 表名 WHERE num = 10000。如果没有索引,必须遍历整个表,直到num等于10000的这一行被找到为止;如果在num列上创建索引,MySQL不必要任何扫描,直接在索引里面找10000,就可以得知这一行的位置。
索引是在存储引擎中实现的,因此,每种存储引擎的索引都不肯定完全雷同,而且每种存储引擎也不肯定支持所有索引范例。根据存储引擎界说每个表的最大索引数和最大索引长度。所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节。大多数存储引擎有更高的限定。MySQL中索引的存储范例有两种:BTREE和HASH,具体和表的存储引擎干系;MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
索引的优点: