★DDL-对库和表结构的操作
1. DDL-操作数据库
-- 查询所有数据库
SHOW DATABASES;
– 标准语法
SHOW CREATE DATABASE 数据库名称;
例子 ↓
– 查看mysql数据库的创建格式
SHOW CREATE DATABASE mysql;
★ 创建数据库
CREATE DATABASE 数据库名称; 创建一个已存在的数据库会报错
↓ 错误代码:1007 Can't create database 'db1'; database exists
CREATE DATABASE db1; CREATE DATABASE db1;
★ 创建数据库(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS 数据库名称;
↓ 创建数据库db2(判断,如果不存在则创建)
CREATE DATABASE IF NOT EXISTS db2;
★ 创建数据库、并指定字符集
CREATE DATABASE 数据库名称 CHARACTER SET 字符集名称;
创建数据库db3、并指定字符集utf8
CREATE DATABASE db3 CHARACTER SET utf8;
★ 查看db3数据库的字符集
SHOW CREATE DATABASE db3;
★案例
★ 创建db4数据库、如果不存在则创建,指定字符集为 utf8;
CREATE DATABASE IF NOT EXISTS db4 CHARACTER SET utf8;
★ (Update) :修改
ALTER DATABASE 数据库名称 CHARACTER SET 字符集名称;
ALTER DATABASE db4 CHARACTER SET utf8;
查看db4数据库的字符集
SHOW CREATE DATABASE db4;
★ D(Delete):删除
DROP DATABASE 数据库名称;
删除db1数据库
DROP DATABASE db1;
★ 案例
删除一个不存在的数据库会报错
– 错误代码:1008 Can’t drop database ‘db1’; database doesn’t exist
DROP DATABASE db1;
------------------------------
DROP DATABASE IF EXISTS 数据库名称;
删除数据库db2,如果存在
DROP DATABASE IF EXISTS db2;
(判断,如果存在则删除)
★ 使用数据库
查询当前正在使用的数据库名称
SELECT DATABASE();
---------------------------
★ 使用数据库
USE 数据库名称;
使用db4数据库
USE db4;
★案例★
创建db4数据库、如果不存在则创建,指定字符集为 utf8
CREATE DATABASE IF NOT EXISTS 数据库名 CHARACTER SET 字符集名;
↓
CREATE DATABASE IF NOT EXISTS db01 CHARACTER SET utf8;
展示当前数据库下所有的表: (★还没建表的时候没有★)
show tables;
===========================================================
★ DDL-操作数据表
★ R(Retrieve):查询
使用mysql数据库 | 查询库中所有的表
USE mysql; | SHOW TABLES;
------------------------------- ----------------------------------------
DESC 表名;
查询user表结构
DESC user;
★ 查询表字符集
SHOW TABLE STATUS FROM 库名 LIKE '表名';
查看mysql数据库中user表字符集
SHOW TABLE STATUS FROM mysql LIKE ‘user’;
★ C(Create):创建 | int:整数类型
| * age int
创建数据表 |
CREATE TABLE 表名( | double:小数类型
列名1 数据类型1, | * score double(5,2)
列名2 数据类型2, | * price double
.... |
列名n 数据类型n | date:日期,只包含年月日
); | yyyy-MM-dd
– 注意:最后一列,不需要加逗号 |
---|
datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
timestamp:时间戳类型 包含年月日时分秒 yyyy-MM-dd HH:mm:ss
* 如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
varchar:字符串
* name varchar(20):姓名最大20个字符
* zhangsan 8个字符 张三 2个字符*3
★ 创建数据表
使用db3数据库
USE db3;
-- 创建一个product商品表
CREATE TABLE product(
id INT, -- 商品编号
NAME VARCHAR(30), -- 商品名称
price DOUBLE, -- 商品价格
stock INT, -- 商品库存
insert_time DATE -- 上架时间
);
★ 复制表
CREATE TABLE 表名 LIKE 被复制的表名;
复制product表到product2表
CREATE TABLE product2 LIKE product;
★ U(Update):修改
ALTER TABLE 表名 RENAME TO 新的表名;
修改product2表名为product3
ALTER TABLE product2 RENAME TO product3;
★ 修改表的字符集
ALTER TABLE 表名 CHARACTER SET 字符集名称;
ALTER TABLE product3 CHARACTER SET gbk;
★ 添加一列
ALTER TABLE 表名 ADD 列名 数据类型;
给product3表添加一列color
ALTER TABLE product3 ADD color VARCHAR(10);
-------------------------------------------------------------
★ 修改列名称和数据类型
ALTER TABLE 表名 MODIFY 列名 新数据类型;
将color数据类型修改为int
ALTER TABLE product3 MODIFY color INT;
★ 修改数据类型 标准语法
ALTER TABLE 表名 MODIFY 列名 新数据类型;
ALTER TABLE product3 MODIFY color INT;
查看product3表详细信息
DESC product3;
★ 修改列名和数据类型 标准语法
ALTER TABLE 表名 CHANGE 列名 新列名 新数据类型;
将color修改为address,数据类型为varchar
ALTER TABLE product3 CHANGE color address VARCHAR(30);
查看product3表详细信息
DESC product3;
★ 删除列
ALTER TABLE 表名 DROP 列名;
删除address列
ALTER TABLE product3 DROP address;
★ D(Delete):删除
DROP TABLE 表名;
删除product3表
DROP TABLE product3;
删除数据表(判断,如果存在则删除)
DROP TABLE IF EXISTS 表名;
删除product3表,如果存在则删除
DROP TABLE IF EXISTS pro duct3;
-----------------------------------------
★案例★
创建数据库中的表: 创建user表: id, 姓名username(VARCHAR), 年龄age(int), 性别 gender(VARCHAR = string),生日birthday(date)
-- VARCHAR(长度) :VARCHAR(255)
CREATE TABLE user2 (
id INT,
username VARCHAR(255),
age int,
gender VARCHAR(10),
birthday date
);
--------------------------------------
新需求: 修改user2表username为uname, 新增一列 password.
– **修改列名 :CHANGE
alter TABLE user2 CHANGE username uname VARCHAR(255);
–了解: 对比: CHANGE MODIFY RENAME
– 修改字段类型:MODIFY
alter TABLE user2 MODIFY age integer;
-- 修改表名:RENAME user2变为t_user表
alter TABLE user2 RENAME TO t_user;
-- **新增一列密码字段:ADD password
ALTER TABLE t_user ADD password VARCHAR(255);
---------------------
删除表: -- 删除user2表
DROP TABLE user2;
===========================================================
★ 对数据的操作(重要) -- 对数据的增删改查 ★
★ DML-INSERT语句
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...);
↓ (向product表添加一条数据)
INSERT INTO product(id,NAME,price,stock,insert_time) VALUES (1,'手机',1999,22,'2099-09-09');
------------------------
向product表添加指定列数据
INSERT INTO product (id,NAME,price) VALUES (2,'电脑',4999);
查看表中所有数据
SELECT * FROM product;
----------------------------
INSERT INTO 表名 VALUES (值1,值2,值3,...);
↓ (默认给全部列添加数据)
INSERT INTO product VALUES (3,'电视',2999,18,'2099-06-06');
--------------------------------------------------
★ 批量添加数据★
INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...);
INSERT INTO product VALUES (4,'冰箱',999,26,'2099-08-08'),
(5,'洗衣机',1999,32,'2099-05-10');
--------------------------------
★ 给指定列添加数据 标准语法
INSERT INTO 表名(列名1,列名2,...) VALUES (值1,值2,...),(值1,值2,...),(值1,值2,...);
↓ (批量添加指定列数据)
INSERT INTO product (id,NAME,price) VALUES (6,'微波炉',499),(7,'电磁炉',899);
★DML-UPDATE语句
修改表数据语法
UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,... [where 条件];
↓ (修改手机的价格为3500 )
UPDATE product SET price=3500 WHERE NAME='手机';
-----------------------------
修改电视的价格为1800、库存为36
UPDATE product SET price=1800,stock=36 WHERE NAME='电视';
-----------------------------------------
修改电磁炉的库存为10
UPDATE product SET stock=10 WHERE id=7;
★ DML-DELETE语句
★ 删除表数据语法
DELETE FROM 表名 [WHERE 条件];
↓ (删除product表中的微波炉信息)
DELETE FROM product WHERE NAME='微波炉';
---------------------------------
删除product表中库存为10的商品信息
DELETE FROM product WHERE stock=10;
---------------------------
查看所有商品信息
SELECT * FROM product;
★删除语句中必须加条件★
★如果不加条件,则将所有数据删除★
-- ======= 二.1. DML 对表中数据的操作 ==========
数据的添加: INSERT INTO 表名... VALUES
添加1条数据: 王大锤, 20 , 北京,男性
INSERT INTO student VALUES('王大锤3', 20, '北京', '男');
一条sql插入多条数据:
INSERT INTO student VALUES
('王大锤11', 20, '北京', '男'),
('王大锤12', 20, '北京', '男'),
('王大锤13', 20, '北京', '男') ;
插入指定列(不是所有列都添加数据,就必须指定列名)
INSERT INTO student (name,age) VALUES('周星驰', 20);
数据的修改: UPDATE 表名 set xxx..... WHERE xxx
将李四的age修改为 40;
UPDATE student set age = 40 WHERE NAME = '李四';
将所有人的性别 gender 修改为 女;
UPDATE student set gender = '女';
将周星驰的 age=60, 地址=香港, 性别=男
update student set age=60, addr ='香港' , gender= '男' WHERE name = '周星驰';
数据的删除: DELETE FROM 表名 WHERE xxx
删除姓名为王大锤的数据:
DELETE FROM student WHERE name = '王大锤';
删除 年龄=40 性别=男的 数据:
DELETE FROM student WHERE age = 40 AND gender = '男';
★ DQL-单表查询
-- 创建db1数据库
CREATE DATABASE db1;
-- 使用db1数据库
USE db1;
-- 创建数据表
CREATE TABLE product(
id INT, -- 商品编号
NAME VARCHAR(20), -- 商品名称
price DOUBLE, -- 商品价格
brand VARCHAR(10), -- 商品品牌
stock INT, -- 商品库存
insert_time DATE -- 添加时间
);
-- 添加数据
INSERT INTO product VALUES (1,'华为手机',3999,'华为',23,'2088-03-10'),
(2,'小米手机',2999,'小米',30,'2088-05-15'),
(3,'苹果手机',5999,'苹果',18,'2088-08-20'),
(4,'华为电脑',6999,'华为',14,'2088-06-16'),
(5,'小米电脑',4999,'小米',26,'2088-07-08'),
(6,'苹果电脑',8999,'苹果',15,'2088-10-25'),
(7,'联想电脑',7999,'联想',NULL,'2088-11-11');
★ 查询语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
★ 查询全部
SELECT * FROM 表名;
SELECT * FROM product;
★ 多个字段查询
SELECT 列名1,列名2,... FROM 表名;
SELECT NAME,price,brand FROM product;
★去除重复查询
★注意:只有全部重复的才可以去除★
SELECT DISTINCT 列名1,列名2,... FROM 表名;
↓ (查询品牌)
SELECT brand FROM product;
查询品牌,去除重复
SELECT DISTINCT brand FROM product;
★ 计算列的值(四则运算)
标准语法
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
/*
计算列的值
标准语法:
SELECT 列名1 运算符(+ - * /) 列名2 FROM 表名;
如果某一列为null,可以进行替换
ifnull(表达式1,表达式2)
表达式1:想替换的列
表达式2:想替换的值
*/
查询商品名称和库存,库存数量在原有基础上加10
SELECT NAME,stock+10 FROM product;
查询商品名称和库存,库存数量在原有基础上加10。进行null值判断
SELECT NAME,IFNULL(stock,0)+10 FROM product;
------------------------------
标准语法
SELECT 列名1,列名2,... AS 别名 FROM 表名;
查询商品名称和库存,库存数量在原有基础上加10。进行null值判断。起别名为getSum
SELECT NAME,IFNULL(stock,0)+10 AS getsum FROM product;
SELECT NAME,IFNULL(stock,0)+10 getsum FROM product;