heidiSQL
DBeaver
数据类型
类型 | 大小 | 范围(有符号) | 范围(无符号) | 用途 |
---|---|---|---|---|
TINYINT | 1 字节 | (-128,127) | (0,255) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | (0,65 535) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607)) | (0,16 777 215) | 大整数值 |
INT/INTEGER | 4 字节 | (-2 147 483 648,2 147 483 647) | (0,4 294 967 295) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | (0,18 446 744 073 709 551 615) | 极大整数值 |
FLOAT | 4 字节 | (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) | 0,(1.175 494 351 E-38,3.402 823 466 E+38) | 单精度浮点数值 |
DOUBLE | 8 字节 | (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) | 双精度浮点数值 |
DECIMAL | 对DECIMAL(M,D),如果M>D,为M+2否则为D+2 | 依赖于M和D的值 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 范围 | 格式 | 用途 |
---|---|---|---|---|
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 日期值 |
TIME | 3 | ‘-838:59:59’/’838:59:59’ | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 | 1901/2155 | YYYY | 年份值 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2037 年某时 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
一个中文3个length
1. SELECT DISTINCT country FROM Websites 用于返回唯一不同的值
2. SELECT * FROM Websites WHERE country=’CN’ SQL使用单引号来环绕文本值,大部分数据库系统也接受双引号
3. SELECT * FROM Websites WHERE alexa > 15 AND (country=’CN’ OR country=’USA’) 使用圆括号来组成复杂的表达式
4. SELECT * FROM Websites RDER BY alexa DESC ORDER BY 关键字用于对结果按照一个列或者多个列进行排序
5. SELECT * FROM Websites ORDER BY country,alexa ORDER BY 多列
6. UPDATE Websites SET alexa=’5000’, country=’USA’ WHERE name=’菜鸟教程’ WHERE 子句规定哪条记录或者哪些记录需要更新。如果您省略了 WHERE 子句,所有的记录都将被更新!
7. DELETE FROM Websites WHERE name=’百度’ AND country=’CN’ 删除记录
8. DELETE FROM table_name 或 DELETE * FROM table_name 在不删除表的情况下删除表中所有行,表结构、属性、索引将保持不变
9. 通配符
%
用来替代0个或多个字符
_
用来代替一个字符LIKE _OOGLE
[charlist]
字符列中的任意一个字符WHERE name REGEXP '^[GFs]'用来选取name以G/F/S开始的所有网站
[^charlist]或者[!charlist]
不在字符列中的任意单一字符WHERE name REGEXP '^[^A-H]'
10. SELECT * FROM Websites WHERE name IN (‘Google’,’菜鸟教程’) 选取name为Google或菜鸟教程的所有网站
11. SELECT * FROM Websites WHERE alexa NOT BETWEEN 1 AND 20 选取 alexa 介于 1 和 20 之间的所有网站
12. SELECT * FROM Websites WHERE (alexa BETWEEN 1 AND 20) AND NOT country IN (‘USA’, ‘IND’) 选取alexa介于 1 和 20 之间但 country 不为 USA 和 IND 的所有网站
SELECT * FROM Websites WHERE name BETWEEN ‘A’ AND ‘H’ 选取 name 以介于 'A' 和 'H' 之间字母开始的所有网站
SELECT * FROM access_log WHERE date BETWEEN ‘2016-05-10’ AND ‘2016-05-14’ 选取 date 介于 '2016-05-10' 和 '2016-05-14' 之间的所有访问记录
13. SELECT name AS n, country AS c FROM Websites
SELECT name, CONCAT(url, ‘, ‘, alexa, ‘, ‘, country) AS site_info FROM Websites 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名
14. SELECT w.name, w.url, a.count, a.date FROM Websites AS w, access_log AS a WHERE a.site_id=w.id and w.name=”菜鸟教程” 表的别名实例
在下面的情况下,使用别名很有用:
- 在查询中涉及超过一个表
- 在查询中使用了函数
- 列名称很长或者可读性差
- 需要把两个列或者多个列结合在一起
15. INNER JOIN:如果表中有至少一个匹配,则返回行
LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.
FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。
16. UNION 操作符用于合并两个或多个 SELECT 语句的结果集。
请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
SELECT country, name FROM Websites
WHERE country='CN'
UNION ALL
SELECT country, app_name FROM apps
WHERE country='CN'
ORDER BY country;
- INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。
INSERT INTO Websites (name, country) SELECT app_name, country FROM apps;
- CREATE DATABASE dbname;
用于创建数据库
CREATE TABLE tablename;
CREATE TABLE Persons ( PersonID int, LastName varchar(255) NOT NULL, # 不接收NULL值 FirstName varchar(255), Address varchar(255), City varchar(255), UNIQUE (LastName) # 在Lastname上面添加UNIQUE约束 CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName) # 命令unique约束,并定义多个列的unique约束 );
如果表已经被创建,再需要约束,可以使用下面的约束
ALTER TABLE Persons ADD UNIQUE (PersonID) ALTER TABLE Persons ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
撤销UNIQUE约束
ALTER TABLE Persons DROP INDEX uc_PersonID
- PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有一个主键,并且每个表只能有一个主键。
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)
)
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
- 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY 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)
)
命名并添加多个外键
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)
)
- CHECK 约束用于限制列中的值的范围。
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
ALTER TABLE Persons
ADD CHECK (P_Id>0)
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
- DEFAULT 约束用于向列中插入默认值,如果没有规定其他的值,那么会将默认值添加到所有的新记录。
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()/'test'
)
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
- CREATE INDEX 语句用于在表中创建索引。
//CREATE INDEX 语法,允许使用重复的值
CREATE INDEX index_name
ON table_name (column_name)
// CREATE UNIQUE INDEX 语法
在表上创建一个唯一的索引,不允许使用重复的值,
CREATE UNIQUE INDEX index_name
ON table_name (column_name)
//CREATE INDEX 实例
1. 在Person表的LastName列上创建一个名为“Pindex”的索引
CREATE INDEX PIndex
ON Persons (Lastname)
2. 如果要建立多个索引,可以在括号中列出这些列的名称,用逗号隔开
CREATE INDEX PIndex
ON Persons (LastName,FirstNme)
- 删除各种
1. // DROP INDEX 语句 用于删除表中的索引
ALTER TABLE table_name DROP INDEX index_name
2. // DROP TABLE 语句
DROP TABLE table_name
3. //DROP DATABASE 语句
DROP DATABASE database_name
4. //TRUNCATE TABLE 语句 用于删除表内的数据,但并不删除表本身
TRUNCATE TABLE table_name
- AUTO INCREEMENT
Auto-increment 会在新记录插入表中时生成一个唯一的数字。
ID int NOT NULL AUTO_INCREMENT
- SQL视图
SQL日期
NOW()
返回当时的日期和时间2017-07-27 20:53:22
CURDATE()
返回当前的日期2017-07-27
CURTIME()
返回当前的时间20:53:22
DATA()
提取日期或日期/时间表达式的日期部分date(now()) -> 2017-07-27
EXTRACT()
返回日期/时间的单独部分->EXTRACT()函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。unit的值 :
MICROSECOND SECOND MINUTE HOUR DAY WEEK MONTH QUARTER YEAR SECOND_MICROSECOND MINUTE_MICROSECOND MINUTE_SECOND HOUR_MICROSECOND HOUR_SECOND HOUR_MINUTE DAY_MICROSECOND DAY_SECOND DAY_MINUTE DAY_HOUR YEAR_MONTH
select extract(hour from now())
DATE_ADD()
向日期添加指定的时间间隔DATA_SUB()
从日期减去指定的时间间隔DATEDIFF()
返回两个日期之间的天数DATE_FORMAT()
用不同的格式显示日期/时间
- MYSQL
DATE - 格式:YYYY-MM-DD DATETIME - 格式:YYYY-MM-DD HH:MM:SS TIMESTAMP - 格式:YYYY-MM-DD HH:MM:SS YEAR - 格式:YYYY 或 YY TIME - 格式: HH:MM:SS
- MYSQL
- SQL NULL
NULL 用作未知的或不适用的值的占位符。
IS NULL 和 IS NOT NULL
// IFNULL() = COALESCE()
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
- SQL 通用数据类型
函数
length()
用于获取长度,一个汉字长度为3AVG()
返回平均值COUNT()
返回行数
COUNT(*)是所有行数
COUNT(column_name)是不包括NULL的行数
COUNT(DISTINCT column_name)是独一性的
MAX()
返回最大值MIN()
返回最小值SUM()
返回总和UCASE()
将某个字段转换为大写LCASE()
将某个字段转换为小写MID()
从某个文本字段提取字符
MID(name,1,4)
第一个是位置,从1开始,第二个是个数LEN()
返回某个文本字段的长度ROUND()
对某个数值字段进行指定小数位数的四舍五入
round(1.5) -> 2
== round(1.5,0)
第二位是几就是保留几位小小数
NOW()
返回当前的系统日期和时间FORMAT()
格式化某个字段的显示方式GROUP BY
GROUP BY 语句根据一个或多个列对结果集进行分组。在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。HAVING