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 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;

 --********************************** 数据 ***************************************

 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函数     

  --**********************************         聚合函数        ***************************************

 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;

 --**********************************         日期函数        ***************************************

 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-12-18 11:32  每①天都是↗开始  阅读(293)  评论(0编辑  收藏  举报