MySQL-1.增删改
0. 数据库简介
0.1 SQL语句分类
- 数据定义语言DDL(Data Definition Language)
对逻辑结构的操作,其中包含表结构、视图和索引。
命令:
CREATE
DROP
ALTER
- 数据查询语言DQL(Data Query Language)
对数据进行查询。简单查询,连接查询等都是。
命令:
SELECT
- 数据操纵语言DML(Data Manipulation Language)
对数据进行操作。
命令:
INSERT
UPDATE
DELETE
- 数据控制功能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;能够查看支持的引擎。)
关于列的类型:
- 数字: TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT和BIT。
- 浮点数:DECIMAL、FLOAT、DOUBLE。
- 字符串:CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。
- Spatial数据类型。
- 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;
一旦数据被清空,无法回滚。