Mysql 学习之基础操作
一、表复制
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 学习之基础操作的更多相关文章
- Mysql学习之基础
数据库基础 什么是数据库 数据库是一个以某种有组织的方式存储数据集合,通常是一个文件或是一组文件,是通过DBMS(数据库管理系统) 来对数据库进行交互的,数据库可以是保存在硬设备上的文件, 也可以不是 ...
- MySQL学习笔记——基础与进阶篇
目录 一.###MySQL登录和退出 二.###MySQL常用命令 三.###MySQL语法规范 四.###基础查询 五.###条件查询 六.###排序查询 七.###常见函数的学习 八.###分组查 ...
- MySQL 视图的基础操作(五)
1.为什么使用视图: 为了提高复杂SQL语句的复用性和表操作的安全性(例如:工资字段不想展示给所有能查看该查询结果的人),MySQL提供了视图特性.所谓视图,本质上是一种虚拟表,其内容与真实的 ...
- Mysql学习---面试基础知识点总结
drop.truncate. delete区别 TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 ...
- mysql学习之基础知识
一.什么是数据库 一般而言,数据库(Database)是按照数据结构来组织.存储和管理数据的仓库.我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢.所以,使用关系型数据库管理系统(RDB ...
- mysql的入门基础操作
1.数据库的简单介绍 1.1 什么是数据库,就是一个文件系统,使用标准sql对数据库进行操作 1.2 常见的数据库 oracle 是oracle公司的数据库,是一个收费的大型的数据库 DB2,是IB ...
- mysql学习之基础篇01
大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...
- MySQL关系型数据库基础操作
MySQL基础 一.MySQL常用数据类型 1.常用数值类型(INT,DOUBLE,FLOAT) ① int 或者 integer 类型: 大小(字节):4字节: 范围: (有符号: -2147483 ...
- 记录MySQL的一些基础操作
MySQL建表操作 root@localhost 08:05:22> create table stu( -> id int(4) not null, -> name char(20 ...
随机推荐
- 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)
关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- 让姑姑不再划拳 码农也要有原则 : SOLID via C#
“姑娘,别这样.我们是有原则的.” “一个有原则的程序猿是不会写出 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去.” “对,是时候和那些只会滚键盘的麻瓜不同了, ...
- ExtJS 4.2 Grid组件的单元格合并
ExtJS 4.2 Grid组件本身并没有提供单元格合并功能,需要自己实现这个功能. 目录 1. 原理 2. 多列合并 3. 代码与在线演示 1. 原理 1.1 HTML代码分析 首先创建一个Grid ...
- FragmentTabHost的基本用法
开通博客以来已经约莫1个月了.几次想提笔写写东西,但总是由于各种各样的原因并没有开始.现在,年假刚结束,项目也还没有开始,但最终促使我写这篇博客的是,看了一篇博友写的新年计划,说是要在新的一年中写50 ...
- 使用C/C++写Python模块
最近看开源项目时学习了一下用C/C++写python模块,顺便把学习进行一下总结,废话少说直接开始: 环境:windows.python2.78.VS2010或MingW 1 创建VC工程 (1) 打 ...
- B样条基函数的定义和性质
定义:令U={u0,u1,…,um}是一个单调不减的实数序列,即ui≤ui+1,i=0,1,…,m-1.其中,ui称为节点,U称为节点矢量,用Ni,p(u)表示第i个p次(p+1阶)B样条基函数,其定 ...
- 用游标实现查询当前服务器所有数据库所有表的SQL
declare @name varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Name FROM Master..SysDatabase ...
- C# 索引器,实现IEnumerable接口的GetEnumerator()方法
当自定义类需要实现索引时,可以在类中实现索引器. 用Table作为例子,Table由多个Row组成,Row由多个Cell组成, 我们需要实现自定义的table[0],row[0] 索引器定义格式为 [ ...
- linux-图形化远程管理协议
远程管理控制方式: RDP(remote desktop protocol)协议: telnet: SSH(Secure Shell): RFB(Remote FrameBuffer)协议(图形化远程 ...