• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL之-基本操作的代码示例汇总

MySQL之-基本操作的代码示例汇总

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,基本操作等相关知识,希望本文的分享对您有所帮助
本文记录了MySQL的一些常用操作,不多说了,直接一一列出:

/*
Author: liuyazhuang
Date:2016-04-12
*/

use test;
DROP table if exists equipment;
create table equipment(
assetTag INTEGER primary key,
description varchar(20),
acquired Date
);

/*数据表插入语句*/
INSERT INTO equipment values (50431,'21寸监视器', DATE '2013-01-23');
INSERT INTO equipment values (50532,'pad', DATE '2013-01-26');


/*数据表增加新的列,并初始化*/
ALTER Table equipment ADD COLUMN office VARCHAR(20);
UPDATE equipment SET office='Headquarters';

/*向修改后的表中插入记录*/
INSERT INTO equipment(assetTag,description,acquired) values (50432,'IBM-PC',DATE '2013-01-01');

/*创建代替表的新表(复制)*/
DROP TABLE if EXISTS equipmentMultiSite;
CREATE  TABLE equipmentMultiSite(
assetTag INTEGER PRIMARY KEY,
office varchar(20) DEFAULT 'Headquarters',
description varchar(20),
acquired DATE
);

INSERT INTO equipmentMultiSite
	SELECT assetTag,'Headquarters',description,acquired FROM equipment;


/*删除现有equipment用视图代替*/
DROP TABLE equipment;
CREATE VIEW equipment AS
	SELECT assetTag,description,acquired 'dateAcquired',
		FROM equipment WHERE office='Headquarters';
		
		
/*基础的查询*/
select sum(amount) from payment where customer_id=1; /*某顾客从开户以来的消费总额*/
select count(*) from payment where customer_id=1;  /*某顾客从开户以来的消费次数*/
/*查询某顾客在2005年5月份和6月份消费总额,用"between”或者"<",">"来建立条件*/
select sum(amount) from payment where customer_id=1 and extract(year from payment_date)=2005 and extract(month from payment_date) between 05 and 06;
select sum(amount) from payment where customer_id=1 and payment_date >= '2005-05-01 00:00:00' and payment_date < '2005-07-01 00:00:00';
/*下面用法报警了*/
select sum(amount) from payment where customer_id=1 and payment_date > UNIX_TIMESTAMP('2005-05-01 00:00:00') and payment_date 
< UNIX_TIMESTAMP('2005-07-01 00:00:00');

/*查询某顾客在2005年一年的总消费*/
select sum(amount) from payment where customer_id=1 and extract(year from payment_date)=2005;
select sum(amount) from payment where customer_id=1 and extract(year from payment_date)='2005'; /*年份加单引号的写法也能通过,但不够简练*/  
/*针对公司,查询2005年总的销售额*/
select sum(amount) from payment where extract(year from payment_date)=2005;

/*针对公司,查询2005年总的销售额,payment_copy没有建立索引*/
select sum(amount) from payment_copy where extract(year from payment_date)=2005;

explain select sum(amount) from payment where extract(year from payment_date)=2005;

/*为payment_copy建立索引*/
create index cust_id on payment_copy(customer_id);
/*利用索引提高查询效率*/
select sum(amount) from payment_copy where customer_id=1 and extract(year from payment_date)=2005;
/*删除索引*/
drop index cust_id on payment_copy;

create index pay_date on payment(payment_date);
drop index pay_date on payment;


/*建立视图*/

/*利用视图查询*/
select title from film_list;


/*建立临时表*/
create temporary table if not exists tmp_user(
id integer not null auto_increment COMMENT '用户ID',
name varchar(20) not null default '' COMMENT '名称',
sex integer not null default 0 COMMENT '0为男,1为女',
primary key(id)
)engine=MyISAM default charset=utf8 auto_increment=1;


/*显示临时表的细节,show table显示包括table和view但不包括临时表*/
desc tmp_user;

/*mysql不支持在临时表上建立视图,会报错*/
/*create view v_tmp_user as select * from tmp_user;*/
/*
mysql> create view v_tmp_user as select * from tmp_user;
ERROR 1352 (HY000): View's SELECT refers to a temporary table 'tmp_user'
*/
/*创建预处理语句*/

create view pay_view as
select sum(amount) from payment where extract(year from payment_date)=2005;
/*mysql中连接字符串用concat函数,||仅作逻辑运算用*/
create view pay_view as 
	select concat(c.first_name,' ',c.last_name) as name, sum(p.amount) as amount from payment_copy As p,customer As c
    	where extract(year from p.payment_date)=2005 and p.customer_id=c.customer_id group by p.customer_id;			

select * from pay_view;
/*输出前10条数据*/
select * from pay_view limit 10;
/*输出第11条到20条数据*/
select * from pay_view limit 11,20;

/*随机抽取5条数据,order by rand()*/
select * from pay_view order by rand() limit 5;

drop view pay_view;
/*不能给视图添加索引,只能在基本表上添加索引*/
/*create index pay_view_index on pay_view(amount);*/
/*ERROR 1347 (HY000): 'test.pay_view' is not BASE TABLE*/

/*特别注意:如果视图和基本表一一对应,视图的更新可以达到同步修改基本表的目的;如果进行抽取,运算等操作得到视图,对视图的操作不能同步到
基本表,视图中数据和基本表中的数据不一致,视图中的数据在内存中,做临时显示使用,有必要时才将数据同步到基本表*/


/*事务,mysql中默认每个sql语句是一个事务,就自动提交一次。考虑到性能,多个语句放在一个事务块中*/
begin 
drop view pay_view;
create view pay_view as 
	select concat(c.first_name,' ',c.last_name) as name, sum(p.amount) as amount from payment_copy As p,customer As c
    	where extract(year from p.payment_date)=2005 and p.customer_id=c.customer_id group by p.customer_id;			
select * from pay_view limit 10;
end

/*更改表的存储引擎*/
alert table payment_copy engine=InnoDB;

/*创建mysql定时执行的事件*/
set global event_scheduler=1;
create table testduty(
time varchar(20) default null
)engine=myisam default charset=latin1;

create event if not exists test_event on schedule every 10 second do insert into testduty(time) values(now());


/*删除定时任务*/
drop event test_event;

/*优化数据表*/
optimize table payment;

/*测试加入索引的性能*/
/*建立两张表:一个建立索引,另一个不建立*/
create  table  if not exists test_has_index(
id integer not null auto_increment,
num integer not null default 0,
d_num varchar(30) not null default '0',
primary key(id)
)engine=MyISAM default charset=utf8 auto_increment=1;

create table if not exists test_no_index(
id integer not null auto_increment,
num integer not null default 0,
primary key(id)
)engine=MyISAM default charset=utf8 auto_increment=1;

/*创建存储过程,用于初始化数据表*/
delimiter |
create procedure i_test(pa integer,tab varchar(30))
begin
	declare max_num integer default 10000;
	declare i integer default 0;
	declare rand_num integer;
	declare double_num char;
	
	if tab!='test_no_index'  then
		
		select count(id) into max_num from test_has_index;
		while i < pa do
			if max_num < 10000 then
				select cast(rand()*100 as unsigned) into rand_num;
				select concat(rand_num,rand_num) into double_num;
				insert into test_has_index(num,d_num) values(rand_num,double_num);
			end if;
			set i=i+1;
		end while;
	else	
		select count(id) into max_num from test_no_index;
		while i < pa do
			if max_num < 10000 then
				select cast(rand()*100 as unsigned) into rand_num;
				insert into test_no_index(num) values(rand_num);
			end if;
			set i=i+1;
		end while;
	end if;
end |
	
delimiter ;

/*数据表中记录较少时,索引反而会影响性能*/
call i_test(10,'test_has_index'); /*call调用存储过程,并传入参数*/
select num from test_has_index where num!=0;
explain select num from test_has_index where num!=0;
/*Tips: where后的条件,order by ,group by 等这样过滤时,后面的字段最好加上索引。
根据实际情况,选择PRIMARY KEY、UNIQUE、INDEX等索引,但是不是越多越好,要适度。*/

select a.num as num1, b.num as num2 
	from test_no_index as a 
		left join test_has_index as b 
			on a.num=b.num;

explain select a.num as num1, b.num as num2 
	from test_no_index as a 
		left join test_has_index as b 
			on a.num=b.num;
/*Tips:数据量特别大的时候,最好不要用联合查询,即使你做了索引??*/

/*mysql中使用外键,必须选用innodb存储引擎,myisam不
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05MySQL数据库函数详解(4)
  • 2018-12-05Oracle动态交叉表生成
  • 2017-05-11MySql增加用户、授权、修改密码等语句
  • 2018-12-05mysql进阶(二十四)防御SQL注入的方法总结
  • 2018-12-05修改Innodb的数据页大小以优化MySQL的方法实例详解
  • 2018-12-05mySQL 延迟 查询主表
  • 2018-12-05Mysql数据库中varchar类型转化为int类型的方法介绍
  • 2018-12-05sql 存储过程批量删除数据的语句
  • 2018-12-05实例详解2017最新版windows安装mysql教程
  • 2018-12-05sql语句查询同台服务器不同库的两张表联查

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql主从数据库不同步的2种解决方法
    • MySQL JOIN之完全用法
    • Oracle 10g与11g中的一个函数wmsys.wm_concat 的不同返回值
    • Mysql数据库名和表名在不同系统下的大小写敏感问题
    • 使用函数递归实现基于php和MySQL的动态..
    • 有关朦胧图片效果的文章推荐7篇
    • [Cassandra] cqlsh command list
    • 外键DDL在Oracle运行正常,在mysql报异常以及解决方案
    • mysql求2个或以上字段为NULL的记录求解方法
    • phplib中的一些基本语法和函数

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有