一、表复制

1、复制表结构    将表hello的结构复制一份为表hello3

2、复制数据

a、如果两张表的结构一样且你要复制所有列的数据

mysql> insert into hello3 select * from hello;

b、两张表结可能不一样且你只要复制部分列的数据

mysql> insert into hello3 (name,sex,degree) select name,sex,degree from hello;

二、索引

1、create 创建索引(只能创建普通索引和唯一索引)

  创建普通索引:mysql> create index in_name on hello(name); 给表hello中的name列创建名为 in_name的索引。

  创建唯一索引:mysql> create unique index un_name on hello(name);   给表hello中的name列创建唯一索引名为 un_name的索引。

  查看索引:mysql> show index from hello;   查看表 hello的索引。

  删除索引:mysql> drop index in_name on hello; 删除hello表中名为in_name的索引。

2、alter 创建索引(创建索引的通用方式)

  创建普通索引:mysql> alter table hello add index in_name(name); 给表hello中的name列创建名为 in_name的索引。

  删除(普通/唯一)索引:mysql> alter table hello drop index in_name; 删除表hello中名为in_name的普通索引。

  删除自增:mysql> alter table hello modify id int unsigned not null;删除表hello中 id列(int类型) 的自增特性。

  删除主键索引:mysql> alter table hello drop PRIMARY KEY;

  创建唯一索引:mysql> alter table hello add unique(name); 给hello表的 name创建唯一索引 索引名是默认的。

  创建主键索引:mysql> alter table hello add primary key(id); 给hello表的id字段创建主键索引。

  将主键索引设置为自增:mysql> alter table hello modify id int unsigned not null auto_increment;将hello表中的主键id列设置为自增。

三、视图

主表数据的变化,视图会时时做相应的变化。如果视图所依赖的表出现错误(被删除)则视图也会发生错误。

  创建视图:mysql> create view v_hello as select * from hello where id >5;

  删除视图:mysql> drop view v_hello;

  查看视图的创建过程:mysql> show create view v_hello; 查看视图v_hello 的创建过程。

四、内置函数

字符函数

  1、CONCAT(str1,str2,....)  字符链接函数

    mysql> select concat('A','B' );

  2、LCASE(str1) 转为小写

    mysql> select lcase("MYSQL");

  3、UCASE(str1) 转大写

    mysql> select UCASE("Mysql");

  4、LENGTH(str) str的长度

    mysql> select length('mysql');

  5、LTRIM(Str) 去除前段空格

    mysql> select LTRIM(' mysql');

  6、RTRIM(str) 去除后端空格

    mysql> select RTRIM(' mysql  ');

  7、REPEAT(str,count) 重复count次

    mysql> select repeat('mysql',2);

  8、REPLACE(str,search_str,replcae_str) 将str中的search_str 替换为replac_str

    mysql> select REPLACE('mysql','m','M');

  9、SUBSTRING(str,postion,length) 从str的postion开始取length个字符

    mysql> select substring('mysql',1,2);  从1开始

  10、SPACE(count) 生成count个空格

    mysql> select concat(space(3),'mysql');

数学函数

1、BIN(decimal number):   将十进制转二进制

2、CEILING(number) 向上取整    mysql> select ceiling(10.12);   结果:11

3、FLOOR(number) 向下取整       mysql> select ceiling(10.12);   结果:10

4、MAX(column) 获取 最大列

5、MIN(column) 获取最小列

6、SQRT(num) 开平方

7、RAND() 返回0-1之间的随机数值

日期函数

1、CURDATE() 返回当前日期格式 yyyy-MM-dd

2、CURTIME()返回档期时间 12:11:56

3、NOW()返回当前时间 2017-05-12 21:12:34

4、UNIX_TIMESTAMP(date) 返回当前date的时间戳

5、FROM_UNIXTIME()返回UNIX时间戳的日期值

6、WEEK(date)返回当前时间date为一年中的第几周

7、YEAR(data)返回当前时间date的年份

8、DATEDIFF(expr1,expr2) 返回expr1与expr2之间的天数

五、预处理语句

无变量:

创建预处理语句:mysql> prepare stmt1 from 'select * from hello where id>5';创建一个名为stmt1的预处理语句

执行预处理语句:mysql> execute stmt1;执行stmt1预处理语句

带变量:

创建带参数的预处理语句:mysql> prepare stmt1 from 'select * from hello where id>?'

设置变量:mysql> set @i=6;

执行预处理语句:mysql> execute stmt2 using @i;

删除预处理语句:mysql> drop prepare stmt2;    #mysql> DEALLOCATE PREPARE stmt2;

注意:每一次执行完EXECUTE时,养成好习惯,须执行DEALLOCATE PREPARE … 语句,这样可以释放执行中使用的所有数据库资源(如游标)。
不仅如此,如果一个session的预处理语句过多,可能会达到max_prepared_stmt_count的上限值。

六、事务处理

mysql默认事务是自动提交的。在做mysql事务处理时请将数据库或者表的ENGINE 设置为InnoDB

将表的存储引擎设置为INNODB:mysql> alter table hello engine=innodb;

设置mysql为非自动提交:mysql> set autocommit=0;

产生事务:mysql> delete from hello where id>7;

事务回滚:mysql> rollback;

事务提交:mysql> commit;

关于事务中的还原点:

创建一个事务:mysql> insert into hello (sex,degree,name) values(1,12312.32,'HHH');

对该事务设置还原点:mysql> savepoint p1;

回滚到指定的还原点:mysql> rollback to p1; 此时事务恢复到p1,也就是p1之后的事务p2 ,p3..这些还原点将失效。

回滚到原始的还原点:mysql> rollback;

七、存储过程

<!-- 创建存储过程 hello1()-->
CREATE PROCEDURE hello1()
BEGIN
SET @i=0;
WHILE @i<100 DO
insert INTO hello (sex,degree,name) VALUES(1,@i,CONCAT('name',@i));
SET @i=@i+1;
END WHILE;
end;
<!-- 查看存储-->
SHOW PROCEDURE STATUS;
<!-- 查看hello1()存储过程-->
show CREATE PROCEDURE hello1;
<!-- 执行存储过程-->
CALL hello1;

八、触发器

参考:http://www.cnblogs.com/jalja/p/4635087.html(MySql触发器)

九、重排auto_increment值

mysql中我们的主键id如果设置为主键自增策略,那我们如何清空表,并且恢复自增列id的值。

方式一:使用truncate table tableName; 该方式在清空表的同时恢复auto_increment 的值。

方式二:

  1、mysql> delete from hello3;  清空表 (该方式效率较低)

  2、mysql> alter table hello3 auto_increment=1; 恢复auto_increment 的起始值为1

十、批量操作

1、批量更新    ON DUPLICATE KEY UPDATE:MYSQL主键存在则更新,不存在则插入的解决方案

CREATE TABLE `user_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`password` varchar(32) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
`create_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of user_info
-- ----------------------------
INSERT INTO `user_info` VALUES ('', '', '', '2018-01-19 21:59:15', '2018-01-19 21:59:15');
INSERT INTO `user_info` VALUES ('', '', '', '2018-01-19 21:59:15', '2018-01-19 21:59:15');

demo:

INSERT INTO user_info (
id,
password,
name,
update_time
)
VALUES
(1, "A", "zs",NOW()),
(2, "B", "ls",NOW()) ON DUPLICATE KEY UPDATE
password =VALUES(password),
name =VALUES(name),
update_time=VALUES(update_time)

结果:

2、批量插入:

INSERT INTO `user_info` (`password`, `name`, `create_time`)
VALUES ('', 'ww', NOW()), ('', 'mz', NOW());

注意:SQL语句是有长度限制,在进行数据合并在同一SQL中务必不能超过SQL长度限制,通过max_allowed_packet配置可以修改,默认是1M。所以在做批量开发中sql的长度一定要控制。

Mysql 学习之基础操作的更多相关文章

  1. Mysql学习之基础

    数据库基础 什么是数据库 数据库是一个以某种有组织的方式存储数据集合,通常是一个文件或是一组文件,是通过DBMS(数据库管理系统) 来对数据库进行交互的,数据库可以是保存在硬设备上的文件, 也可以不是 ...

  2. MySQL学习笔记——基础与进阶篇

    目录 一.###MySQL登录和退出 二.###MySQL常用命令 三.###MySQL语法规范 四.###基础查询 五.###条件查询 六.###排序查询 七.###常见函数的学习 八.###分组查 ...

  3. MySQL 视图的基础操作(五)

    1.为什么使用视图:     为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的 ...

  4. Mysql学习---面试基础知识点总结

    drop.truncate. delete区别 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 ...

  5. mysql学习之基础知识

    一.什么是数据库 一般而言,数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,使用关系型数据库管理系统(RDB ...

  6. mysql的入门基础操作

    1.数据库的简单介绍 1.1 什么是数据库,就是一个文件系统,使用标准sql对数据库进行操作 1.2 常见的数据库 oracle  是oracle公司的数据库,是一个收费的大型的数据库 DB2,是IB ...

  7. mysql学习之基础篇01

    大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...

  8. MySQL关系型数据库基础操作

    MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...

  9. 记录MySQL的一些基础操作

    MySQL建表操作 root@localhost 08:05:22> create table stu( -> id int(4) not null, -> name char(20 ...

随机推荐

  1. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  2. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  3. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  4. CoreCRM 开发实录——开始之新项目的技术选择

    2016年11月,接受了一个工作,是对"悟空CRM"进行一些修补.这是一个不错的 CRM,开源,并提供一个 SaaS 的服务.正好微软的 .NET Core 和 ASP.NET C ...

  5. 关于Raid0,Raid1,Raid5,Raid10的总结

    RAID0 定义: RAID 0又称为Stripe或Striping,它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就 ...

  6. iOS controller解耦探究实现——第一次写博客

    大学时曾经做过android的开发,目前的工作是iOS的开发.之前自己记录东西都是通过自己比较喜欢的笔记类的应用记录下了.直到前段时一个哥们拉着我注册了一个博客.现在终于想明白了,博客这个东西受众会稍 ...

  7. 【腾讯Bugly干货分享】Android Linker 与 SO 加壳技术

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57e3a3bc42eb88da6d4be143 作者:王赛 1. 前言 Andr ...

  8. C# 给word文档添加水印

    和PDF一样,在word中,水印也分为图片水印和文本水印,给文档添加图片水印可以使文档变得更为美观,更具有吸引力.文本水印则可以保护文档,提醒别人该文档是受版权保护的,不能随意抄袭.前面我分享了如何给 ...

  9. SQLite学习笔记(十)&&加密

    随着移动互联网的发展,手机使用越来越广泛,sqlite作为手机端存储的一种解决方案,使用也非常普遍.但是sqlite本身安全特性却比较弱,比如不支持用户权限,只要能获取到数据库文件就能进行访问:另外也 ...

  10. nginx安装

    nginx工作模式-->1个master+n个worker进程 安装nginx的所需pcre库[用于支持rewrite模块] 下载软件方法: 搜索 pcre  download 网址:http: ...