mysql基础语法
1、说明: --进入mysql
1 mysql -u root -p
2、说明: --停止mysql
1 net stop mysql
3、说明: --开启mysql
net start mysql
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 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,用来禁止使用当前会话的自动提交。