MySQL入门

一、查看信息

1.基本信息

1.服务器版本信息

SELECT VERSION()  

2.当前数据库名 (或者返回空)

SELECT DATABASE()

3.当前用户名

SELECT USER()

4.服务器状态

SHOW STATUS

5.服务器配置变量

SHOW VARIABLES  


2.数据表信息

查看表结构

DESC table_name;

查看表的创建语句

SHOW CREATE TABLE table_name;

查看表的行数

SELECT COUNT(*) FROM table_name;

二、对表的简单操作

1.基本操作

1.创建表

CREATE TABLE table_name (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    column3 VARCHAR(50),
    column4 DECIMAL(10, 2) -- 列名 + 数据类型
);

2.添加数据

INSERT INTO table_name (column1, column2, column3, ...) VALUES -- 对应前一个括号的值
(value1, value2, value3, ...),
(value1, value2, value3, ...);

3.更改数据

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

4.删除表

DROP table_name;

5.复制表结构(不包括数据)

CREATE TABLE new_table_name LIKE original_table_name;

6.复制表结构和数据

CREATE TABLE new_table_name AS SELECT * FROM original_table_name;

CREATE TABLE new_table_name LIKE original_table_name;
INSERT INTO new_table_name SELECT * FROM original_table_name;

7.将表移动到另一个数据库并重命名

RENAME TABLE database_name.old_table_name TO new_database_name.new_table_name;

8.更改表名

RENAME TABLE old_table_name TO new_table_name;

2.对列操作

1.添加列名

ALTER TABLE table_name ADD new_column_name data_type;

2.修改列信息

ALTER TABLE table_name MODIFY COLUMN old_column_name new_data_type;

3.修改列名

ALTER TABLE table_name CHANGE old_column_name new_column_name column_definition;

4.删除列

ALTER TABLE table_name DROP COLUMN column_name;

5.更改自增列下一个数据

ALTER TABLE table_name AUTO_INCREMENT = start_value;

3.对行操作

删除行

DELETE FROM table_name
WHERE condition; -- 没有该句删除所有行

4.对信息操作

1.添加主键

ALTER TABLE table_name ADD PRIMARY KEY (column_name);

2.删除主键

ALTER TABLE table_name DROP PRIMARY KEY;

3.添加外键

ALTER TABLE table_name ADD CONSTRAINT fk_constraint_name FOREIGN KEY (column_name)
REFERENCES other_table(other_column);

4.删除外键

ALTER TABLE table_name DROP FOREIGN KEY fk_constraint_name;

5.连接操作

左连接、右连接、内连接

SELECT * FROM table_name1
LEFT JOIN table_name2
ON table_name1.column = table_name2.columnion;

SELECT column FROM table_name1
UNION SELECT column FROM table_name2;

6.组合操作

重点看各个语句书写顺序

SELECT DISTINCT
    AVG(column)  new_column1,
    MIN(column) AS new_column2,
    COALESCE(column, 0), -- 将该列null值显示为0
    SUM(CASE WHEN gender = 'Male' THEN 1 ELSE 0 END)  num_male_employees
FROM table_name t1
LEFT JOIN departments ON t1.department_id = t1.department_id
WHERE hire_date >= '2024-01-01' AND column LIKE 'c%' AND ... -- and连接条件
GROUP BY department, job_title, ... -- ,连接列名
HAVING AVG(salary) > 50000 AND COUNT(employee_id) > 3 AND ...
ORDER BY department, job_title, ... ;

三、对表的其他操作

1.去重

distinct:

SELECT DISTINCT column1, column2, ... FROM table_name
WHERE condition;

分组:

SELECT country, SUM(deaths) FROM covid_month 
GROUP BY country;

 

2.查找

rlike:后面是正则表达式

SELECT * FROM table_name1 WHERE column RLIKE '^[0-2]'; -- 0,1,2

regexp:

SELECT column1, column2, ... FROM table_name
WHERE column_name REGEXP 'pattern';

3.条件

case:例子

SELECT 
    column1,
    column2,
    CASE
        WHEN score >= 90 THEN 'A'-- 若列条件则输出
        WHEN score >= 80 THEN 'B'
        WHEN score >= 70 THEN 'C'
        WHEN score >= 60 THEN 'D'
        ELSE 'F'
    END AS new_column1
FROM
    table_name
HAVING score >= 60; -- 只输出符合条件的项

4.with

和直接select差不多,比它快 

WITH w1 AS (
select name, value from diction where code = 's_model'
), w2 AS (
select name,value from diction where code = 'd_model'
), w3 AS (
select project_name,id from project
)
select * w1
left join w2 pd on w1.id = pd.device_id
left join w3 on w3.id = pd.project_id
where w1.device_type in (1,2);

5.分表区

1.创建分区 

ALTER TABLE table_name
PARTITION BY RANGE (year(sale_date))
(
    PARTITION p0 VALUES LESS THAN (2010),
    PARTITION p1 VALUES LESS THAN (2015),
    PARTITION p2 VALUES LESS THAN (2020),
    PARTITION p3 VALUES LESS THAN MAXVALUE
);

2.删除某个分区

ALTER TABLE table_name DROP PARTITION partition_name;

3.删除所有分区

ALTER TABLE table_name REMOVE PARTITIONING;

6.临时表

1.创建临时表

CREATE TEMPORARY TABLE temp_orders_name AS
SELECT * FROM table_name WHERE condition;

2.查询临时表

SELECT * FROM temp_orders_name;

3.插入数据到临时表

INSERT INTO temp_orders_name (student_id,name,score)
VALUES (9, Kitty, '92');

4.删除临时表

DROP TEMPORARY TABLE IF EXISTS temp_orders_name;

7.事务

大例子

-- 事务 例子
drop table accounts;
drop table transactions;

CREATE TABLE accounts (
    account_id INT AUTO_INCREMENT PRIMARY KEY,
    balance DECIMAL(10, 2) NOT NULL DEFAULT 0.00
);

CREATE TABLE transactions (
    transaction_id INT AUTO_INCREMENT PRIMARY KEY,
    from_account INT NOT NULL,
    to_account INT NOT NULL,
    amount DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (from_account) REFERENCES accounts(account_id),
    FOREIGN KEY (to_account) REFERENCES accounts(account_id)
);

-- 插入第一个账户
INSERT INTO accounts (balance) VALUES (1000.00);

-- 插入第二个账户
INSERT INTO accounts (balance) VALUES (500.00);

-- 假设账户1和账户2已经存在
INSERT INTO transactions (from_account, to_account, amount) 
VALUES (1, 2, 200.00);

select * from accounts;
select * from transactions;

-- 开始事务
START TRANSACTION;

-- 从账户A减少金额
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;

-- 向账户B增加金额
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- 将转账记录插入到transactions表中
INSERT INTO transactions (from_account, to_account, amount) VALUES (1, 2, 100);

-- 检查是否有错误,如果没有,提交事务
-- 如果有错误,例如某个账户不存在,那么MySQL会自动回滚事务
COMMIT;

select * from accounts;
select * from transactions;

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值