专栏首页mukekeheart的iOS之旅MySQL学习笔记(二)

MySQL学习笔记(二)

二、SQL基本知识

  • SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定。非过程化程序设计语言的优点在于它的简单易学,因此已经成为关系数据库访问和操纵数据的标准语言。
  • 表是数据在一个 SQL 数据库中的存储机制,它包含一组固定的列。表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。
  • 列由两部分组成:数据类型(datatype)和长度(length)。
  • MySQL数据类型:
  1. 字符串值:字符串是类似”I like mysql.”和’MySQL is powerful.’等这样的值,它们既可以用双引号括起来,也可以是用单引号。注意 NUL 字节与 NULL 值不同; NUL 为一个零值字节,而 NULL 代表没有值。                                                     
  1. 数字值:数字是类似于 100 或 3.1215936 这样的值。 MySQL 支持说明为整数(无小数部分)或浮点数(有小数部分)的值。
  2. 十六进制值:以十六进制形式表示的整数由“ 0x”后跟一个或多个十六进制数字(” 0”到“ 9”及“ a”到“ f”)组成。例如, 0x0a 为十进制的 10,而 0xffff为十进制的 65535。十六进制数字不区分大小写,但其前缀“ 0x”不能为“ 0X”。                      
  1. 日期和时间值:日期和时间值是一些类似于“ 1999-06-17”或“ 12:30:43”这样的值。 MySQL 还支持日期/时间的组合,如“ 1999-06-17 12:30:43”。需要要特别注意的是, MySQL 是按年-月-日的顺序表示日期的。                                       
  1. NULL 值:NULL 值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的 0 为或字符串类型的空字符串。
  2. 枚举(ENUM)值:eg:sex ENUM("F","M") DEFAULT "M"

三、SQL基本操作语句

1、有关数据库的操作(creat、drop、show、use)

  • 为了安全性,你应该避免使用 root 帐户启动 MySQL 守护程序,创建一个专门用于启动守护程序的帐户 mysql,并且让数据库属于这个帐户。                                   建立帐户 mysql   #adduser mysql
  • 用SHOW显示已有的数据库:    句法:SHOW DATABASES [LIKE wild]       //如果使用 LIKE wild 部分, wild 字符串可以是一个使用 SQL 的“ %”和“ _”通配符的字符串。
  • 用 Create Dabase 创建数据库:    句法: CREATE DATABASE db_name 功能: CREATE DATABASE 用给定的名字创建一个数据库。如果数据库已经存在, 发生一个错误。   eg:mysql>create database myfirst;   然后利用 show databases 观察效果
  • 用 DROP DATABASE 删除数据库:    句法:DROP DATABASE [IF EXISTS] db_name 功能: DROP DATABASE 删除数据库中的所有表和数据库。要小心地使用这个命令!返回从数据库目录被删除的文件的数目。通常,这 3 倍于表的数量,因为每张表对应于一个“ .MYD”文件、一个“ .MYI”文件和一个“ .frm”文件。 在 MySQL 3.22 或以后版本中,你可以使用关键词 IF EXISTS 阻止一个错误的发生,如果数据库不存在。
  • 在命令行环境下可以使用 mysqladmin 创建和删除数据库。 创建数据库: shell> mysqladmin create db_name 删除数据库: shell> mysqladmin drop db_name
  • 用 USE 选用数据库:    句法: USE db_name 功能:USE db_name 语句告诉 MySQL 使用 db_name 数据库作为随后的查询的缺省数据库。数据库保持到会话结束,或发出另外一个 USE 语句

2、有关数据表的操作

  • SHOW/ DESCRIBE 语句显示数据表的信息 句法: SHOW TABLES [FROM db_name] [LIKE wild]           //列出在一个给定的数据库中的表信息 or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]       //获取信息的表中的列类型。注意, MySQL 有时改变列类型 or SHOW INDEX FROM tbl_name [FROM db_name]                    //以非常相似于 ODBC 的 SQLStatistics 调用的格式返回索引信息 or SHOW TABLE STATUS [FROM db_name] [LIKE wild]             //提供每个表的更多信息 {DESCRIBE | DESC} tbl_name {col_name | wild}        //列出在一个给定的数据库中的表信息
  • CREATE TABLE 语句创建数据表 CREATE TABLE tbl_name(create_definition,...) [TYPE =table_type] or CREATE TABLE tbl_name(create_definition,...) SELECT cols FROM tb1 [TYPE =table_type] eg,创建一个访问者留言表:   shell> mysql –u root –p   mysql> create database mytest;   mysql> CREATE TABLE guestbook   -> (   -> visitor VARCHAR(40),   -> comments TEXT,   -> entrydate DATETIME   ->);             或者带select的方式创建也可以,eg:mysql> CREATE TABLE test SELECT * from test2 where 0;        //这个语句有两部分:第一部份指定表的名字;第二部份是括在括号中的各字段的名称和属性,相互之间用逗号隔开。 说明:表的类型有三种:MyISAM缺省类型,基于 ISAM 代码并且有很多有用的扩展。索引存储在一个有.MYI( MYindex)扩展名的文件并且数据存储在有.MYD( MYData)扩展名的文件中)、ISAM(ISAM 使用一个 B-tree 索引,这个索引存储在一个有.ISM 扩展名的文件中并且数据存储在有.ISD 扩展名的文件中,你可用 isamchk 实用程序检查/修复 ISAM 表。 ISAM 表不是跨 OS/平台二进制可移植的)和HEAP(使用一个杂凑( hashed)索引并且存储在内存中。这使他们更快,但是如果 MySQL 崩溃,你将失去所有存储的数据。 HEAP 作为临时表很可用!)
  • ALTER TABLE 语句修改表的结构                                                                                                                                                           有时你可能需要改变一下现有表的结构,那么 Alter Table 语句将是你的合适选择。  增加列 alter table tbl_name add col_name type 例如,给表增加一列 weight mysql>alter table pet add weight int;  删除列 alter table tbl_name drop col_name 例如,删除列 weight: mysql>alter table pet drop weight;  改变列 alter table tbl_name modify col_name type 例如,改变 weight 的类型: mysql> alter table pet modify weight samllint;
  • DROP TABLE 语句删除数据表 DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...] DROP TABLE 删除一个或多个数据库表。所有表中的数据和表定义均被删除,故小心使用这个命令!
  • 使用 INSERT 语句插入新数据 语法: INSERT [INTO] tbl_name [(col_name,...)] VALUES (pression,...),… or   INSERT [INTO] tbl_name SET col_name=expression, ...    or   使用 INSERT…SELECT 语句插入从其他表选择的行 让我们开始利用 INSERT 语句来增加记录,这是一个 SQL 语句,需要为它指定希望插入数据行的表或将值按行放入的表。 INSERT 语句具有几种形式: eg: shell> mysql –u root –p mysql> use mytest; mysql> insert into worker (name) values (‘tom’);                //单独为某一列赋值 mysql> insert into worker values(“tom”,”tom@yahoo.com”);      //插入所有字段时,不需要列出对应列的名字 mysql> insert into worker values(‘tom’,’tom@yahoo.com’),(‘paul’,’paul@yahoo.com’);      //插入多行数据 mysql> insert into tbl_name1(col1,col2) select col3,col4 from tbl_name2;        //使用 INSERT…SELECT 语句插入从其他表选择的行
  • SELECT语句查询数据表中的记录(最常用的语句) SELECT 语句的语法如下: SELECT selection_list   选择哪些列 FROM table_list   从何处选择行 WHERE primary_constraint   行必须满足什么条件 GROUP BY grouping_columns   怎样对结果分组,GROUP BY col_name, ….,查询显示结果时,被分组的列如果有重复的值,只返回靠前的记录,并且   返回的记录集是排序的。这并不是一个很好的结果。仅仅使用 GROUP BY 从句并没有什么意义,该从句的真正作用在于与各种组合函数配合,一般与用于行计数的函数COUNT(col_name),用于统计对应列满足条件的的数量 HAVING secondary_constraint 行必须满足的第二条件 ORDER BY sorting_columns 怎样对结果排序,ORDER BY column_name [ASC|DESC] [,…],其中 ASC 表示升序,为默认值, DESC 为降序。ORDER BY 不能按 text、 text 和image 数据类型进行排序。另外,可以根据表达式进行排序。 LIMIT count 结果限定 注意:所有使用的关键词必须精确地以上面的顺序给出。例如,一个 HAVING 子句必须跟在 GROUP BY 子句之后和 ORDER BY 子句之前。 eg: mysql> SELECT * FROM pet WHERE name = "Bowser";            //简单查询 mysql> SELECT * FROM pet WHERE birth >= "1998-1-1"; mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m")        -> OR (species = "dog" AND sex = "f");                                 //使用逻辑运算符筛选 mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;     //排序ORDER BY,按动物的种类排序,然后按生日 mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;       //要知道每个主人有多少宠物,并且返回结果按主人名字排序 mysql> SELECT species, COUNT(*) FROM pet GROUP BY species;      //每种宠物的个数,并且返回结果按宠物种类排序 mysql> SELECT pet.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS age, remark        -> FROM pet, event        -> WHERE pet.name = event.name AND type = "litter";                 //查询两张表
  • UPDATE语句 修改记录 UPDATE tbl_name SET 要更改的列 WHERE 要更新的记录 这里的 WHERE 子句是可选的,因此如果不指定的话,表中的每个记录都被更新。 eg:    mysql> update pet set sex=’f’ where name=” Whistler”;
  • DELETE 语句删除记录 DELETE FROM tbl_name  WHERE  要删除的记录 注意:WHERE 子句指定哪些记录应该删除。它是可选的,但是如果不选的话,将会删除所有的记录。这意味着最简单的 DELETE 语句也是最危险的。为了删除特定的记录,可用 WHERE 子句来选择所要删除的记录。这类似于SELECT 语句中的 WHERE 子句。                                                                                    eg:   mysql> delete from pet where name=”Whistler”;   mysql>delete from pet;        //可以用下面的语句清空整个表

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS学习——(转)多线程

    转载自:iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用

    mukekeheart
  • 《JavaScript高级程序设计》学习笔记(5)——面向对象编程

     欢迎关注本人的微信公众号“前端小填填”,专注前端技术的基础和项目开发的学习。   本节内容对应《JavaScript高级程序设计》的第六章内容。 1、面向对象...

    mukekeheart
  • OC学习5——类和对象

    1、OC是在C语言基础上进行扩展得到的一门面向对象的程序设计语言,它也提供了定义类、成员变量和方法的基本功能。类可以被认为是一种自定义的数据类型,使用它可以定义...

    mukekeheart
  • kubernetes中那些不为存储数据而存在的volume

    这kubernetes中,这类Volume不是为了存放数据,也不是用来做数据交换,而是为容器提供预先定义好的数据。所以从容器角度来看,这类Volume就像是被投...

    极客运维圈
  • 解决导入过程中出现的ORA-02289错误

    用expdp导出生产库数据到测试库,执行impdp的时候报了ORA-02298错误,提示生效TBL_B表的外键约束FK_B_ID的时候出错,

    bisal
  • 持续3分钟 - Java -04

    在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象...

    子乾建建-Jeff
  • XmlRootElement的作用和用法

    java攻城狮
  • 产品标准化在MES项目实施中的价值

    当“工业4.0革命”和“智能制造2025”的号角吹响之后,不管是老牌的MES软件厂商或者MES后起之秀都觉得终于盼来了“MES的春天”。当然,在国家政策和国际大...

    华磊迅拓
  • 这大概是今年最值得推荐的“数据分析工具”

    BI全称商业智能(Business Intelligence),在传统企业中,它是一套完整的解决方案。将企业的数据有效整合,快速制作出报表以作出决策。涉及数据仓...

    用户5406627
  • 数据库工程师常见面试题

    问题 1: 为什么 group by 和 order by 会使查询变慢? 答: group by 和 order by 操作通常需要创建一个临时表来处理查询...

    葆宁

扫码关注云+社区

领取腾讯云代金券