mysql基础语句
个人总结的mysql基础语句(包括视图、函数、子句等)
很多初学者可能跟我一样在刚接触SQL语句的时候想勤加练习却总是忘记语句格式,为了解决这个让人非常恼火的事情所以我决定,尽可能将所有的 ddl dml dql dcl 语句包括MySQL函数详细的列出来,以供后来的新手们学习。
话不多说 让我们进入到 MySQL的世界
1 --进入mysql 2 mysql -u root -p 3 4 --停止mysql 5 net stop mysql 6 7 --开启mysql 8 net start mysql
1 --创建数据库 2 create database shop character set utf8 collate utf8_general_ci; 3 4 --删除数据库 5 drop database shop; 6 7 --查看当前数据库链接进程情况 8 show processlist; 9 10 --修改数据库 *只能修改字符集或者校验规则* 11 alter database shop character set gbk collate gbk_general_ci; 12 13 --备份数据库 14 --在默认指令下 15 mysqldump -u root -p shop>c:/mysql.sql 16 17 --恢复数据库 *单库* 18 ①create database shop1; 19 ②use shop1; 20 --在mysql指令下 21 ③source c:/mysql.sql; 22 ④show tables; -- *查看数据是否完整* 23 24 --备份指定数据库的某张表 25 mysqldump -u root -p shop(数据库名) goods(表名)>c:/mysql_goods.bak 26 27 --恢复表 *跟单库恢复一样* 28 source c:/mysql_goods.bak; 29 30 --一次备份多个库 31 mysqldump -u root -p -B shop(数据库一) shop1(数据库二) > c:/mysql.bak 32 33 --恢复多个库备份 34 source c:/mysql.bak;
1 --创建表 2 create table goods( 3 id int not null unsigned auto_increment default 0 primary key 4 name varchar(32) not null, 5 class_id int(6) zerofill 6 )character set utf8 engine=myisam; 7 8 --enum(枚举) set(集合) 9 create table people( 10 id int not null unsigned auto_increment default 0 , 11 name varchar(32) not null, 12 sex enum('男','女') not null, 13 hobby set('打球','玩游戏','跑步','开车') not null 14 )character set utf8 engine = innodb; 15 16 --添加数据 17 insert into people values(1,"张三","男","玩游戏,开车,跑步"); 18 19 --set enum数据查找 20 select * from shop where sex="男"; 21 select * from shop where find_in_set('泡妞',hobby); 22 23 --存放 图片 视频 音频等文件 24 create table shop2( 25 img varchar(64) not null "/imgs/01.jpg" 26 )charset=utf8 engine=innodb; 27 28 --插入 29 insert into shop2 values('imgs/abc.jpg'); 30 31 --联系创建一张学生信息表 32 create table stu_info( 33 id int unsigned not null auto_increment default 0, 34 name varchar(32) not null, 35 sex enum('男','女','不知道') not null, 36 brithday date not null, 37 entry_day date not null, 38 job varchar(32) not null, 39 salary decimal(10,2) not null, 40 resume text not null 41 )charset=utf8 engine=innodb;
1 --********************************** mysql 用户管理 *************************************** 2 create user "用户名"@"主机名" identified by "密码" 创建mysql用户 3 drop user "用户名"@"主机名"; 删除用户 4 set password = password("密码"); 给自己修改密码 5 set password for "用户名"@"主机名" = password("密码"); 给别人修改密码 6 7 grant 权限列表 on 库.表名 to "用户名"@"主机名" ; 给权限 8 revoke 权限列表 on 库.表名 from "用户名"@"主机名" 回收权限 9 show grant for "用户名"@"主机名"; 查看有什么权限
1 --************************************ 视图*************************************** 2 create view 视图名 as select 语句 创建视图 3 drop view 视图名 删除视图 4 alter view 视图名 as select 语句 修改视图
1 --********************************** 表 *************************************** 2 --修改表 3 --修改表之增加列 *后可跟 after 排在那个列之后* 4 alter table stu_info(表名) add hobby(新加列名) set('游泳','戏水','跳舞') not null after sex ; 5 --修改表之删除列 6 alter table stu_info(表名) drop hobby(列名); 7 --修改表之修改列 8 alter table stu_info(表名) change hobby(旧列名) hob(新列名) set('赌博','抽烟') not null; 9 --修改表之增加主键 10 alter table stu_info(表名) add primary key (增加主键的列); 11 --修改表之删除主键 12 alter table stu_info drop primary key; 13 --修改表之删除外键 14 alter table stu_info drop foreign key(外键名); 15 --修改表之增加索引 16 alter table stu_info add (index/unique) (索引名/列名); 17 --修改表之删除索引 18 alter table stu_info drop index (索引名); 19 --修改表之清空表数据 20 truncate table stu_info; 21 --修改表之更改表名 22 rename table stu_info to stu; 23 --修改表之更改字符集 24 alter table stu_info charset = gbk; 25 26 --查看表结构 27 desc stu_info; 28 show create table stu_info;
1 --********************************** 数据 *************************************** 2 --添加数据 3 insert into stu_info values(1,"张三","男","吃饭,打架",'2016-03-04','2014-03-04','能吃能打能睡觉'); 4 --修改数据 5 update stu_info(表名) set name="李四"(修改的字段/值) where(通过条件找到更改的数据) id =1 ; 6 --删除数据 7 delete from stu_info(表名) where(通过条件找到删除的数据列) id = 1; 8 --查询数据 9 select distinct(去重复) * from stu_info; 10 11 --查询数据可以带运算 12 select (salary = salary*3) from goods; 13 --查询数据可以起别名 14 select (salary = salary*3) as sal from goods; 15 --查询数据可以有函数 16 select avg(salary) as avg_sal from goods;
1 --********************************** where子句 *************************************** 2 --条件过滤 3 select * from stu_info where id =1; 4 --可以使用and or not 5 select * from goods where sal > 1500 and id <4; 6 select * from goods where sal>500 or sal <2000; 7 select * from goods where not (sal > 100); 8 --可以使用 between ... and ... 显示某一区间的值 9 select sal from goods where sal between 500 and 2000;
1 --********************************** order by子句 *************************************** 2 --排序 *desc 降序 asc 升序* 3 select * from stu order by yuwen;
1 --********************************** group by子句 *************************************** 2 --分组统计 *对于分组统计后的数据用having 过滤 * 3 select * from stu group by yuwen; 4 5 select deptno,avg(sal) as avg_sal from emp group by deptno having avg_sal<2000;
1 --********************************** like子句 *************************************** 2 --%表示任意0到多个字符 3 select * from stu where name like "王%"; 4 -- _ 表示任意单个字符 5 select * from stu where name like "_三%";
1 --********************************** 聚合函数 *************************************** 2 --count() *记录满足条件的记录数 count(*)统计所有 count(列名) 不会统计null值* 3 select count(*) from stu; 4 select count(*) from stu where yuwen>50; 5 6 --sum() *记录总和 sum(列名) ()内不能用* null+任何值都为null * 7 select sum(yuwen) from stu; 8 9 --avg() *记录平均值 ()内不能为* * 10 select avg(yuwen) from stu; 11 12 --max(最大值)/min(最小值) 13 select max(yuwen) from stu; 14 select min(yuwen) from stu;
1 --********************************** 日期函数 *************************************** 2 3 --current_date() *查询当前日期 显示年月日* 4 select current_date(); 5 --current_time() *查询当前时间 显示时分秒* 6 select current_time(); 7 --current_timestamp() *查询当前时间戳 显示当前年月日时分秒* 8 select current_timestamp(); 9 --now() *获取当前时间 显示年月日时分秒* 10 11 --date *返回datetime的年月日部分* 12 date(datetime) 13 --date_add(date,interval val typ) *在date时间上加上val,typ是val的类型 可以是 年 月 日 时 分 秒* 14 date_add(now(),interval 10 day); 15 --date_sub(date,interval val typ) *在date时间上减去val, typ是val的类型 可以是 年 月 日 时 分 秒* 16 date_sub(now(),interval 10 day); 17 --datediff(date1,date2) *date1和date2的差 返回值类型为 天* 18 datediff(now(), date_sub(now(),interval 10 day)) 19 20 --timediff(date1,date2) *date1和date2的时间差 返回值是 多少时多少分多少秒* 21 timediff(now(),date_sub(now(),interval 10 minute)); 22 --year/month/day/date(datetime) *返回 年/月/日/年-月-日* 23 year(now()); month(now()); day(now()); date(now()); 24 25 --unix_timestamp() *返回一个 1970-1-1 0:0:0 到现在时间的一个时间戳 秒* 26 select unix_timestamp(); 27 --from_unixtime(val,格式) *将val转换成一个你想要的时间格式 val是秒数,格式由程序员自己定 %Y-%m-%d %h-%i-%s * 28 select from_unixtime(unix_timestamp(),'%Y-%m-%d');
1 --********************************** 字符串函数 *************************************** 2 --charset(str) *返回字符集* 3 select charset('abc'); 4 --concat(str str str) *链接字符串* 5 select concat(name,"语文分数是",yuwen) from stu_info; 6 --ucase(str)/lcase(str) *转换成大写/小写* 7 ucase("abc"); lcase("ABC"); 8 --length(str) *计算str的长度 单位 字符* 9 length('abc') 10 --replace(str,str1,str2) *把str里面的str1换成str2* 11 replace("abc",b,d); 12 --substring(str,val,val2) *在str里 从val开始截取val2个字符 val,val2为整数* 13 substring("abcdefg",2,4);
1 --********************************** 数学函数 *************************************** 2 --abs(int) *求int的绝对值* 3 abs(-90); 4 --ceiling(num) *向上求num的整数* 5 ceiling(34.1456); 35 6 --floor(num) *向下求num的整数* 7 floor(34.1456); 34 8 --format(num,val) *保留小数位数 val是小数后保留几位* 9 format(78.329,2); 78.33 10 --mod(num1,num2) *求num1和num2的余数* 11 mod(10,3) 余 1 12 --rand() *返回一个随机数 范围是 0到1.0* 13 select floor(rand()*100);
--********************************** 流程控制函数 *************************************** --if(ex1,ex2,ex3) *如果ex1为真那么返回ex2否则返回ex3* if(0==0,1,2); --ifnull(ex1.ex2) *如果ex1不为null返回ex1 否则返回ex2* ifnull(null,0); --case when ex1 then ed1 else ed2 end *ex1为条件,ed为表达式* select case when sal<100 then sal*10 else sal end
1 --********************************** 其他函数 *************************************** 2 --user() *查看当前用户* 3 select user(); 4 --database() *查看当前使用的是那个数据库* 5 select database(); 6 --md5() *加密方式* 7 md5("abc"); 8 --password *加密方式* 9 password("abc"); 10 --mysql_num_fields() *取得结果集中字段的数量* 11 --mysql_field_name() *取得结果中指定字段的字段名*
1 --********************************** 查询加强--多表多条件查询 *************************************** 2 -- 3 select avg(sal),deptno 4 from emp 5 group by deptno;
1 --事物 2 --开启事物 3 start transaction 4 -- 自动提交关闭 5 set autocommit=false; 6 --设置保存点 7 savepoint 名称 8 --退回 9 rollback to 名称
1 --********************************** limit 分页查询 *************************************** 2 --先设定好 每页显示的条数 $pagesize=10; 3 --在计算好从第几条开始显示 (你要取出第几页的数据 -1) * 每页显示的条数 $pagenow 代表你要取出第几页的数据 4 ($pagenow-1)*$pagesize,$pagesize 5 select * from emp limit 8,4;
转载请注明出处 原文博客:http://www.cnblogs.com/we-jack/