在介绍这些SQL语言之前,先罗列一下mysql的常用数据类型和数据类型修饰,供查询参考
后面的带数字表示此类型的字段长度
数值型:
TINYINT 1 ,SMALLINT 2,MEDIUMINT 3 ,INT 4,BIGINT 8,DECIMAL,FLOAT 4,DOUBLE 8,BIT
字符串型
CHAR,VARCHAR,BINARY,VBINARY,TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOG,TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT,EMUM,SET
日期时间型
date,time,datetime,timestamp
数据限定修饰:
NOT NULL,NULL,DEFAULT,AUTO_INCREMENT,UNSIGNED,PRIMARY KEY,UNIQUE KEY,FOREIGN KEY
CHARACTER SET #ps:SHOW CHARACTER SET 显示当前数据库所支持的所有字符集
COLLATION #ps:SHOW COLLATION 显示所支持的所有排序规则
以下是SQL的每种DDL,DCL,DML语言
DDL
如 create procedure之类
创建数据库
CREATE DATABASE [IF NOT EXISTS] DBNAME [CHARACTER SET 'CHAR_NAME'] [COLLATE 'COLL_NAME']
修改:ALTER 删除:DROP
创建一张新表
CRTATE TABLE [IF NOT EXISTS] TBNAME(col_name col_definition,...)
EXAMPLE:
1
<code>mysql></code><code>CREATE</code> <code>TABLE</code> <code>students(Id </code><code>INT</code> <code>PRIMARY</code> <code>KEY</code> <code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT UNSIGNED,</code><code>Name</code> <code>CHAR</code><code>(20) </code><code>UNIQUE</code> <code>KEY</code> <code>NOT</code> <code>NULL</code><code>,Age TINYINT UNSIGNED </code><code>INDEX</code><code>,Gender </code><code>CHAR</code><code>(1) </code><code>NOT</code> <code>NULL</code><code>) [ENGINE={MyISAM | InnoDB }];</code>
也可以这样写(区别在于单独定义主键,唯一键和索引):
<code>mysql></code><code>CREATE</code> <code>TABLE</code> <code>students(Id </code><code>INT</code> <code>NOT</code> <code>NULL</code> <code>AUTO_INCREMENT UNSIGNED,</code><code>Name</code> <code>CHAR</code><code>(20) </code><code>NOT</code> <code>NULL</code><code>,Age TINYINT UNSIGNED,Gender </code><code>CHAR</code><code>(1) </code><code>NOT</code> <code>NULL</code><code>,</code><code>PRIMARY</code> <code>KEY</code><code>(id),</code><code>UNIQUE</code> <code>KEY</code><code>(</code><code>name</code><code>),</code><code>INDEX</code><code>(age))</code>
查询出一张表的数据后创建新表(字段定义会丢失,数据会保留)
CREATE TABLE TBNAME SELECT...
<code>mysql></code><code>CREATE</code> <code>TABLE</code> <code>test </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Id>5;</code>
以一张表的格式定义,创建一张新的空表
CREATE TABLE TBNAME1 LIKE TBNAME2
修改表:
ALTER TABLE tb_name
MODIFY #修改字段定义
CHANGE #可以修改字段名和字段定义
ADD
DROP
给表添加字段
<code>mysql></code><code>ALTER</code> <code>TABLE</code> <code>students </code><code>ADD</code> <code>(course </code><code>VARCHAR</code><code>(100),teacher </code><code>CHAR</code><code>(20));</code>
添加惟一键
<code>mysql></code><code>ALTER</code> <code>TABLE</code> <code>students </code><code>ADD</code> <code>UNIQUE</code> <code>KEY</code> <code>Name</code><code>;</code>
修改字段:
修改course字段为Course字段,并放在Name字段之后(修改字段需要带上新的字段的定义)ps:MODIFY只能修改字段定义
<code>mysql></code><code>ALTER</code> <code>TABLE</code> <code>students CHANGE course Course </code><code>VARCHAR</code><code>(100) [</code><code>AFTER</code> <code>Name</code><code>];</code>
重命名表名
2
<code>mysql></code><code>ALTER</code> <code>TABLE</code> <code>students RENAME </code><code>TO</code> <code>stu;</code>
<code>mysql>RENAME </code><code>TABLE</code> <code>stu </code><code>TO</code> <code>students;</code>
添加一个外键约束
<code>ALTER</code> <code>TABLE</code> <code>students </code><code>ADD</code> <code>FOREIGN</code> <code>KEY</code> <code>foreign</code> <code>_cid (CID) </code><code>REFERENCES</code> <code>course (CID);</code>
创建索引
CREATE INDEX index_name ON TABLE (col_name[(length)] [ASC|DESC]) [USING {BTREE|HASH}];
删除索引
DROP INDEX index_name ON TBNAME;
查看表状态:SHOW STATUS LIKE 'TBNAME';
查看表的索引:SHOW INDEXES FROM TBNAME;
DML
如insert,delete,update,select(插入、删除、修改、检索)
插入修改数据
#如果每个字段都有值,不需要写字段名称,每组值用,隔开
mysql>INSERT INTO tb_name (col1,col2) VALUES ('STRING',NUM),('STRING',NUM);
mysql>INSERT INTO tb_name SET col1='string',col2='string';
mysql>INSERT INTO tb_name (col1,col2,col3) SELECT...;
<code>mysql></code><code>INSERT</code> <code>INTO</code> <code>students (</code><code>Name</code><code>,Gender,teacher) VALUE (</code><code>'lujunyi'</code><code>,</code><code>'M'</code><code>,</code><code>'mage'</code><code>),(</code><code>'wusong'</code><code>,</code><code>'M'</code><code>,</code><code>'zhuima'</code><code>);</code>
<code>mysql></code><code>INSERT</code> <code>INTO</code> <code>students </code><code>SET</code> <code>Name</code><code>=</code><code>'lujunyi'</code><code>,Gender=</code><code>'M'</code><code>,tearcher=</code><code>'zhuima'</code><code>;</code>
更新数据
<code>mysql></code><code>UPDATE</code> <code>tb_name </code><code>SET</code> <code>column</code><code>=value </code><code>WHERE</code> <code>column</code><code>=value;</code>
<code>mysql></code><code>UPDATE</code> <code>students </code><code>SET</code> <code>Course=</code><code>'mysql'</code> <code>WHERE</code> <code>Name</code><code>=</code><code>'lujunyi'</code><code>;</code>
替换数据:
和UPDATE使用方式一样,只要将UPDATE换成REPLACE即可
删除数据
mysql>DELETE FROM tb_name WHERE conditions;
<code>mysql></code><code>DELETE</code> <code>FROM</code> <code>students </code><code>WHERE</code> <code>Course=</code><code>'mysql'</code><code>;</code>
清空表:将会重置计数器
mysql>TRUNCATE tb_name
查询数据
单表查询:
mysql>SELECT [DISTINCT] column FROM tb_name WHERE CONDITION;
#基本投影查询
<code>mysql></code><code>SELECT</code> <code>Name</code><code>,teacher </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Name</code><code>=</code><code>'wusong'</code><code>;</code>
#重复的结果只显示一次
<code>mysql></code><code>SELECT</code> <code>DISTINCT</code> <code>Gender </code><code>FROM</code> <code>students;</code>
#组合条件,可以使用AND,OR,NOT,XOR组合多个条件
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Age>20 </code><code>AND</code> <code>Gender=</code><code>'M'</code><code>;</code>
#使用BETWEEN...AND...筛选出年龄介于20-25之间的数据
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Age </code><code>BETWEEN</code> <code>20 </code><code>AND</code> <code>25;</code>
#查询Name以Y开头的的数据,%表示任意长度的任意字符,_表示任意单个字符
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>student </code><code>WHERE</code> <code>Name</code> <code>LIKE</code> <code>'Y%'</code><code>;</code>
#使用正则表达式匹配查询,关键词为RLINK或者REGEXP
<code>mysql> </code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Name</code> <code>RLINK </code><code>'^[MNY].*$'</code><code>;</code>
#使用IN关键词,将条件限定在一个列表中。用IS关键词,表示条件是否为空(IS NULL 或者 IS NOT NULL)
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Age </code><code>IN</code> <code>(20,22,24);</code>
#将查询的结果进行排序
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>ORDER</code> <code>BY</code> <code>Name</code> <code>{</code><code>ASC</code><code>|</code><code>DESC</code><code>};</code>
#查询结果别名显示
<code>mysql></code><code>SELECT</code> <code>Name</code> <code>AS</code> <code>Stu_Name </code><code>FROM</code> <code>students;</code>
#LIMIT限定查询结果的条数,LIMIT 2,3表示偏移2条数据后,取3条数据
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students LIMIT 2;</code>
#求平均数:AVG(),最大值:MAX() 最小值MIN() 数量:COUNT() 求和:SUM()
<code>mysql></code><code>SELECT</code> <code>AVG</code><code>(age) </code><code>FROM</code> <code>students;</code>
#分组GROUP BY
<code>mysql></code><code>SELECT</code> <code>Age, Gender </code><code>FROM</code> <code>students </code><code>GROUP</code> <code>BY</code> <code>Gender;</code>
#别名:AS
<code>mysql></code><code>SELECT</code> <code>COUNT</code><code>(Age) </code><code>AS</code> <code>Num,Age </code><code>FROM</code> <code>students </code><code>GROUP</code> <code>BY</code> <code>Age;</code>
#过滤:HAVING
<code>mysql></code><code>SELECT</code> <code>COUNT</code><code>(Age) </code><code>AS</code> <code>Num,Age </code><code>FROM</code> <code>students </code><code>GROUP</code> <code>BY</code> <code>Age </code><code>HAVING</code> <code>Num>2;</code>
多表查询:
#指定已哪个字段连接2张表
<code>mysql></code><code>SELECT</code> <code>students.</code><code>Name</code><code>,courses.Cname </code><code>FROM</code> <code>students,courses </code><code>WHERE</code> <code>students.CID1 = courses.CID;</code>
#连接时指定别名
#左外连接...LEFT JOIN...ON...
<code>mysql></code><code>SELECT</code> <code>s.</code><code>Name</code><code>,c.Cname </code><code>FROM</code> <code>students </code><code>AS</code> <code>s </code><code>LEFT</code> <code>JOIN</code> <code>courses </code><code>AS</code> <code>c </code><code>ON</code> <code>s.CID1=c.CID;</code>
#右外连接...RIGHT JOIN...ON...
<code>mysql></code><code>SELECT</code> <code>s.</code><code>Name</code><code>,c.Cname </code><code>FROM</code> <code>students </code><code>AS</code> <code>s </code><code>RIGHT</code> <code>JOIN</code> <code>courses </code><code>AS</code> <code>c </code><code>ON</code> <code>s.CID1=c.CID;</code>
子查询
#查询年龄大于平均年龄的数据
<code>mysql></code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>Age > (</code><code>SELECT</code> <code>AVG</code><code>(Age) </code><code>FROM</code> <code>students);</code>
#在FROM中使用子查询
<code>mysql></code><code>SELECT</code> <code>Name</code><code>,Age </code><code>FROM</code> <code>(</code><code>SELECT</code> <code>* </code><code>FROM</code> <code>students </code><code>WHERE</code> <code>CID </code><code>IN</code> <code>(2,3)) </code><code>AS</code> <code>t </code><code>WHERE</code> <code>Age>20;</code>
#联合查询
<code>mysql>(</code><code>SELECT</code> <code>Name</code><code>,Age </code><code>FROM</code> <code>students) </code><code>UNION</code> <code>(</code><code>SELECT</code> <code>Tname,Age </code><code>FROM</code> <code>tutors);</code>
创建视图
CREATE VIEW VIEW_NAME AS SELECT....
DCL
创建用户
mysql>CREATE USER 'USERNAME'@'HOST' IDENTIFIED BY 'PASSWORD'
删除用户
mysql>DROP USER 'USERNAME'@'HOSHOST支持通配符
_:任意单个字符
%:任意多个字符
授权
mysql>GRANT pri1,pri2...ON DB_NAME.TB_NAME TO 'USERNAME'@'HOST' [IDENTIFIED BY 'PASSWORD']
取消授权
mysql>REVOKE pri1,pri2...ON DB_NAME.TB_NAME FROM 'USERNAME'@'HOST';
查看授权
mysql>SHOW GRANTS FOR 'USERNAME'@'HOST';
3
<code>mysql></code><code>CREATE</code> <code>USER</code> <code>'lujunyi'</code><code>@</code><code>'%'</code> <code>IDENTIFIED </code><code>BY</code> <code>'123456'</code><code>;</code>
<code>mysql>SHOW GRANTS </code><code>FOR</code> <code>'lujunyi'</code><code>@</code><code>'%'</code><code>;</code>
<code>mysql></code><code>GRANT</code> <code>ALL</code> <code>PRIVILEGES</code> <code>ON</code> <code>testdb.* </code><code>TO</code> <code>'lujunyi'</code><code>@</code><code>'%'</code><code>;</code>
本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/1224775,如需转载请自行联系原作者