数据类型:
sql语句书写规范:
- 不区分大小写
- 不区分列名和对象名的大小写
- 数据库中数据时大小写敏感的
- 单行注释“- -”
- 多行注释“/*注释内容*/”
- 语句可以写在单行或多行上
主键:
- 用于约束实体完整性,即实体完整性,是对数据表中行的完整性约束
- 主键列值唯一,且不为空(即NULL值)
- 可以将多个列组合在一起作为表的主键
外键:
- 若属性列F是关系B中的一个属性(并不是关系B的主键),且属性F是关系A中的主键,那么F就是关系B的外键。关系A中的表称为主表,关系B中的表称为主表的从表。
索引:
- 一个指向数据表中数据的指针,指向索引字段在数据表中的物理位置。
- 建立索引一般在:
- 主键列
- 多表连接时,在经常使用对的连接列
- WHERE子句查询的列上
- 经常进行分组(GROUP BY ) 和排序(ORDER BY)的列
索引分类:
- 唯一索引:在数据表中使用UNIQUE关键字可以为一个数据列定义一个唯一索引。
- 主索引:在数据表中使用PRIMARY KEY 关键字可以为一个数据列定义主索引
- 单列索引:定义在一个表中一个列上的索引
- 复合索引:定义在表中多个列上的索引
- 聚簇索引:聚簇索引中索引项顺序与数据表中数据记录的物理顺序保持一致。在一个表中只能建一个。
- 索引数MYsql不超过16个,oracle不超过32个。
约束:
- 唯一约束:保证使用唯一约束的列或一组列中没有相同的值,但允许出现空值(NULL)。
- 主键约束:保证值唯一且不为空
- 外键约束:保证参照完整性
- 检查约束:限制列的取值范围或取值条件。可以为列定义多个
- 非空约束:只用于约束列。不允许插入Null值。
列级的完整性约束是指定定义列和指定列中数据类型后就定义完整性约束条件;
表级的完整性约束是在定义了所有列之后再定义完整性约束条件。
创建、删除数据库:
CREATE DATABASE DATABASE_NAME
DROP DATABASE DATABASE_NAME
创建数据表:
CREATE TABLE TABLE_NAME(
COLUMN_NAME1 DATA_TYPE1[CONSTRAINT_CONDITION1]
[,COLUMN_NAME2 DATA_TYPE2 [CONSTRAINT_CONDITION2]]...
)
CREATE TABLE TABLE_NAME(
COLUMN_NAME1 DATA_TYPE1[CONSTRAINT_CONDITION1]
[,COLUMN_NAME2 DATA_TYPE2 [CONSTRAINT_CONDITION2]]...
[,PRIMARY KEY(COLUMN_NAME1,COLUMN_NAME2...]
)
FOREGIN KEY[TABLE_NAME](COLUMN_NAME) REFERENCES TABLE_NAME2(COLUMN_NAME2)
[ON UPDATE]|[SET NULL]|[RESTRICT]
[ON DELETE]|[SET NULL]|[RESTRICT]
创建索引:
CREATE [UNIQUE]|[CLUSTER] INDEX INDEX_NAME ON TABLE_NAME (COLUMN_NAME [排序方式]...)
删除索引:
DROP INDEX INDEX_NAME
添加一列:
ALTER TABLE TABLE_NAME ADD(COLUMN_NAME DATA_TYPE [CONSTRAINT_CONDITION]
增加一个约束条件:
ALTER TABLE TABLE_NAME ADD CONSTRAINT_TYPE (COLUMN_NAME)
增加一个索引:
ALTER TABLE TABLE_NAME ADD INDEX(COLUMN_NAME[,COLUMN_NAME]...)
修改表中的一列:
ALTER TABLE TABLE_NAME MODIFY COLUM_NAME DATA_TYPE
删除表中的一列:
ALTER TABLE TABLE_NAME DROP COLUMN_NAME
删除一个约束条件:
ALTER TABLE TABLE_NAME DROP CONSTRAINT_TYPE
删除数据库中的表:
DROP TABLE TABLE_NAME[CASCADE CONSTRAINTS]
数据查询
SELECT * FROM 表名或视图名
FROM后最多指定256个表名或视图名,并以逗号分隔
实际使用中在SELECT语句中不建议使用“*”,最好指定查询列的名字
原因:
软件开发角度:实际表中一般字段都很多,指定查询列有利于开发人员了解数据结构,方便开发与维护。
执行效率角度:使用“*”查询所有列比指定查询列的名字查询速度慢。使用指定的列名可以提供查询速度。
查询表中指定列:
SELECT 列名1[,列名2,...] FROM 表名或视图名[,表名或视图名]
查询表中不重复记录:
SELECT DISTINCT 列名1[,列名2,...] FROM 表名或视图名[,表名或视图名]
使用列别名查询:
SELECT 列名1 AS 列别名1[,列名2 AS 列别名2,...] FROM 表名或视图名[,表名或视图名]
AS是可选的,可以用空格代替。
列别名若存在特殊字符或对大小写敏感则需要用单引号或双引号引起来,如含有:点号(.)、分号、冒号等时。
对查询的记录进行算术运算
加减乘除
使用连接符(||)连接字段
SELECT COLUMN_NAME1||COLUMN_NAME2 FROM TABLE_NAME
使用连接符时,多个字段类型应该是相同的。
连接不同类型时,系统会报错。
如果需要在连接的字段中加入字符或日期类型的值,需要将该字符或者日期类型的值使用单引号引起来。
myql中可以使用CONCAT函数连接