整理自菜鸟教程
基础概念要知道一些:
- 创建数据库
CREATE DATABASE dbname;
- 创建表
CREATE TABLE Persons ( PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255) );
3.NOT NULL 约束 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255) )
- UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
- 在 “Persons” 表创建时在 “P_Id” 列上创建 UNIQUE 约束
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (P_Id) )
- 命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) )
- 表已被创建时,如需在 “P_Id” 列创建 UNIQUE 约束,请使用下面的 SQL:
ALTER TABLE Persons ADD UNIQUE (P_Id)
- 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
- 撤销 UNIQUE 约束,请使用下面的 SQL
ALTER TABLE Persons DROP INDEX uc_PersonID
- PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。
- 在 “Persons” 表创建时在 “P_Id” 列上创建 PRIMARY KEY 约束:
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), PRIMARY KEY (P_Id) )
- 如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons ( P_Id int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), City varchar(255), CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName) )
- 当表已被创建时,如需在 “P_Id” 列创建 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons ADD PRIMARY KEY (P_Id)
- 如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
ALTER TABLE Persons ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
如果您使用 ALTER TABLE 语句添加主键,必须把主键列声明为不包含 NULL 值(在表首次创建时)。 - 如需撤销 PRIMARY KEY 约束,请使用下面的 SQL:
ALTER TABLE Persons DROP PRIMARY KEY
- 在 “Orders” 表创建时在 “P_Id” 列上创建 FOREIGN KEY 约束
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) )
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法
CREATE TABLE Orders ( O_Id int NOT NULL, OrderNo int NOT NULL, P_Id int, PRIMARY KEY (O_Id), CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id) )
当 “Orders” 表已被创建时,如需在 “P_Id” 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders ADD FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
ALTER TABLE Orders ADD CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
撤销 FOREIGN KEY 约束,请使用下面的 SQL:
ALTER TABLE Orders DROP FOREIGN KEY fk_PerOrders
一、数据库表
- use RUNOOB; 命令用于选择数据库。
- set names utf8; 命令用于设置使用的字符集。
- SELECT * FROM Websites; 读取数据表的信息。
- SQL 对大小写不敏感:SELECT 与 select 是相同的
- 分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的 SQL 语句。
二、SELECT
- 从 “Websites” 表中选取 “name” 和 “country” 列:
SELECT name,country FROM Websites;
三、SELECT DISTINCT
在表中,一个列可能会包含多个重复值,有时您也许希望仅仅列出不同(distinct)的值。DISTINCT 关键词用于返回唯一不同的值
- 仅从 “Websites” 表的 “country” 列中选取唯一不同的值,也就是去掉 “country” 列重复值:
SELECT DISTINCT country FROM Websites;
四、WHERE
提取那些满足指定条件的记录
- 从 “Websites” 表中选取国家为 “CN” 的所有网站
SELECT * FROM Websites WHERE country='CN';
五、文本字段 vs. 数值字段
SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。
在上个实例中 ‘CN’ 文本字段使用了单引号。
如果是数值字段,请不要使用引号。
SELECT * FROM Websites WHERE id=1;
六、AND & OR
-
从 “Websites” 表中选取国家为 “CN” 且alexa排名大于 “50” 的所有网站:
SELECT * FROM Websites WHERE country=‘CN’ AND alexa >50;
-
从 “Websites” 表中选取国家为 “USA” 或者 “CN” 的所有客户
SELECT * FROM Websites WHERE country='CN' OR country='USA';
-
把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式)。
下面的 SQL 语句从 “Websites” 表中选取 alexa 排名大于 “15” 且国家为 “CN” 或 “USA” 的所有网站:SELECT * FROM Websites WHERE alexa>15 AND (country='CN' OR country='USA');
七、ORDER BY
1. 升序
- 从 “Websites” 表中选取所有网站,并按照 “alexa” 列排序:
SELECT * FROM Websites ORDER BY alexa;
2.降序
- 从 “Websites” 表中选取所有网站,并按照 “alexa” 列降序排序
SELECT * FROM Websites ORDER BY alexa DESC;
3. 多列
- 从 “Websites” 表中选取所有网站,并按照 “country” 和 “alexa” 列排序:
SELECT * FROM Websites ORDER BY country,alexa;
八、INSERT INTO
INSERT INTO 语句可以有两种编写形式。
第一种形式无需指定要插入数据的列名,只需提供被插入的值即可:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
第二种形式需要指定列名及被插入的值:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
-
向 “Websites” 表中插入一个新行
INSERT INTO Websites (name,url,alexa,country) values ('百度','http://baidu.com','4','CN');
-
在指定的列插入数据。
下面的 SQL 语句将插入一个新行,但是只在 “name”、“url” 和 “country” 列插入数据(id 字段会自动更新):
INSERT INTO Websites(name,url,country) values ('stackoverflow','http://stackoverflow.com/','IND');
九、UPDATE
- 把 “菜鸟教程” 的 alexa 排名更新为 5000,country 改为 USA。
在更新记录时要格外小心!在上面的实例中,如果我们省略了 WHERE 子句,如下所示:
UPDATE Websites
SET alexa=‘5000’, country=‘USA’
执行以上代码会将 Websites 表中所有数据的 alexa 改为 5000,country 改为 USA。
执行没有 WHERE 子句的 UPDATE 要慎重,再慎重。
十、DELETE
- 从 “Websites” 表中删除网站名为 “百度” 且国家为 CN 的网站
DELETE FROM Websites WHERE name='百度' AND country='CN';
2. 删除所有数据
可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
DELETE FROM table_name;
或
DELETE * FROM table_name;