MySQL 小结(一)
来源:互联网 发布:java virt异常高 编辑:程序博客网 时间:2024/05/20 04:13
前言
前些时候和MySQL接触较多,深感之前局限于Django带来的不足。相信用Django多会青睐其Model设计极大方便了开发过程中数据处理,与之相对使用Tornado就需要自行编写sql完成数据操作。因此也系统过了一遍sql。
在此推荐一本sql的入门书籍《MySQL必知必会》,这篇博文应该是该书的读书笔记。书本中给出了演示数据,可以在该网http://www.forta.com/books/0672327120/下载,以及了解本书基本内容。
本篇主要是梳理基础sql语法,对于基本的增删改查sql在不同的DBMS中区别不大,但是高级sql(触发器,游标,存储过程等等)有所不同。
DBMS: Database Managerment System,数据库管理系统,是一种操纵管理数据库的软件,常见的有MySQL,SQL Server,Oracle等。
演示系统Mac OS,MySQL 版本 5.7.16。
介绍主线由数据库层面 –> 表Table –> 数据操作。
数据库
-- 链接数据库$ mysql -hHost -PPort -uUsername -pPassowrd-- 显示数据基本信息> STATUS;> SELECT version();-- 新建数据库> CREATE DATABASE database_name;-- 新建数据库并且设置默字符集和校对顺序> CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;-- 删除数据库> DROP DATABASE database_name;-- 显示数据库> SHOW DATABASES;-- 选定使用数据库> USE database_name
在新建数据库时候,指定了默认字符集,那么在数据库中新建表时则会同时使用该默认的字符集。在Django初始化数据库时,如果该Django工程需要兼容中文数据,使用该初始化新建数据库即可满足需求,否则会发现Django工程存储中文数据报错。
此处没有介绍修改数据库名称,因为在MySQL中,为保险起见,不要直接对数据库进行重命名。如果需要修改数据库名称,可以先备份出整库数据,再重建导入数据。
表
整表操作
-- 显示数据库中所有表> SHOW TABLSE;-- 显示建表信息> SHOW CREATE TABLE `table_name`;-- 新建表> CREATE TABLE `test_table`(> `id` int(11) NOT NULL AUTO_INCREMENT,> `res_id` int(11) NOT NULL DEFAULT '0' COMMENT '资源hr_resource.id',> `is_show` boolean NOT NULL DEFAULT '1' COMMENT '是否显示',> `title` varchar(128) NOT NULL DEFAULT '' COMMENT '名称',> `content_text` text NOT NULL COMMENT '测试内容',> `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '新建时间',> `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='测试表'; -- 删除表> DROP TALBE `table_name`;-- 修改表名> RENAME TABLE `table_name` TO `new_table_name`;
在新建表时,需要指定表中字段的类型,MySQL中支持多种数据类型,在示例中给出了几个常用的字段的处理示例。
修改表名时,不能有任何的数据锁,或是事务处理,不然修改表名会失败。
字段操作
上面是整表操作,更为常见时已经新建好的表进行字段修改,主要使用ALTER完成:
-- 增加字段> ALTER TABLE `table_name` > ADD 'column1' int(1) NOT NULL DEFAULT '1' COMMENT 'test 1', > ADD 'column2' int(1) NOT NULL DEFAULT '2' COMMENT 'test 2';-- 删除字段> ALTER TABLE `table_name` > DROP 'column1', > DROP 'column2';-- 修改字段名,注释,默认值> ALTER TABLE `table_name` CHANGE 'column1', 'column3' int(1) NOT NULL DEFAULT '3' COMMENT 'test 3';-- 显示所有字段信息> DESC table_name;
值得注意,在修改字段如果仅仅是为了修改注释或是默认值,则保持原有字段定义名称,类型一致,这样就完成了字段名称不变的细微修改,同时此字段的数据保持不变不会丢失。
数据
数据插入
以之前示例的表test_table为基础,插入数据。
-- 插入数据> INSERT INTO `test_table` (`res_id`, `title`, `content_text`)> VALUES> ('4', '测试1', '测试内容1'),> ('7', '测试2', '测试内容2');-- 插入检索出的数据> INSERT INTO `test_table` (`res_id`, `title`, `content_text`) SELECT `id`, `sub_title`, `description` FROM `resource`;
第一行是插入数据的一个标准示例,确定了字段名,多行插入,没有指定的字段则会自动填充默认值,主键自加1。切勿不指定字段名,按默认顺序插入。
第二个检索插入是从resource表中检索出id,sub_title, description三个字段存储到 test_table 中 。
更新数据
-- 更新数据> UPDATE `test_table` SET > `res_id`='5',> `title`='测试5'> WHERE `id`='2';
更新test_table表中id为2的数据的 title和res_id。
千万注意:在更新数据时候,务必确定where条件,如果上面的UPDATE操作不加where 条件指定id那么会造成的结果就是整表更新,如果是直接操作生产环境的数据库,非常危险!!!
删除数据
-- 删除数据> DELETE FROM `test_table` WHERE `id`<'2';-- 清空表中数据> TRUNCATE `test_table`;
删除操作类似于更新操作,务必确定删除条件
MySQL是没有undo操作的,一旦更新或者删除的sql语法正确就会顺利执行,此时如果误操作就造成不可挽回的损失。
检索数据
这个之所以放在最后才来阐述,是因为SELECT有很多可选的配合使用。
检索SELECT
-- 基本检索1> SELECT * FROM `test_table`;-- 指定检索2> SELECT t.`id`, t.`res_id` FROM `test_table` as t \G;
1是最常用的查询,但是在开发中不建议筛选出一个表中的无用字段,这样会增加查询开销和数据量。
2是指定字段检索,值得一提的是 ’ \G ‘用来更改在客户端的显示方式,不妨尝试下看看实际效果。此外就是 as 关键字用来指定别名。
检索排序
引用之前提到的书中给的示例数据,排序检索出的数据
-- 检索排序3> SELECT `prod_name` FROM `products` ORDER BY `prod_name`;-- 多重排序4> SELECT `prod_id`, `prod_price`,`prod_name` FROM `products` ORDER BY `prod_price`,`prod_name` DESC;
3是检索出prod_name的值且排序。
4是检索出prod_price,prod_name且prod_price按照默认的升序排序,再按照prod_name降序排序。
WHERE子句
SELECT 和 WHERE的搭配使用再常见不过,WHERE子句也有很多用法。
-- WHERE基本用法5> SELECT `prod_name` FROM `products` WHERE `prod_price`>10 ORDER BY `prod_name` DESC;-- WHERE配合操作符使用6> SELECT `prod_name` FROM `products` WHERE `prod_price`>10 AND `prod_price`<13;-- WHERE配合操作符使用7> SELECT `prod_name` FROM `products` WHERE `vend_id` NOT IN (1002, 1003);
5是WHERE基本用法,能配合>, <, >=, <=, !=, <> 和 = 一起使用。注意:ORDER BY必须在WHERE子句之后。
6是WHERE 配AND和OR操作符使用。注意:AND优先级高于OR。
7是IN操作符的使用。
这样最基本的sql介绍至此,对于数据检索,还有其他更高级些的用法。To be continued……
- MySQL 小结(一)
- mysql复习小结一
- mysql小结(一点一滴)
- MySQL 小结(二)
- MySQL 小结(三)
- oracle 小结(一)
- VB 小结(一)
- 小结(一)
- 多线程小结(一)
- 操作系统小结(一)
- 面试小结(一)
- linux小结(一)
- 【软件工程】小结(一)
- service小结(一)
- SQL小结(一)
- JavaScript 小结(一)
- C#小结(一)
- java 小结 (一)
- android 短信群发长短信问题,求教
- android webview 下拉刷新
- S2第一本书第三章上机
- Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
- ObjectAnimator动画放大的问题
- MySQL 小结(一)
- startx报错xinit: No such file or directory (errno 2): unable to connect to X server xinit: No such pr
- expandablelistview子item的按钮怎么获取
- Microsoft OLE DB Provider for SQL Server 错误 '80040e4d' 无效的授权说明
- 听说写博客是程序猿学习的第一步
- centos6.4重启网络报错Error: Connection activation failed: Device not managed by Networ
- Activity与Fragment的相互传值
- 图片下面的竖线如何跟右边文本框的底部保持一致,如图
- 虚拟机安装