数据库
SQL的关键字和字符串不区分大小写,而数据库和表等区分
- 找出当前服务器存在的数据库: SHOW databases;
- 创建数据库: CREATE DATABASE test;
- 如果test存在,访问它: USE test; 或者 CONNECT tset;
- 显示数据库里面的表: SHOW tables;
约束
-
- 主键是唯一标识表中每一行的列,每一张表必须包含主键:
-
- 任意两行都不具有相同的主键值(组)
- 每个行都必须具有一个主键值,不允许 NULL
- 主键列中的值不允许修改或更新
- 主键值不能重用。如果某行从表中删除,它的主键不能赋予以后的新行
-
- 外健是表中的一个列,其值必须在另一个表的主键中列出
-
- 能保证引用完整性
- 防止意外的删除
-
- 唯一约束用来保证一个列或一组列中数据的唯一。类是主键,但是
-
- 表可以包含多个唯一约束,但每个表只允许一个主键
- 唯一约束列可以包含NULL值
- 唯一约束列可以修改
- 和主键不一样,唯一约束不能用来定义外健
- 检查约束,如指定范围等
创建表
- 描述表的结构: DESC test;
导入数据
- 创建一个文本,每一行包含一个记录,用 tab 把值分开,若使用 NULL 值,用 N 代替,将文本载入test表中,使用命令: load data local infile ‘/path/test.txt’ into table test;
- 执行sql脚本: SOURCE /path/test.sql;
查记录
- 检索所有记录: SELECT * FROM test;
- 检索唯一的记录: SELECT DISTINCT owner FROM pet;
- 检索范围:
増记录
- 插入部分行 INSERT INTO Customers(cust_id,name) VALUES (‘1006′,’Mark’);
- 插入检索出的数据 INSERT INTO Customers(cust_id) SELECT cust_id FROM Customers;
- 复制表 CREATE TABLE Cust_2 AS SELECT * FROM Customers;
- 增加列 ALTER TABLE Vendors ADD vend_phone CHAR(20);
改记录
更新指定数据 :
- 列的重命名 SELECT name,(Year(current_date())-Year(birth)) age FROM pet;
- 表的重命名 RENAME TABLE old_name TO new_name;
删记录
- 删除指定行 DELETE FROM Customers WHERE cust_id = ‘1005’;
- 删除表中所有行 TRUNCATE Customers;
- 删除列 ALTER TABLE Vendors DROP vend_phone;
- 删除表 DROP TABLE Vendors;
模式匹配
SELECT name FROM pet WHERE name LIKE ‘%m’;
_
匹配单个字符%
匹配任意字符,包括零个字符- 不能使用
=
或!=
,而使用like
或not like
聚集函数
- 计数行
-
- SELECT COUNT( *) from pet; 对表中行的数目进行计数,不管表中是否含有NULL值
- COUNT(列名) 对特定列中具有的值进行计数, 忽略 NULL
AVG(),SUM(),MAX(),MIN() 都要指定列名。
排序
- order by 默认升序 SELECT name FROM pet ORDER BY birth;
- 降序: SELECT name FROM pet ORDER BY birth DESC;
分组
SELECT cust_id, count( *) AS order FROM orders GROUP BY cust_id HAVING COUNT( *) >= 2;
- GROUP BY 对数据进行分组
- Having 过滤分组, Where 过滤行; Having 在分组后过滤, Where 在分组前过滤 :
联结
笛卡尔积 : SELECT vend_name, prod_name FROM Vendors, Products;
自然联结 :
自联结 :
外部联结,包含了那些在相关表中没有关联行的行
组合查询
UNION 是并操作,去掉重复的行
返回所有匹配的行,用 UNION ALL
使用 UNION 查询,只能用一个 ORDER BY 语句,且出现在最后一个SELECT语句后面,作用在返回的所有结果
NULL
- NUll 意味着”没有值”或”未知值” ,不能用算术运算符比较
is null
和is not null
是操作符 SELECT prod_name FROM products WHERE prod_price IS NULL- 布尔值为 true,false, unknown 。 select null is not unknown 返回0
下面的语句创建的副本只有属性,没有值
WHERE NULL = NULL
返回假WHERE NULL is NULL
返回真
事务
- 事务的开始: BEGIN;
- 回退: ROLLBACK;
- 提交: COMMIT;
- 设置保留点 SAVEPOINT s1; 。回退到某个保留点 ROLLBACK TO s1;