MySQL学习笔记(二)
二、SQL基本知识
- SQL 是一种典型的非过程化程序设计语言,这种语言的特点是:只指定哪些数据被操纵,至于对这些数据要执行哪些操作,以及这些操作是如何执行的,则未被指定。非过程化程序设计语言的优点在于它的简单易学,因此已经成为关系数据库访问和操纵数据的标准语言。
 - 表是数据在一个 SQL 数据库中的存储机制,它包含一组固定的列。表中的列描述该表所跟踪的实体的属性,每个列都有一个名字及各自的特性。
 - 列由两部分组成:数据类型(datatype)和长度(length)。
 - MySQL数据类型:
 
- 字符串值:字符串是类似”I like mysql.”和’MySQL is powerful.’等这样的值,它们既可以用双引号括起来,也可以是用单引号。注意 NUL 字节与 NULL 值不同; NUL 为一个零值字节,而 NULL 代表没有值。                                                     

 - 数字值:数字是类似于 100 或 3.1215936 这样的值。 MySQL 支持说明为整数(无小数部分)或浮点数(有小数部分)的值。
 - 十六进制值:以十六进制形式表示的整数由“ 0x”后跟一个或多个十六进制数字(” 0”到“ 9”及“ a”到“ f”)组成。例如, 0x0a 为十进制的 10,而 0xffff为十进制的 65535。十六进制数字不区分大小写,但其前缀“ 0x”不能为“ 0X”。                      

 - 日期和时间值:日期和时间值是一些类似于“ 1999-06-17”或“ 12:30:43”这样的值。 MySQL 还支持日期/时间的组合,如“ 1999-06-17 12:30:43”。需要要特别注意的是, MySQL 是按年-月-日的顺序表示日期的。                                       

 - NULL 值:NULL 值可适用于各种列类型,它通常用来表示“没有值”、 “无数据”等意义,并且不同于例如数字类型的 0 为或字符串类型的空字符串。
 - 枚举(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; //可以用下面的语句清空整个表 
MySQL学习笔记(二)的更多相关文章
- MySQL学习笔记(二):MySQL数据类型汇总及选择参考
		
本文主要介绍了MySQL 的常用数据类型,以及实际应用时如何选择合适的类型. ******几个通用的简单原则:******* 1. 更小的通常更好.但是要确保没有低估需要存储的值的范围,如果无法确定 ...
 - MySQL学习笔记(二)
		
连接与断开服务器 应该以下面的方式连接MySQL服务器,而不是将密码以明文方式输入连接. C:\> mysql -h host -u user -pEnter password: ******* ...
 - MySQL学习笔记二:权限管理
		
1. 创建和删除用户,mysql中的用户是由用户名和主机名来确定的 create user "user_name@host_name" identified by passwd; ...
 - sql分类及基本sql操作,校对规则(mysql学习笔记二)
		
sql针对操作对象分为不同语言 数据操作(管理)语言 DML或者将其细分为 ( 查询 DQL 管理(增,删,改) DML) 数据定义语言(对保存数据的格式进行定义) DDL 数据库控制语言(针对数 ...
 - MySQL学习笔记二
		
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
 - MySQL学习笔记(二)—查询
		
一.多表连接查询 新建两张表t_user.t_order. 1.内连接 返回满足条件的所有记录. (1)显式内连接 使用inner join关键字,在on ...
 - mysql学习笔记二 —— 权限体系
		
要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...
 - MySQL 学习笔记 二
		
Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...
 - MySql学习笔记(二) —— 正则表达式的使用
		
前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...
 - Mysql学习笔记(二)数据类型 补充
		
原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与 ...
 
随机推荐
- codeforces 323A. Black-and-White Cube   构造
			
输入n 1 <= n <= 100 有一个n * n * n 的立方体,由n ^ 3 个1 * 1 * 1 的单位立方体构成 要用white 和 black 2种颜色来染这n ^ 3个立方 ...
 - redis 安装并设置为开机启动服务
			
安装 1.下载redis,wget http://download.redis.io/releases/redis-3.0.1.tar.gz 解压:tar zxvf redis3.0.1.tar.gz ...
 - Windows XP下安装和配置Apache2.2.22服务器+PHP5+Mysql5
			
原文:http://www.chinaz.com/web/2012/0516/252021.shtml 随着PHP网站的流行,国内越来越多的站长使用php开发网站或者使用相关的php开源网站(例如:D ...
 - 表空间、Schema和用户
			
源地址:http://www.cnblogs.com/kevinanni/p/3688921.html
 - J2EE 和javaweb有区别吗
			
java web是java对web开发的一种总和称呼.他是B/S模式,对应的是C/S模式: java ee,又叫j2ee是一种广泛使用的平台,包含了一组协调技术,可显著降低成本以及开发.部署和管理以服 ...
 - golang 移动应用例子 example/basic 源码框架分析
			
条件编译 我们在源码中可以看到2个文件: main.go 和 main_x.go 这两个包名都是 package main , 都有 main 函数. 不会冲突么? 答案是不会的, main_x.go ...
 - ArcGIS上根据经纬度求地球表面两点间距离的实现
			
ArcGIS上根据经纬度求地球表面两点间距离的实现 以米为单位..Net2.0,C#实现. public static double DistanceOfTwoPoints(double ...
 - 解决WinForm(C#)中MDI子窗体最大化的问题
			
“用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...
 - SDP平台操作视频
			
一.SDP平台交流咨询联系方式 平台设计端:基于Winform C/S的可视化软件是设计器(生成B/S架构的应用软件 html文件) 平台应用端:基于.Net 的 B/S架构的html文件的应用软件 ...
 - 502 Bad Gateway什么意思
			
http://baike.baidu.com/link?url=U2ijg5T5PG_tTkY67mqfx07co7qGqvMB32rbLwq4S2ThBSRIWWvU76Y0Mb8Z3z6nbViN ...