这里写自定义目录标题
关系型数据库的概念
行(元组/记录,一组相关的数据)+列(数据元素,相同类型的数据)->表单(数据的矩阵)->数据库
表头(每一列的名称),值(每行的具体信息),键(key,在其所在列具有唯一性)
主键,外键,复合键,索引,
SQL语句
创建数据库:create database 数据库名;
查看数据库:show create database 数据库名(查看某数据库定义的信息) show databases(查看服务器中所有数据库)
删除数据库:drop database 数据库名;
选择数据库:use database 数据库名;
创建数据表:CREATE TABLE table_name(column_name column_type)
删除数据表:DROP TABLE table_name
插入数据:
INSERT INTO table_name
(field1,field2,……,fieldN)
VALUES
(value1,value2,……,valueN)
当value为字符型或日期,则为"value"
删除数据表中记录:DELETE FROM table_name [WHERE Clause] 删除一行
修改数据表:
ALTER TABLE table_name DROP i
删除i字段ALTER TABLE table_name ADD i
添加i字段ALTER TABLE table_name MODIFY 类型(长度)
修改字段类型长度ALTER TABLE table_name CHANGE i j 类型
i:要修改的字段名 j:新字段名ALTER TABLE table_name RENAME TO new_table_name i
修改表名
读取数据表中数据:slect * from 表格名;
查询数据:
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N] [OFFSET M]
SELECT column_name,column_name表示可查询多条记录,使用逗号分隔; FROM table_name 可使用一个或多个表,逗号分隔; 用*代替其他字段,返回表的所有字段数据; 使用WHERE语句包含任何条件; 使用LIMIT属性设定返回的记录数; OFFSET指定开始查询的数据偏移量,默认为0.
WHERE子句:
SELECT field1, field2,…fieldN FROM table_name1, table_name2…
[WHERE condition1 [AND [OR]] condition2…
操作符:=, !=, >, <,>=,<=,<>
聚合函数:只可出现在select或者having语句中,不可出现在where语句中
sum()
avg()
max()
min()
count() 返回匹配指定条件的行数,count(*)返回表中的记录数
ORDER BY语句:SELECT field1,field2,……,fieldN FROM table_name ORDER BY field1[ASC[DESC]],field2[ASC[DESC]]
GROUP BY语句:
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
e.g. select cid,count(*) from product group by cid;
HAVING语句:
SELECT column_name, function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING function(column_name)条件;
e.g. select cid,avg(price) from product group by cid having avg(price)>60;
IN语句:
WHERE table_name IN(’’,’’);
注意:IN和=均在WHERE中作为等于的意思,IN可以规定多个值,=只能规定一个。
单表约束:主键约束:primary key, 唯一约束:unique,非空约束:not null. 主键约束=唯一约束+非空约束
MySQL 查询语 法 顺序
SELECT
FROM
LEFT JOIN
ON
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
索引
优化查询速度,包含对数据表里所有记录的引用指针
索引分类:
单列索引
- 普通索引:没限制
- 唯一索引:索引列中的值必须唯一,允许为空
- 主键索引:索引列中的值必须唯一,不允许为空
组合索引:在表中多个字段组合上创建的索引,只有使用了其左边字段,索引才被引用,遵循最左前缀集合
全文索引
空间索引
普通索引
创建索引:CREATE INDEX indexname ON mytable(username(length));
添加索引:ALTER table tablename ADD INDEX indexname(columnName)
创建表的时候同时创建索引:
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
删除索引:DROP INDEX [indexname] ON mytable
唯一索引:前三种情况均在indexname前加上UNIQUE
显示索引信息:SHOW INDEX FROM table_name; \G \G:来格式化输出信息
非聚集与聚集索引
非聚集索引:叶子节点只存储数据行的指针,即数据和索引不在一起。主键索引和辅助索引都会存储指针的值。
聚集索引:主键索引的叶子节点会存储数据行,即数据和索引在一起。辅助索引只会存储主键值。
数据类型
decimal(a,b) a指定指定小数点左边和右边可以存储的十进制数字的最大个数,最大精度38。b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。
注:DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。
char&varchar
CHAR是用来保存定长字符,存储空间的大小为字段定义的长度,与实际字符长度无关,当输入的字符小于定义长度时最后会补上空格。VARCHAR是用来保留变长字符,在数据库中存储空间的大小是实际的字符长度,不会像CHAR一样补上空格,这样占用的空间更少。
char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。