标签:ceil 含义 body let long 最好 schema big 图形
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。基于读写速度考虑,现在使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。其特点为:
MySQL下载地址:https://www.mysql.com/downloads/
相关安装教程较为简单,可自行查询。
Linux和Windows连接方式一样,在命令行输入:
[root@host]# mysql -uroot -p
Enter password:******
登录后成功后输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is XXXXXX to server version: 5.X.X
Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer.
基本操作:
利用Java API实现数据库连接,详情见JDBC相关资料。
使用create关键词创建数据库,database和schema等效。
CREATE DATABASE dbname;
CREATE SCHEMA dbname;
指定编码方式创建数据库。
CREATE DATABASE [IF NOT EXISTS] dbname [DEFAULT] CHARACTER SET [=] utf-8;
使用show关键字查看当前服务器下全部数据库。
SHOW DATABASE;
SHOW SCHEMA;
SHOW CREATE DATABASE dbname;
ALTER DATABASE dbname [DEFAULT] CHARACTER SET [=] utf-8;
注:[]表示可以省略
USE dbname;
SELECT DATABASE();
SELECT SCHEMA();
DROP DATABASE [IF EXISTS] dbname;
两种注释方式。
# 这是一段注释1
-- 这是一段注释2
类型 | 大小 | 范围 | 用途 |
---|---|---|---|
TINYINT | 1 字节 | (-128,127) | 小整数值 |
SMALLINT | 2 字节 | (-32 768,32 767) | 大整数值 |
MEDIUMINT | 3 字节 | (-8 388 608,8 388 607) | 大整数值 |
INT | 4 字节 | (-2 147 483 648,2 147 483 647) | 大整数值 |
BIGINT | 8 字节 | (-9 233 372 036 854 775 808,9 223 372 036 854 775 807) | 极大整数值 |
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) | 单精度浮点数值 |
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) | 双精度浮点数值 |
DECIMAL | M,D决定 | 依赖于M和D的值 | 小数值 |
类型 | 大小 | 用途 |
---|---|---|
CHAR | 0-255字节 | 定长字符串 |
VARCHAR | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的二进制字符串 |
TINYTEXT | 0-255字节 | 短文本字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
类型 | 大小 | 格式 | 用途 |
---|---|---|---|
DATE | 3 字节 | YYYY-MM-DD | 日期值 |
TIME | 3 字节 | HH:MM:SS | 时间值或持续时间 |
YEAR | 1 字节 | YYYY | 年份值 |
DATETIME | 8 字节 | YYYY-MM-DD HH:MM:SS | 混合日期和时间值 |
TIMESTAMP | 4 字节 | YYYYMMDD HHMMSS | 混合日期和时间值,时间戳 |
数据表由行和列组成,每个数据表中至少有1列,行可以0,1或多行,表名必须唯一,且含义明确。
CREATE TABLE [IF NOT EXISTS] tblname(
字段名称 字段类型 [完整性约束条件],
字段名称 字段类型 [完整性约束条件],
字段名称 字段类型 [完整性约束条件],
...
)ENGINE=存储引擎 CHARSET=编码方式;
MySQL中在表创建时指定数据项的约束条件:
约束条件 | 作用 |
---|---|
UNSIGNED | 无符号 |
ZEROFILL | 零填充 |
NOT NULL | 非空 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键,标识记录唯一性,值不重复且不为空 |
UNIQUE KEY | 唯一性 |
AUTO_INCREMENT | 自动增长,数值列,配合索引 |
FOREIGN KEY | 外键约束 |
# 实例
CREATE TABLE IF NOT EXISTS `tbl`(
`id` INT UNSIGNED AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`author` VARCHAR(40) NOT NULL,
`date` DATE,
PRIMARY KEY ( `id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
SHOW [FULL] TABLES [[FROM/IN] dbname] [LIKE ‘pattern‘ / WHERE expr]
#实例
SHOW TABLES;
SHOW CREATE TABLE tlbname;
DESC tblname;
DESCRIBE tblname;
SHOW COLUMNS FROM tblname;
DROP TABLE [IF EXISTS] tblname;
ALTER TABLE tblname
ADD 字段名称 字段属性 [完整性约束条件]
[FIRST|AFTER 字段名称];
ALTER TABLE tblname
DROP 字段名称;
ALTER TABLE tblname
ALTER 字段名称 SET DEFAULT 默认值;
ALTER TABLE tblname
ALTER 字段名称 DROP DEFAULT;
ALTER TABLE tblname
MODIFY 字段名称 字段类型 [字段属性] [FIRST|AFTER 字段名称];
ALTER TABLE tblname
CHANGE 原字段名称 新字段名称 字段类型 字段属性
[FIRST|AFTER 字段名称];
ALTER TABLE tblname
ADD PRIMARY KEY(字段名称);
ALTER TABLE tblname
DROP PRIMARY KEY;
# 1
ALTER TABLE tblname
ADD UNIQUE KEY indexname(字段名称);
# 2
ALTER TABLE tblname
ADD UNIQUE INDEX indexname(字段名称);
ALTER TABLE tblname
DROP indexname;
# 1
ALTER TABLE tblname
RENAME [TO|AS] newtblname;
# 2
RENAME TABLE tblname TO newtblname;
INSERT [INTO] tblname ( field1, field2,...fieldN )
VALUES ( value1, value2,...valueN );
INSERT tblname VALUES ( value1, value2,...valueN );
INSERT tblname ( field1, field2,...fieldN )
VALUES ( value1, value2,...valueN );
# 1
INSERT tblname ( field1, field2,...fieldN ) VALUES
( value1, value2,...valueN ),
( value1, value2,...valueN ),
...
( value1, value2,...valueN );
# 2
INSERT tblname SET field1 = value1, field2 = value2,...;
# 3
INSERT tblname [(field1, field2,...fieldN)]
SELECT field1, field2,...fieldN
FROM tblname [WHERE 条件];
# 如果不添加条件,整个表中的记录都会更新
UPDATE tblname SET field1 = value1, field2 = value2,...
[WHERE 条件];
# 如果不加入条件,所有记录都会删除,增长值不会改变
DELETE FROM tblname [WHERE 条件];
# 设置增长值为1
ALTER TABLE tblname AUTO_INCREMENT = 1;
# 彻底清空数据表
TRUNCATE [TABLE] tblname;
SELECT 条件1,条件2... FROM tblname
[WHERE 条件]
[GROUP BY colname或position HAVING 二次筛选]
[ORDER BY colname,postion或expr [ASC|DESC]]
[LIMIT 限制结果集显示条数];
SELECT * FROM tblname;
SELECT * FROM dbname.tblname;
SELECT 字段名称,... FROM tblname;
SELECT 字段名称,... [AS] 别名名称,... FROM dbname.tblname;
SELECT 字段名称,... FROM tblname [AS] 别名;
SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND|OR] condition2.....
操作 | 符号 |
---|---|
比较运算符 | >, >=, <, ?, !=, <> ,<=> |
指定范围 | [NOT] BETWEEN...AND... |
指定集合 | [NOT] IN (value,...) |
逻辑运算符 | AND, OR |
匹配字符 | [NOT] LIKE; % (任意长度字符); _ (任意一个字符) |
把值放到一个组中,结果只会显示组中一条记录
SELECT GROUP_CONCAT(username),age,sex,addr
FROM tblname
GROUP BY sex;
SELECT sex, username, COUNT(*) FROM tblname
GROUP BY sex;
SELECT sex, username FROM tblname
GROUP BY sex
WITH ROLLUP;
SELECT sex, username FROM tblname
GROUP BY sex
HAVING sex = ‘男‘;
# 默认排序为升序 ASC,可指定降序 DESC
# 1.按照多个字段排序
SELECT id, username, age
FROM tblname
ORDER BY age ASC, id ASC;
# 2.随机排序
SELECT id, username, age
FROM tblname
ORDER BY RAND();
# 1.显示前count条记录
SELECT * FROM tblname
LIMIT count;
# 2. 从offset页开始,显示count条记录
# offset从0开始编号
SELECT * FROM tblname
LIMIT offset, count;
# 列出所有可能连接
SELECT * FROM tblname1 CROSS JOIN tblname2;
# 查询两个表中符合连接条件的记录
SELECT 字段名称,... FROM tblname1
INNER JOIN tblname2
ON 连接条件;
# 例
SELECT e.id, e.username, e.age, d.depName
FROM emp AS e
INNER JOIN dep AS d
ON d.depID = d.id;
# 先显示左表中的全部记录,再去右表中查询复合条件记录,不符合以NULL代替
SELECT 字段名称,... FROM tblname1
LEFT OUTER JOIN tblname2
ON 连接条件;
# 先显示右表中的全部记录,再去左表中查询复合条件记录,不符合以NULL代替
SELECT 字段名称,... FROM tblname1
RIGHT OUTER JOIN tblname2
ON 连接条件;
只有InnoDB支持外键,详情查看存储引擎相关资料。
# 先创建主表,子表的外键字段类型和主表要相似
# 如果外键字段没有创建索引,会自动创建
# 子表外键关联必须是父表的主键
[CONSTRAINT 外键名称] FOREIGN KEY (字段名称)
REFERENCES 主表 (字段名称);
# 添加:要保证记录合法
ALTER TABLE tblname
ADD FOREIGN KEY (外键字段)
REFERENCES 主表 (字段名称);
# 删除
ALTER TABLE tblname
DROP FOREIGN KEY (外键字段);
约束条件 | 作用 |
---|---|
CASCADE | 从父表删除或更新,子表相同操作 |
SET NULL | 从父表删除或更新,设置子表外键列为NULL |
NO ACTION/RESTRICT | 拒绝对父表做更新或删除 |
# 使用方法,设置时指定
# 删除约束
ALTER TABLE tblname
ADD FOREIGN KEY (外键字段)
ON DELETE CASCADE;
# 更新约束
ALTER TABLE tblname
ADD FOREIGN KEY (外键字段)
ON UPDATE CASCADE;
SELECT 字段名称 FROM tblname
WHERE colname = (SELECT colname FROM tblname);
# 也可以使用NOT IN
SELECT * FROM emp
WHERE depId IN (SELECT id FROM dep);
SELECT id, username, score FROM stud
WHERE score >= (SELECT score FROM level WHERE id=1);
SELECT * FROM emp WHERE EXISTS (
SELECT depName FROM dep WHERE id = 10);
运算符 | ANY | SOME | ALL |
---|---|---|---|
">",">=" | 最小值 | 最小值 | 最大值 |
"<", "<=" | 最大值 | 最大值 | 最小值 |
"=" | 任意值 | 任意值 | |
"<>", "!=" | 任意值 |
SELECT * FROM stu
WHERE score >= ANY(
SELECT score FROM level);
# INSERT ... SELECT
# CREATE ... SELECT
CREATE TABLE user(
id INT UNSIGNED AUTO_INCREMENT KEY,
username VARCHAR(20)
) SELECT id ,username FROM emp;
# 去掉字段重复值 DISTINCT
SELECT DISTINCT (username) FROM emp;
# UNION 去掉重复值
SELECT 字段名称,... FROM tblname1
UNION
SELECT 字段名称,... FROM tblname2
# UNION ALL 简单合并
SELECT 字段名称,... FROM tblname1
UNION ALL
SELECT 字段名称,... FROM tblname2
可实现无极限分类。
函数 | 作用 | 函数 | 作用 |
---|---|---|---|
CEIL() | 进一取整 | ABS() | 绝对值 |
FLOOR() | 舍一取整 | POWER() | a^b |
ROUND() | 四舍五入 | PI() | 圆周率 |
TRUNCATE() | 截取 | RAND() | 随机数 |
MOD() | 取余 | SIGN() | 符号函数 |
EXP(a) | e^a |
函数 | 作用 | 函数 | 作用 |
---|---|---|---|
CHAR_LENGTH() | 得到字符串字符数 | LENGTH() | 得到字符串长度 |
CONCAT(str1,str2) | 合并字符串 | CONCAT_WS(separator, str1, str2) | 已注定分隔符拼接字符串 |
UPPER()/UCASE() | 转大写 | LOWER()/LCASE() | 转小写 |
REVERSE() | 字符串反转 | LEFT(str,n) | 返回前几个字符 |
RIGHT() | 返回后几个字符 | LPAD()/RPAD(str1,n,str2) | 用字符串左/右填充到指定长度 |
TRIM()/LTRIM()/RTRIM() | 去掉全部/左/右空格 | REPEAT(str,n) | 重复指定次数 |
REPLACE(str,str1,str2) | 替换字符串 | SUBSTRING(str,n1,n2) | 截取子串 |
STRCMP(str1,str2) | 比较字符串 |
函数 | 作用 | 函数 | 作用 |
---|---|---|---|
CURDATE()/CURRENT_DATE() | 返回当前日期 | CURTIME()/CURRENT_TIME() | 当前时间 |
NOW()/CURRENT_TIMESTAMP()/SYSDATE() | 返回日期和时间 | MONTH() | 返回日期中月份 |
DAYNAME() | 返回星期几 | DAYOFWEEK() | 一周内第几天 |
WEEK() | 一年第几个星期 | YEAR() | 返回年份 |
HOUR() | 小时 | MINUTE() | 分钟 |
SECOND() | 秒数 | DATEDIFF() | 计算日期相差天数 |
函数 | 作用 | 函数 | 作用 |
---|---|---|---|
VERSION() | 系统版本 | CONNECTION_ID() | 连接数 |
DATABASE()/SCHEMA() | 打开数据库 | USER()/CURRENT_USER() | 当前用户 |
SYSTEM_USER()/SESSION_USER() | 当前用户 | LAST_INSERT_ID() | 上一个自增长id |
MD5() | 加密算法 | PASSWORD() | 默认用户加密算法 |
SELECT * FROM runoob_tbl
INTO OUTFILE ‘/tmp/tables.txt‘;
# 生成一个文件,各值用逗号隔开
SELECT a,b,a+b INTO OUTFILE ‘/tmp/result.text‘
FIELDS TERMINATED BY ‘,‘ OPTIONALLY ENCLOSED BY ‘"‘
LINES TERMINATED BY ‘\n‘
FROM test_table;
mysqldump是mysql用于转存储数据库的实用程序。它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等。
# 1.命令栏导出
$ mysqldump -u root -p --no-create-info --tab=/tmp DB tbl
password ******
# 2.导出表到指定文件
$ mysqldump -u root -p DB tbl > dump.txt
password ******
# 3.导出整个数据库数据
$ mysqldump -u root -p DB > database_dump.txt
password ******
# 4.备份所有数据库
$ mysqldump -u root -p --all-databases > database_dump.txt
password ******
# 1.导入dump.txt
LOAD DATA LOCAL INFILE ‘dump.txt‘ INTO TABLE mytbl;
# 2.明确指出列的分隔符和尾行标记
LOAD DATA LOCAL INFILE ‘dump.txt‘ INTO TABLE mytbl
FIELDS TERMINATED BY ‘:‘
LINES TERMINATED BY ‘\r\n‘;
# 3.指定列的顺序
LOAD DATA LOCAL INFILE ‘dump.txt‘
INTO TABLE mytbl (b, c, a);
# 1.导入dump.txt
$ mysqlimport -u root -p --local database_name dump.txt
password *****
# 2.指定选项来设置指定格式
$ mysqlimport -u root -p --local --fields-terminated-by=":" --lines-terminated-by="\r\n" database_name dump.txt
password *****
# 3.使用 --columns 选项来设置列的顺序
$ mysqlimport -u root -p --local --columns=b,c,a database_name dump.txt
password *****
MySQL Workbench 下载: https://dev.mysql.com/downloads/workbench/
SQL 语句 | 语法 |
---|---|
AND / OR | SELECT column_name(s) FROM table_name WHERE condition AND/OR condition |
ALTER TABLE | ALTER TABLE table_name ADD column_name datatype ALTER TABLE table_name DROP COLUMN column_name |
AS (alias) | SELECT column_name AS column_alias FROM table_name SELECT column_name FROM table_name AS table_alias |
BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
CREATE DATABASE | CREATE DATABASE database_name |
CREATE TABLE | CREATE TABLE table_name( column_name1 data_type, column_name2 data_type, column_name2 data_type, ...) |
CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) CREATE UNIQUE INDEX index_name ON table_name (column_name) |
CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
DELETE | DELETE FROM table_name WHERE some_column=some_value DELETE FROM table_name DELETE * FROM table_name |
DROP DATABASE | DROP DATABASE database_name |
DROP INDEX | DROP INDEX table_name.index_name (SQL Server) DROP INDEX index_name ON table_name (MS Access) DROP INDEX index_name (DB2/Oracle) ALTER TABLE table_name DROP INDEX index_name (MySQL) |
DROP TABLE | DROP TABLE table_name |
GROUP BY | SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name |
HAVING | SELECT column_name, aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value |
IN | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) |
INSERT INTO | INSERT INTO table_nameVALUES (value1, value2, value3,....) INSERT INTO table_name(column1, column2, column3,...)VALUES (value1, value2, value3,....) |
INNER JOIN | SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
LEFT JOIN | SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
RIGHT JOIN | SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
FULL JOIN | SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
LIKE | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern |
ORDER BY | SELECT column_name(s) FROM table_name ORDER BY column_name [ASC/DESC] |
SELECT | SELECT column_name(s) FROM table_name |
SELECT * | SELECT * FROM table_name |
SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name |
SELECT INTO | SELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_table_name |
SELECT TOP | SELECT TOP number/percent column_name(s) FROM table_name |
TRUNCATE TABLE | TRUNCATE TABLE table_name |
UNION | SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 |
UNION ALL | SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 |
UPDATE | UPDATE table_name SET column1=value, column2=value,... WHERE some_column=some_value |
WHERE | SELECT column_name(s) FROM table_name WHERE column_name operator value |
更新中...
标签:ceil 含义 body let long 最好 schema big 图形
原文地址:https://www.cnblogs.com/apollospotatolikett/p/8955385.html