mysql基础语句

个人总结的mysql基础语句(包括视图、函数、子句等)

  1. MySQL基础知识
    1. MySQL开启、停止
    2. 库操作
    3. mysql用户管理
    4. 视图
    5. 表操作
    6. 数据操作
    7. where子句
    8. order by 子句
    9. group by 子句
    10. like子句
    11. limit 子句
  2. MySQL函数
    1. 聚合函数
    2. 日期函数
    3. 字符串函数
    4. 数学函数
    5. 流程控制函数
    6. 其他函数
  3. 事务

  很多初学者可能跟我一样在刚接触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、说明:  --恢复数据库 *单库*

1create database shop1;
2use 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 null
6  )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 not
4  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)                  余 1
11  --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 case
7  when sal<100 then sal*10
8  else sal
9  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,$pagesize
4  select * from emp limit 8,4;

 --**********************************         查询加强--多表多条件查询       ***************************************

1 select avg(sal),deptno
2 from emp
3 group by deptno;

 --事物 

1  --开启事物
2  start transaction
3  -- 自动提交关闭
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,用来禁止使用当前会话的自动提交。

posted @ 2018-01-25 16:16  Solo李  阅读(291)  评论(0编辑  收藏  举报