1章 了解SQL
数据库概念
数据库
数据库是一个以某种有组织的方式存储的数据集合。 数据库(database)保存有组织的数据的容器(通常是一个文件或者一组文件)
表
表是一种结构化文件,可以用来存储某种特定类型的数据。表(table)某种特定类型数据的结构化清单
注意:存储在表中的数据是一种类型的数据或一个清单,决不应该将顾客的清单和订单的清单存储在同一个数据库表中
数据库中每个表都有一个名字,用来标识自己,此名字是唯一的。不同数据库可以使用相同表名,同一数据库不能使用相同表名。
模式(schema)
关于数据库和表的布局及特性的信息。
列 (column)
表中的一个字段,所有表都是有一个或多个列组成的
数据类型(datatype)
所容许的数据的类型, 数据库表中每个列都有响应的数据类型,它限制该列中存储的数据
注:数据类型限制数据种类,还帮助正确的排序数据,并在优化磁盘使用方面起重要作用
行(row)
表中的一个记录,也可以称为数据库记录(record)
主键(primary key)
一列(或一组列)其值能够唯一区分表中每一行
表中每一行都应该有可以唯一标识自己的一列,如一个顾客表可以使用顾客编号列,订单表可以使用订单ID
表中任何列都可以作为主键。
主键通常定义在表的一列上,但也可以一起使用多个列作为主键(所有列值的组合必须是唯一的,但单个列的值可以不唯一)
主键的最好习惯
除MySQL强制实施的规则外,应该坚持的几个普遍认可的最好习惯为:
不更新主键列中的值;
不重用主键列的值;
不在主键列中使用可能会更改的值。(例如,如果使用一个 名字作为主键以标识某个供应商,当该供应商合并和更改其名字时,必须更改这个主键。)
什么是SQL
结构化查询语言(Structured Query Language)的缩写,是一种专门用来与数据库通讯的语言。
>>几乎所有重要的DBMS都支持SQL,但任意两个DBMS实现的SQL都不完全相同
2章MySQL简介
什么是MySQL
MySQL是一种DBMS(数据库管理系统), 它是一种数据库软件
MySQL优点
>>成本--MySQL是开放源代码的,一般可以免费使用(甚至可以免费修改)。
>>性能--MySQL执行很快(非常快)
>>可信赖 --某些非常重要和声望很高的公司、站点都使用MySQL来处理自己的重要数据
>>简单--很容易安装和使用
基于客户机-服务器的软件
MySQL、Oracle以及Microsoft SQL Server等数据库是基于客户机—服务器的数据库
关于数据、数据添加、删除和数据更新的所有请求都由服务器软件完成。这些请求或更改来自运行客户机软件的计算机
3章 使用MySQL
创建数据库
使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
3 rows in set (0.00 sec)
创建一个数据库crashcourse
mysql> CREATE DATABASE crashcourse;
Query OK, 1 row affected (0.06 sec)
注意:不同操作系统对大小写的敏感。
选择你所创建的数据库
mysql> USE crashcourse
Database changed
此时你已经进入你刚才所建立的数据库crashcourse.
创建表:
CREATE TABLE orders
(
order_num int NOT NULL AUTO_INCREMENT,
order_date datetime NOT NULL ,
cust_id int NOT NULL ,
PRIMARY KEY (order_num)
) ENGINE=InnoDB;
CREATE TABLE productnotes
(
note_id int NOT NULL AUTO_INCREMENT,
prod_id char(10) NOT NULL,
note_date datetime NOT NULL,
note_text text NULL ,
PRIMARY KEY(note_id),
FULLTEXT(note_text)
) ENGINE=MyISAM;
增加表行
INSERT INTO customers(cust_id, cust_name, cust_address, cust_city, cust_state, cust_zip, cust_country,\
cust_contact, cust_email) VALUES(10001, 'Coyote Inc.', '200 Maple Lane', 'Detroit', 'MI', '44444', 'USA', \
'Y Lee', '[email protected]');
mysql中engine=innodb和engine=myisam的区别
查看表
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_crashcourse |
+-----------------------+
| orders |
+-----------------------+
1 row in set (0.00 sec)
查看表列
mysql> SHOW COLUMNS FROM customers; //SHOW COLUMNS 要求给出一个表名
+--------------+-----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-----------+------+-----+---------+----------------+
| cust_id | int(11) | NO | PRI | NULL | auto_increment |
| cust_name | char(50) | NO | | NULL | |
| cust_address | char(50) | YES | | NULL | |
| cust_city | char(50) | YES | | NULL | |
| cust_state | char(5) | YES | | NULL | |
| cust_zip | char(10) | YES | | NULL | |
| cust_country | char(50) | YES | | NULL | |
| cust_contact | char(50) | YES | | NULL | |
| cust_email | char(255) | YES | | NULL | |
+--------------+-----------+------+-----+---------+----------------+
9 rows in set (0.02 sec)
注:什么是auto_increment 自动增量?
>>>在每个行添加到表中时,MySQL可以自动地为每个行分配下一个可用编号,不用在添加一行时手动分配唯一值
>>>这样做必须记住最后一次使用的值,如果需要它,则必须在用CREATE语句创建表时把它作为表定义的组成部分
DESCRIBE语句
DESCRIBE语句 MySQL支持用DESCRIBE作为SHOW COLUMNSFROM的一种快捷方式。
换句话说,DESCRIBE customers;是 SHOW COLUMNS FROM customers;的一种快捷方式。
4章 检索数据
SELECT语句
声明:
SQL语句和大小写 请注意,SQL语句不区分大小写,因此SELECT与select是相同的。同样,写成Select也没有关系。
示例:
mysql> select prod_id,prod_name,prod_price from products;
mysql> select * from products
mysql> select vend_id from products;
mysql> select distinct vend_id from products; //distinct: 表示只返回不同(唯一)的vend_id行
SELECT 限制结果 (LIMIT子句)
mysql> select prod_id from products LIMIT 5; //返回不多于5个结果
mysql> select prod_id from products LIMIT 5,5; //返回从行5开始的5行,如果没有足够的行,只返回它能返回的那么多行
SELECT 使用完全限定的表名
select products.prod_name from products;
select products.prod_name from crashcourse.products;