登陆MySqL数据库mysql -h 127.0.0.1 -u root -p创建数据库create database 数据库名;显示已经存在的数据库show databases;删除数据库drop database 数据库名;查看MySqL数据库支持的存储引擎类型show engines;(可以用'\g'或者'\G'结束,'\g'和;的作用相同,'G'可以让结果显示的更加美观)查询MySqL数据库支持的存储引擎show variables like 'have%';查询默认存储引擎show variables like 'storage_engine';*****创建表之前需要用use 数据库名来选择数据库表的主键:primary key 多字段主键(primary key(属性名,属性名))表的外键:foreign key constraint 外键别名foreign key(属性名,..,属性名) references 表名(属性名,...属性名)表的非空约束:not null表的唯一性约束:unique表的属性值自动增加:auto_increment表的属性的默认值:default 默认值创建表create table 表名(属性名数据类型[完整性约束条件],属性名数据类型[完整性约束条件],... ...属性名数据类型[完整性约束条件]);查看表的基本定义describe 表名;(describe 可以缩写成desc)查看表默认的存储引擎和字符编码show create table 表名;(可以用'\g'或者'\G'结束,'\g'和;的作用相同,'G'可以让结果显示的更加美观)修改表名alter table 旧表名rename [to] 新表名;修改字段的数据类型alter table 表名modify 属性名数据类型;修改字段名(也可以同时修改字段名和字段数据类型)alter table 表名change 旧属性名新属性名新数据类型;增加字段alter table 表名add 属性名1 数据类型[完整性约束条件] [first| after 属性名2] (first的作用是将新增加字段设置为表的第一个字段,after 属性名2 的作用是将新增的字段添加到属性名2 所指的字段之后,如果没有上面2个参数,则新增的字段默认为表的最后一个字段)删除字段alter table 表名drop 属性名;修改字段的排列位置alter table 表名modify 属性名1 数据类型first|after 属性名2;更改表的存储引擎alter table 表名engine=存储引擎名;删除表的外键约束alter table 表名drop foreign key 外键别名;删除没有被关联的普通表drop table 表名;向表中插入数据insert into 表名values(... ...);创建表的时候创建索引create table 表名(属性名数据类型[完整性约束条件],属性名数据类型[完整性约束条件],... ...属性名数据类型[完整性约束条件][unique|fulltext|spatial] index|key[别名](属性名1 [(长度)] [asc|desc]));unique:表示索引为唯一性索引fulltext:表示索引为全文索引spatial:表示索引为空间索引index和key用来指定字段为索引别名:用来创建索引取的新名称属性名1:指定索引对应的字段的名称,该字段必须是前面定义好的字段长度:指索引的长度,必须是字符串类型才可以使用asc:表示升序排列desc:表示降序排列查看索引是否被使用explain select*from 表名where 索引名\G创建空间索引spatial index 索引名(属性名)在已经存在的表上面创建索引create [unique|fulltext|sratial] index 索引名on 表名(属性名[(长度)] [ASC|DESC]);在已经存在的表上,用alter table 语句来创建索引later table 表名add [unique|fulltext|spatial] index 索引名(属性名[(长度)] [asc|desc]);删除索引drop index 索引名on 表名;创建视图create [algorithm = {unique | merge| temptable}] view 视图名[{属性清单}]as select 语句[with [ cascaded | local ] check option];查询用户的权限select select_priv,create_view_priv from er where user='用户名';(select_priv 表示用户是否具有select权限,create_view_priv 表示用户是否具有create_view权限,er表示的是mysql数据库下的user表)查看视图1. describe 视图名;(describe 可以缩写成desc)2. show table status like '视图名';(可以用'\g'或者'\G'结束,'\g'和;的作用相同,'G' 可以让结果显示的更加美观)3. show create view 视图名;(可以用'\g'或者'\G'结束,'\g'和;的作用相同,'G'可以让结果显示的更加美观)在view表中查看视图详细信息select * from information_schema.views;(在mysql中,所有视图的定义都存在information_schema数据库下的views表中,*表示查看所有的列的信息)修改视图1. create or replace view [algorithm={undefined|megrge|temptable}] view 视图名[(属性清单)] as select 语句[with [cascaded|local]check option];2. alter[algorithm={undefined|megrge|temptable}] view 视图名[(属性清单)] as select 语句[with [cascaded|local]check option];更新视图删除视图drop view [if exists] 视图名列表[restrict|cascade];(if exists是判断视图是否存在)查询是否存在drop权限select drop_priv from er where user='用户名';创建只有一个执行语句的触发器create trigger 触发器名before|after 触发事件on 表名for each row 执行语句(before 和after指定了触发器执行的时间)创建有多个执行语句的触发器create trigger 触发器名before|after 触发事件on 表名for each row begin 执行语句列表end查看触发器1. show triggers;2. select * from information_schema.triggers (where trigger_name='触发器名')\G删除触发器drop trigger 触发器名;select 属性列表|*(*代表的是所有的字段) from 表名和视图列表[where 条件表达式1] [group by 属性名1[having 条件表达式2]] [order by 属性名[asc|desc]]带in关键字的查询[not] in (元素1,元素2,...,元素n)带between and的范围查询[not] between 取值1 and 取值2带like的字符匹配查询[not] like '字符串'查询空值is [not] null带and的多条件查询条件表达式1 and 条件表达式2 [...and 条件表达式n]带or的多条件查询条件表达式1 or 条件表达式2 [... or 条件表达式n]查询结果不重复select distinct 属性名对查询结果排序order by 属性名[asc(默认)|desc]分组查询group by 属性名[having 条件表达式] [with rollup(在记录后面加上一条记录,该记录是所有的记录的总和)]group by 关键字与group_concat()函数一起使用select 属性列表,group_concat(属性列表) from 表名group by 属性列表;group by关键字和集合函数一起使用select 属性列表,count(属性列表) from 表名group by 属性列表;group by关键字和having一起使用select 属性列表from 表名group by 属性列表having 条件表达式;按多个字段进行分组select 属性列表|* from 表名group by 属性名1,属性名2;用limit限制查询结果的数量select 属性列表from 表名limit [初始位置,]记录数;(可以设定从哪条记录开始显示,也能设置显示的条数)使用集合函数查询count() 统计记录的条数sum() 求和函数avg() 求平均值max() 求最大值min() 球最小值连接查询内连接select 属性名列表from 表名1,表名2 where 表名1.属性名1=表名2.属性名2;(只查询指定字段取值相同的记录)外连接select 属性名列表from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2;子查询带in关键字的子查询select 属性名列表from 表名1 where 属性名[not] in (select 属性名列表from 表名2);带比较运算符的子查询带exists关键字的子查询内层查询语句不返回查询的记录,而是返回一个真假值,如果内层查询语句查询到满足条件的记录,就返回一个真值,否则返回一个假值,当返回的值是true时,外层查询语句将进行查询;当返回false时,外层下旬语句不进行查询或者查询不出任何记录带any关键字的子查询使用any关键字时,只要满足内层查询语句返回结果中的任何一个,就可以通过该条件来执行外层查询语句带all关键字的子查询使用all关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句合并查询结果将多个select语句的查询结果合并到一起使用union 和union all关键字;使用union时,数据库系统会将所有的查询结果合并到一起,然后去除掉相同的记录,而union all只是简单的合并到一起select 属性名列表from 表名1 union [all] select 属性名列表from 表名2;为表和字段取别名(只有在显示的时候,别名才有作用,不能用别名查询) 表名表的别名select 属性名列表from 表名表的别名 ... ...属性名[as] 别名select 属性名列表[as] 别名from 表名使用正则表达式查询属性名regexp '匹配方式'插入数据insert语句中不指定具体的字段名insert into 表名values(值1,值2,...,值n);insert语句中列出所有的字段insert into 表名(属性1,属性2,...,属性n) values(值1,值2,...,值n);为表的指定字段插入数据insert语句中列出所有的字段insert into 表名(属性1,属性2,...,属性m) values(值1,值2,...,值m);同时插入多条记录insert into 表名[(属性列表)] values (取值列表1),(取值列表2),...,(取值列表n);将查询结果插入到表中(将一个表中查询出来的数据插入到另一个表中)insert into 表名1(属性列表1) select 属性列表2 from 表名2 where 条件表达式;更新数据update 表名set 属性名1=取值1,属性名2=取值2,...,属性名n=取值n where 条件表达式;删除数据delete from 表名[where 条件表达式];数学函数绝对值函数abs(x)返回圆周率的函数PI()平方根函数sqrt(x)求余函数mod(x,y)获取整数函数ceil(x)(返回大于或者等于x的最小整数)、ceiling(x)(返回大于或者等于x的最小整数)、floo(x)(返回小于或者等于x的最大整数)获取随机数的函数rand()、rand(x)(当x相同时,返回的随机数相同)(返回0~1的随机数)四舍五入函数round(x)、round(x,y)(函数返回x保留到小数点后y位的值,截断时进行四舍五入) truncate(x,y)((函数返回x保留到小数点后y位的值)符号函数sign(x)(返回的是x的符号)幂运算函数pow(x,y)(计算x的y次方)、power(x,y)(计算x的y次方)和exp(x)(计算e的x次方)对数运算函数log(x)(计算x的自然对数)、log10(x)(计算以10为底的对数)角度与弧度相互转换的函数radians(x)(角度转换成弧度)和degrees(x)(弧度转换成角度)正弦函数sin(x)(x是弧度)反正弦函数asin(x)(x的取值在-1~1,不然返回值是null)余弦函数cos(x)(x是弧度)反余弦函数acos(x)(x的取值在-1~1,不然返回值是null)正切函数tan(x)(x是弧度)反正切函数atan(x)atan2(x)余切函数cot(x)字符串函数计算字符串字符数的函数char_length(x)计算字符串长度的函数length(x)合并字符串的函数concat(s1,s2,...)(将s1,s2等多个字符串合并成一个字符串)concat_ws(x,s1,s2,...)(将各个字符串直接用参数x隔开)替换字符串的函数insert(s1,x,len,s2)(将字符串s1中x位置开始长度为len的字符串用s2替换)字母大小写转换函数upper(x)ucase(x)将字符串x的所有的字母变成大写字母lower(x)lcase(x)将字符串x的所有的字母变成小写字母获取指定长度的字符串的函数left(s,n)(返回字符串s的前n个字符)right(s,n)(返回字符串的后n个字符)填充字符串的函数lpad(s1,led,s2)(将s2填充到s1的开始处,使字符串长度达到len)rpad(s1,led,s2)(将s2填充到s1的结尾处,使字符串长度到达len)删除空格的函数ltrim(s)(去掉字符串s开始处的空格)rtrim(s)(去掉字符串s结束处的空格)trim(s)(去掉字符串开始处和结尾处的空格)删除指定字符串的函数trim(s1 from s)(去掉字符串s中开始处和结尾处的字符串s1)重复生成字符串的函数repeat(s,n)(将字符串s重复n次)空格函数space(n)(返回n个空格)替换函数replace(s,s1,s2)(将字符串s2替代字符串s中的字符串s1)比较字符串大小的函数strcmp(s1,s2)(如果s1大于s2,返回1,如果s1等于s2,返回0,如果s1小于s2,返回-1)获取子串的函数substring(s,n,len)mid(s,n,len)(从字符串s的第n个位置开始获取长度len的长度)匹配子串开始位置的函数locate(s1,s)position(s1 in s)instr(s,s1)(从字符串s中获取s1的开始位置)字符串逆序的函数reverse(s)(将字符串s的顺序反过来)返回指定位置的字符串的函数elt(n,s1,s2,...)(返回第n个字符串)返回指定字符串位置的函数field(s,s1,s2,...)(返回第一个与字符串s匹配的位置)返回子串位置的函数find_in_set(s1,s2)(返回在字符串s2中与s1匹配的字符串的位置,s2中包含了若干个用逗号隔开的字符串)选取字符串的函数make_set(x,s1,s2,...)(按x的二进制数从s1,s2,...,sn中选取字符串)创建存储过程create procedure sp_name([proc_parameter[,...]]) [characteristic] routine_body创建存储函数create function sp_name([func_parameter[,...]]) returns type [characteristic] routine_body定义变量declare var_name[,...] type [default value]为变量赋值set var_name=expr[, var_name=expr]...select col_name[,...] into var_name[,...] from table_name where condition登陆和退出MysQL服务器mysql -h hostname|hostIP [-P port] -u username -p databasename -e"SQL语句"(密码可以直接加载-p后面,密码与-p之间不能有空格)新建普通用户create user 用户(用户由用户名和主机名构成,列:'用户名'@'主机名')[identified by [password] '密码'][,用户[identified by [password]'密码']]...insert into er(host,user,password)values('主机名','账户名',password('密码'));(执行insert命令后要使用flush命令来时用户生效flush privileges)grant 权限on 数据库名.表名(只能在指定的数据库和表上使用自己的权限) to 用户[identified by [password] '密码'][,用户[identified by [password]'密码']]...删除普通用户drop user 用户[,用户]...;delete from er where host='主机名' and user='用户名';root用户修改自己的密码mysqladmin -u username -p password "新密码";update er set 旧密码=password("新密码") where user='root' and host='localhost';(执行update命令后要使用flush命令来时用户生效flush privileges)set password=password("新密码");root用户修改普通用户密码set password for '用户名'@'主机名'=password("新密码");update er set password=password("新密码") where user="用户名"and host="主机名";(执行update命令后要使用flush命令来时用户生效flush privileges)grant 权限on 数据库名.表名(只能在指定的数据库和表上使用自己的权限) to 用户[identified by [password] '密码'];普通用户修改密码set password=password('新密码');root用户密码丢失的解决办法启动MySQL服务mysqld | mysqld-nt | net start mysql --skip-grant-tables登陆root用户,并且设置新的密码mysql -u rootupdate er set 旧密码=password("新密码")where user='root' and host='localhost';(执行update命令后要使用flush命令来时用户生效flush privileges)权限管理。