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