MySQL-1.增删改

0. 数据库简介

0.1 SQL语句分类

  1. 数据定义语言DDL(Data Definition Language)

对逻辑结构的操作,其中包含表结构、视图和索引。
命令:
CREATE
DROP
ALTER

  1. 数据查询语言DQL(Data Query Language)

对数据进行查询。简单查询,连接查询等都是。
命令:
SELECT

  1. 数据操纵语言DML(Data Manipulation Language)

对数据进行操作。
命令:
INSERT
UPDATE
DELETE

  1. 数据控制功能DCL(Data Control Language)

对数据库安全性、完整性等操作。
命令:
GRANT
REVOKE
COMMIT
ROLLBACK

1.使用命令行连接到MySQL

1.1 连接数据库

命令:
mysql -h 服务器IP地址 -P 端口号 -u 用户名 -p <密码(可选,不填的话之后会单独输入密码)> <数据库名(可选)>
例如:

mysql -h localhost -P 3306 -u root -p

然后输入密码,回车。

1.2 退出数据库

命令:
exit;
退出MySQL。

MySQL的语句都是以";"结尾。

2.创建数据库

2.1 创建数据库

命令:
CREATE DATABASE 数据库名;
例如:

CREATE DATABASE company;
CREATE DATABASE \`my.contacts\`;

如果数据库名中包含特殊字符,如".",则需要使用反引号"`"来包含。

2.2 切换数据库

命令:
USE 数据库名;
例如:

USE company;
USE \`my.contacts\`;

2.3 查询当前连接的数据库

命令:
SELECT DATABASE();

2.4 查询当前用户有权访问的数据库

命令:
SHOW DATABASES; (注意末尾的S)

3. 创建表

3.1 创建表

命令:
CREATE TABLE IF NOT EXISTS `company`.`customers`(
`id` int unsigned AUTO_INCREMENT PRIMARY KEY,
`first_name` varchar(20),
`last_name` varchar(20),
`country` varchar(20)
)ENGINE=InnoDB;

  • 句点符号:可以给表指定数据库,例:`数据库名`.`表名`。如果登录时已经指定的数据库,则可以省略数据库名。
  • IF NOT EXITSTS:如果表已经存在则会抛出一个警告,如果不指定,则会抛出一个错误。
  • `列名` 类型:用来指定一列。
  • AUTO_INCREMENT:自动生成线性递增序列。该列会被视为PRIMARY KEY。
  • PRIMARY KEY: 主键,每行都必须指定一个非空的UNIQUE列标识。
  • Engine:存储引擎,包括InnoDB、MyISAM、FEDERATED、BLACKHOLE、CSV和MEMORY。默认为InnoDB,其是唯一的事务引擎。该主题后续再说。(命令:SHOW ENGINES;能够查看支持的引擎。)

关于列的类型:

  1. 数字: TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT和BIT。
  2. 浮点数:DECIMAL、FLOAT、DOUBLE。
  3. 字符串:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
  4. Spatial数据类型。
  5. JSON数据类型,后续介绍。

3.2 查看数据库中的表

命令:
SHOW TABLES;

3.3 查看表结构

命令:
SHOW CREATE TABLE 表名;
例:

SHOW CREATE TABLE customers;

3.4 克隆表结构

命令:
CREATE TABLE 新表名 LIKE 表名;
例如:

CREATE TABLE new_customers LIKE customers;

LIKE 后的表也可以是一个子查询(后续介绍)的结果集。

4. 插入、更新和删除行

4.1 插入

命令:
INSERT [IGNORE] INTO [`数据库名`.]`表名` (列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),...;

  • IGNORE:指定了该子句后,如果插入的行已存在,则插入的数据将被忽略,语句会执行成功,同时生成一个警告和重复数据的数目。如果没有指定,则会抛出错误。
    例如:
INSERT IGNORE INTO `company`.`customers`(first_name,last_name,country) 
VALUES 
('Mike','Christensen','USA'),
('Andy','Hollands','Australia'),
('Ravi','Vedantam','India'),
('Rajiv','Perera','Sri Lanka');

4.2 更新

命令:
UPDATE 表名 SET 列名1=值1,列名2=值2... WHERE 条件;
例如:

UPDATE customers SET first_name='Rajiv', country='UK' 
WHERE id=4;

主要检查WHERE条件,如果没有条件的话,会更新全表。

4.3 删除

命令:
DELETE FROM 表名 WHERE 条件;
例如:

DELETE FROM customers 
WHERE first_name='Rajiv' AND country='UK';

4.4 REPLACE、INSERT、ON DUPLICATE KEY UPDATE

命令:
REPLACE INTO 表名 VALUES (值1,值2,...),(值1,值2,...);
例如:

REPLACE INTO customers VALUES (1, 'Mike', 'Christensen', 'America');

如果插入的行已经存在,则会删除并插入新行,如果不存在就相当于INSERT INTO。

命令:
INSTER INTO 表名 VALUES (值1,值2,...) ON DUPLICATE KEY UPDATE 列名1=值1, 列名2=VALUES(列名2),...
例如:

INSERT INTO payments VALUES ('Mike Christensen', 200) ON DUPLICATE KEY UPDATE payment=payment+VALUES(payment);

当插入的行存在时,执行后边的更新语句。可以使用VALUES()来获取插入语句中对应的值。
该用法是MySQL的专有语句,如果需要跨平台,要注意。

4.5 清空表

命令:
TRUNCATE TABLE 表名;
例如:

TRUNCATE TABLE customers;

一旦数据被清空,无法回滚。

posted @ 2020-04-14 15:32  MeTwo  阅读(283)  评论(0)    收藏  举报