MySQL 小结(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/duxiangwushirenfei/article/details/54235029

前言

前些时候和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……

猜你喜欢

转载自blog.csdn.net/duxiangwushirenfei/article/details/54235029