常见数据类型
数值类型 (Numeric Types)
整数类型(Integer Types)
TINYINT
:1字节。
SMALLINT
:2字节。
MEDIUMINT
:3字节。
INT
或 INTEGER
:4字节
BIGINT
:8字节。
浮点数类型(Floating-Point Types)
FLOAT
:4字节,单精度浮点数。
DOUBLE
:8字节,双精度浮点数。
定点数类型(Fixed-Point Types)
DECIMAL
或 NUMERIC
:用于存储精确的小数,定义时需要指定精度和标度,例如 DECIMAL(10,2)
。
字符串类型 (String Types)
字符类型(Character Types)
CHAR
:固定长度字符串,最多 255 个字符。
VARCHAR
:可变长度字符串,最多 65,535 个字符。
日期和时间类型 (Date and Time Types)
DATE
:日期值,格式为 YYYY-MM-DD
。
TIME
:时间值,格式为 HH:MM:SS
。
DATETIME
:日期和时间值,格式为 YYYY-MM-DD HH:MM:SS
。
TIMESTAMP
:时间戳,格式为 YYYY-MM-DD HH:MM:SS
,可以自动更新。
YEAR
:年份值,格式为 YYYY
。
布尔类型 (Boolean Type)
BOOLEAN
或 BOOL
:实际上是 TINYINT(1)
的同义词,值为 0 表示假,1 表示真。
查询数据 及 增删改
查询所有数据:
SELECT * FROM table_name;
这将从名为 table_name
的表中检索所有行和列。
条件查询:
SELECT * FROM table_name WHERE column_name = 'value';
这将从 table_name
表中选择所有列,其中 column_name
列的值等于 'value'
。
选择特定列:
SELECT column1, column2 FROM table_name;
这将从 table_name
表中选择 column1
和 column2
列的数据。
排序结果:
SELECT * FROM table_name ORDER BY column_name DESC;
这将按照 column_name
列的降序顺序排序 table_name
表中的数据。
聚合函数(求和、平均值等):
SELECT AVG(column_name) AS average_value FROM table_name;
这将计算 table_name
表中 column_name
列的平均值,并将结果命名为 average_value
。
分组数据:
SELECT department, AVG(salary) AS avg_salary FROM employees GROUP BY department;
这将按照 department
列对 employees
表中的数据进行分组,并计算每个部门的平均工资。
连接表:
SELECT orders.order_id, customers.customer_name FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
这将连接 orders
表和 customers
表,并选择 orders
表中的 order_id
和 customers
表中的 customer_name
。
插入数据:
INSERT INTO table_name (column1, column2) VALUES ('value1', 'value2');
这将向 table_name
表中插入新行,包含 column1
和 column2
列的值 'value1'
和 'value2'
。
更新数据:
UPDATE table_name SET column_name = 'new_value' WHERE condition;
这将更新 table_name
表中符合条件的行,将 column_name
列的值设置为 'new_value'
。
删除数据:
DELETE FROM table_name WHERE condition;
这将从 table_name
表中删除符合条件的行。
视图
创建视图: 使用 CREATE VIEW
语句来创建视图。语法如下:
sqlCopy Code
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;
这将创建一个名为 view_name
的视图,其内容是基于 table_name
表的选择查询结果。
修改视图: 若要修改现有视图的定义,可以使用 ALTER VIEW
语句。语法如下:
ALTER VIEW view_name AS SELECT new_column1, new_column2, ... FROM new_table_name WHERE new_condition;
这将修改 view_name
视图的定义为新的选择查询结果。
替换视图内容: 如果要完全替换视图的内容(即使用新的查询定义替换现有的视图定义),可以使用 CREATE OR REPLACE VIEW
语句。例如:
CREATE OR REPLACE VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;
这将视图 view_name
的内容替换为新的选择查询结果。
删除视图: 若要删除视图,可以使用 DROP VIEW
语句。语法如下:
DROP VIEW view_name;
这将从数据库中删除名为 view_name
的视图。
查看系统变量
查看所有系统变量
SHOW VARIABLES;
查看特定的系统变量
SHOW VARIABLES LIKE 'variable_name';
例如,查看缓冲池大小:
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
使用 SELECT
语句查看系统变量
SELECT @@variable_name;
例如,查看当前的最大连接数:
SELECT @@max_connections;
修改系统变量
全局修改系统变量(重启后仍然有效,需要修改配置文件)
SET GLOBAL variable_name = value;
例如,设置最大连接数:
SET GLOBAL max_connections = 200;
会话级别修改系统变量(只对当前会话有效,断开连接后失效)
SET SESSION variable_name = value;
例如,设置当前会话的SQL模式:
SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
修改配置文件(持久化变更)
为了使一些全局变量的修改在服务器重启后仍然有效,你需要编辑MySQL的配置文件(通常是 my.cnf
或 my.ini
,取决于操作系统和MySQL的安装方式)。例如:
[mysqld] max_connections = 200 innodb_buffer_pool_size = 1G
修改完后,需要重启MySQL服务以使更改生效。
示例操作
查看当前的 max_connections
设置
SHOW VARIABLES LIKE 'max_connections';
将 max_connections
设置为 250
SET GLOBAL max_connections = 250;
验证修改是否生效
SHOW VARIABLES LIKE 'max_connections';
请注意,修改系统变量时需要具有相应的权限,通常需要有 SUPER
权限或等同的管理权限。
算术运算符
加法 (+
) 减法 (-
) 乘法 (*
) 除法 (/
) 取模 (%
)
比较运算符
等于 (=
) 不等于 (!=
或 < >
) 大于 (>
) 小于 (<
) 大于等于 (>=
) 小于等于 (<=
)
BETWEEN
:
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
IN
:
SELECT * FROM users WHERE age IN (25, 30, 35);
LIKE
(用于模式匹配):
SELECT * FROM users WHERE name LIKE 'J%'; -- 名字以 "J" 开头 SELECT * FROM users WHERE name LIKE '%son'; -- 名字以 "son" 结尾 SELECT * FROM users WHERE name LIKE '%an%'; -- 名字中包含 "an"
逻辑运算符
AND:SELECT * FROM users WHERE age > 25 AND city = 'New York';
OR:SELECT * FROM users WHERE age > 25 OR city = 'New York';
NOT:SELECT * FROM users WHERE NOT (age > 25);
位运算符
按位与 (&
):SELECT 5 & 3; -- 结果: 1 (二进制: 0101 & 0011 = 0001)
按位或 (|
):SELECT 5 | 3; -- 结果: 7 (二进制: 0101 | 0011 = 0111)
按位异或 (^
):SELECT 5 ^ 3; -- 结果: 6 (二进制: 0101 ^ 0011 = 0110)
按位取反 (~
):SELECT ~5; -- 结果: -6 (二进制: ~00000101 = 11111010)
左移 (<<
):SELECT 5 << 1; -- 结果: 10 (二进制: 0101 << 1 = 1010)
右移 (>>
):SELECT 5 >> 1; -- 结果: 2 (二进制: 0101 >> 1 = 0010)
字符串运算符
连接字符串 (CONCAT
):SELECT CONCAT('Hello', ' ', 'World'); -- 结果: 'Hello World'
赋值运算符
赋值 (=
):SET @variable = 10; SELECT @variable; -- 结果: 10